devcoach 0.3.11__tar.gz → 0.3.12__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.
- {devcoach-0.3.11 → devcoach-0.3.12}/.github/workflows/ci.yml +145 -2
- {devcoach-0.3.11 → devcoach-0.3.12}/.gitignore +1 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/PKG-INFO +12 -4
- {devcoach-0.3.11 → devcoach-0.3.12}/README.md +11 -3
- devcoach-0.3.12/devcoach.spec +74 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/pyproject.toml +1 -1
- {devcoach-0.3.11 → devcoach-0.3.12}/sonar-project.properties +1 -1
- {devcoach-0.3.11 → devcoach-0.3.12}/uv.lock +143 -116
- {devcoach-0.3.11 → devcoach-0.3.12}/.github/dependabot.yml +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/.github/scripts/export_backup.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/.github/scripts/fixtures/devcoach-backup.zip +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/.github/scripts/take_screenshots.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/.github/workflows/ruff-autofix.yml +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/.github/workflows/update-screenshots.yml +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/CLAUDE.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/LICENSE +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/NOTICE +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/PLAN.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/cli.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/configuration.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/favicon.svg +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/getting-started.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/how-it-works.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/index.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/mcp-server.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/knowledge-map-dark.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/knowledge-map-light.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-ci-cd-pipeline-stages-dark.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-ci-cd-pipeline-stages-light.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-docker-layer-cache-dark.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-docker-layer-cache-light.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-git-interactive-rebase-dark.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-git-interactive-rebase-light.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-postgresql-explain-analyze-dark.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-postgresql-explain-analyze-light.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-redis-cache-stampede-dark.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-redis-cache-stampede-light.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lessons-dark.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lessons-light.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/settings-dark.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/settings-light.png +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/docs/web-ui.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/mkdocs.yml +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/SKILL.md +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/__init__.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/cli/__init__.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/cli/commands.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/core/__init__.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/core/coach.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/core/db.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/core/detect.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/core/git.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/core/models.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/core/prompts.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/mcp/__init__.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/mcp/server.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/__init__.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/app.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/favicon.svg +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/relative-time.js +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/style.css +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/alpinejs.min.js +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/flatpickr-dark.min.css +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/flatpickr.min.css +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/flatpickr.min.js +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/highlight.min.js +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/hljs-dark.min.css +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/hljs-light.min.css +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/htmx.min.js +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/icons/bitbucket.svg +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/icons/github.svg +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/icons/gitlab.svg +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/icons/vscode.svg +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/marked.min.js +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/static/vendor/tailwind.js +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/templates/base.html +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/templates/lesson_detail.html +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/templates/lessons.html +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/templates/profile.html +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/src/devcoach/web/templates/settings.html +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/__init__.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/conftest.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_cli.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_cli_commands.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_coach.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_db_extra.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_detect.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_git.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_mcp_server.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_prompts.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_web.py +0 -0
- {devcoach-0.3.11 → devcoach-0.3.12}/tests/test_web_extra.py +0 -0
|
@@ -257,11 +257,61 @@ jobs:
|
|
|
257
257
|
path: dist/
|
|
258
258
|
- uses: pypa/gh-action-pypi-publish@release/v1
|
|
259
259
|
|
|
260
|
+
# ── Build binaries ──────────────────────────────────────────────────────
|
|
261
|
+
# Builds PyInstaller single-file executables for all target platforms.
|
|
262
|
+
# Only runs on releases (tag push or workflow_dispatch) — not on PRs or main pushes.
|
|
263
|
+
build-binaries:
|
|
264
|
+
name: Build binary (${{ matrix.platform }})
|
|
265
|
+
needs: [bump, lint, test]
|
|
266
|
+
if: >
|
|
267
|
+
always()
|
|
268
|
+
&& (needs.bump.result == 'success' || needs.bump.result == 'skipped')
|
|
269
|
+
&& needs.lint.result == 'success'
|
|
270
|
+
&& needs.test.result == 'success'
|
|
271
|
+
&& (startsWith(github.ref, 'refs/tags/v') || github.event_name == 'workflow_dispatch')
|
|
272
|
+
strategy:
|
|
273
|
+
fail-fast: false
|
|
274
|
+
matrix:
|
|
275
|
+
include:
|
|
276
|
+
- platform: darwin-arm64
|
|
277
|
+
runs-on: macos-latest
|
|
278
|
+
- platform: darwin-amd64
|
|
279
|
+
runs-on: macos-13
|
|
280
|
+
- platform: linux-amd64
|
|
281
|
+
runs-on: ubuntu-latest
|
|
282
|
+
- platform: linux-arm64
|
|
283
|
+
runs-on: ubuntu-24.04-arm
|
|
284
|
+
runs-on: ${{ matrix.runs-on }}
|
|
285
|
+
steps:
|
|
286
|
+
- uses: actions/checkout@v6
|
|
287
|
+
with:
|
|
288
|
+
ref: ${{ needs.bump.outputs.tag || github.ref }}
|
|
289
|
+
- uses: astral-sh/setup-uv@v7
|
|
290
|
+
with:
|
|
291
|
+
python-version: "3.12"
|
|
292
|
+
- name: Install dependencies and PyInstaller
|
|
293
|
+
run: |
|
|
294
|
+
uv sync
|
|
295
|
+
uv pip install pyinstaller
|
|
296
|
+
- name: Build binary
|
|
297
|
+
run: uv run pyinstaller devcoach.spec --distpath dist
|
|
298
|
+
- name: Rename binary
|
|
299
|
+
run: mv dist/devcoach dist/devcoach-${{ matrix.platform }}
|
|
300
|
+
- uses: actions/upload-artifact@v7
|
|
301
|
+
with:
|
|
302
|
+
name: binary-${{ matrix.platform }}
|
|
303
|
+
path: dist/devcoach-${{ matrix.platform }}
|
|
304
|
+
retention-days: 7
|
|
305
|
+
|
|
260
306
|
# ── GitHub Release ──────────────────────────────────────────────────────
|
|
261
307
|
github-release:
|
|
262
308
|
name: Create GitHub Release
|
|
263
|
-
needs: [bump, publish]
|
|
264
|
-
if:
|
|
309
|
+
needs: [bump, publish, build-binaries]
|
|
310
|
+
if: >
|
|
311
|
+
always()
|
|
312
|
+
&& needs.publish.result == 'success'
|
|
313
|
+
&& needs.build-binaries.result == 'success'
|
|
314
|
+
&& (needs.bump.result == 'success' || startsWith(github.ref, 'refs/tags/v'))
|
|
265
315
|
runs-on: ubuntu-latest
|
|
266
316
|
permissions:
|
|
267
317
|
contents: write
|
|
@@ -273,9 +323,102 @@ jobs:
|
|
|
273
323
|
with:
|
|
274
324
|
name: dist
|
|
275
325
|
path: dist/
|
|
326
|
+
- uses: actions/download-artifact@v8
|
|
327
|
+
with:
|
|
328
|
+
pattern: binary-*
|
|
329
|
+
merge-multiple: true
|
|
330
|
+
path: dist/
|
|
276
331
|
- uses: softprops/action-gh-release@v3
|
|
277
332
|
with:
|
|
278
333
|
tag_name: ${{ needs.bump.outputs.tag || github.ref_name }}
|
|
279
334
|
files: dist/*
|
|
280
335
|
generate_release_notes: true
|
|
281
336
|
fail_on_unmatched_files: true
|
|
337
|
+
|
|
338
|
+
# ── Bump Homebrew formula ────────────────────────────────────────────────
|
|
339
|
+
# After a successful release, updates Formula/devcoach.rb in homebrew-tap
|
|
340
|
+
# with the new version and SHA256 hashes for all platform binaries.
|
|
341
|
+
# Requires secret HOMEBREW_TAP_TOKEN (classic PAT, repo scope on homebrew-tap).
|
|
342
|
+
bump-homebrew-formula:
|
|
343
|
+
name: Bump Homebrew formula
|
|
344
|
+
needs: [bump, github-release, build-binaries]
|
|
345
|
+
if: >
|
|
346
|
+
always()
|
|
347
|
+
&& needs.github-release.result == 'success'
|
|
348
|
+
&& needs.build-binaries.result == 'success'
|
|
349
|
+
runs-on: ubuntu-latest
|
|
350
|
+
steps:
|
|
351
|
+
- uses: actions/download-artifact@v8
|
|
352
|
+
with:
|
|
353
|
+
pattern: binary-*
|
|
354
|
+
merge-multiple: true
|
|
355
|
+
path: binaries/
|
|
356
|
+
- name: Compute SHA256 hashes
|
|
357
|
+
id: sha
|
|
358
|
+
run: |
|
|
359
|
+
echo "darwin_arm64=$(sha256sum binaries/devcoach-darwin-arm64 | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
|
|
360
|
+
echo "darwin_amd64=$(sha256sum binaries/devcoach-darwin-amd64 | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
|
|
361
|
+
echo "linux_amd64=$(sha256sum binaries/devcoach-linux-amd64 | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
|
|
362
|
+
echo "linux_arm64=$(sha256sum binaries/devcoach-linux-arm64 | cut -d' ' -f1)" >> "$GITHUB_OUTPUT"
|
|
363
|
+
- name: Clone homebrew-tap
|
|
364
|
+
run: |
|
|
365
|
+
git clone "https://x-access-token:${{ secrets.HOMEBREW_TAP_TOKEN }}@github.com/UltimaPhoenix/homebrew-tap.git" tap
|
|
366
|
+
- name: Update formula
|
|
367
|
+
env:
|
|
368
|
+
TAG: ${{ needs.bump.outputs.tag || github.ref_name }}
|
|
369
|
+
DARWIN_ARM64_SHA: ${{ steps.sha.outputs.darwin_arm64 }}
|
|
370
|
+
DARWIN_AMD64_SHA: ${{ steps.sha.outputs.darwin_amd64 }}
|
|
371
|
+
LINUX_AMD64_SHA: ${{ steps.sha.outputs.linux_amd64 }}
|
|
372
|
+
LINUX_ARM64_SHA: ${{ steps.sha.outputs.linux_arm64 }}
|
|
373
|
+
run: |
|
|
374
|
+
VERSION="${TAG#v}"
|
|
375
|
+
cat > tap/Formula/devcoach.rb << FORMULA
|
|
376
|
+
class Devcoach < Formula
|
|
377
|
+
desc "Progressive technical coaching MCP server for Claude Code and Claude Desktop"
|
|
378
|
+
homepage "https://github.com/UltimaPhoenix/dev-coach"
|
|
379
|
+
version "$VERSION"
|
|
380
|
+
license "Apache-2.0"
|
|
381
|
+
|
|
382
|
+
on_macos do
|
|
383
|
+
on_arm do
|
|
384
|
+
url "https://github.com/UltimaPhoenix/dev-coach/releases/download/$TAG/devcoach-darwin-arm64"
|
|
385
|
+
sha256 "$DARWIN_ARM64_SHA"
|
|
386
|
+
end
|
|
387
|
+
on_intel do
|
|
388
|
+
url "https://github.com/UltimaPhoenix/dev-coach/releases/download/$TAG/devcoach-darwin-amd64"
|
|
389
|
+
sha256 "$DARWIN_AMD64_SHA"
|
|
390
|
+
end
|
|
391
|
+
end
|
|
392
|
+
|
|
393
|
+
on_linux do
|
|
394
|
+
on_arm do
|
|
395
|
+
url "https://github.com/UltimaPhoenix/dev-coach/releases/download/$TAG/devcoach-linux-arm64"
|
|
396
|
+
sha256 "$LINUX_ARM64_SHA"
|
|
397
|
+
end
|
|
398
|
+
on_intel do
|
|
399
|
+
url "https://github.com/UltimaPhoenix/dev-coach/releases/download/$TAG/devcoach-linux-amd64"
|
|
400
|
+
sha256 "$LINUX_AMD64_SHA"
|
|
401
|
+
end
|
|
402
|
+
end
|
|
403
|
+
|
|
404
|
+
def install
|
|
405
|
+
binary = Dir["devcoach-*"].first
|
|
406
|
+
chmod 0755, binary
|
|
407
|
+
bin.install binary => "devcoach"
|
|
408
|
+
end
|
|
409
|
+
|
|
410
|
+
test do
|
|
411
|
+
assert_match "devcoach", shell_output("#{bin}/devcoach --help 2>&1")
|
|
412
|
+
end
|
|
413
|
+
end
|
|
414
|
+
FORMULA
|
|
415
|
+
- name: Commit and push
|
|
416
|
+
run: |
|
|
417
|
+
TAG="${{ needs.bump.outputs.tag || github.ref_name }}"
|
|
418
|
+
VERSION="${TAG#v}"
|
|
419
|
+
cd tap
|
|
420
|
+
git config user.name "github-actions[bot]"
|
|
421
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
422
|
+
git add Formula/devcoach.rb
|
|
423
|
+
git diff --cached --quiet || git commit -m "devcoach $VERSION"
|
|
424
|
+
git push
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: devcoach
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.12
|
|
4
4
|
Summary: A local MCP server that acts as a progressive technical coach for Claude Code and Claude Desktop
|
|
5
5
|
Project-URL: Homepage, https://github.com/UltimaPhoenix/dev-coach
|
|
6
6
|
Project-URL: Repository, https://github.com/UltimaPhoenix/dev-coach
|
|
@@ -280,13 +280,21 @@ Everything runs **locally**. No data leaves your machine. One SQLite file at `~/
|
|
|
280
280
|
|
|
281
281
|
## Installation
|
|
282
282
|
|
|
283
|
-
###
|
|
283
|
+
### Homebrew (macOS / Linux)
|
|
284
|
+
|
|
285
|
+
```bash
|
|
286
|
+
brew tap UltimaPhoenix/tap && brew install devcoach
|
|
287
|
+
```
|
|
288
|
+
|
|
289
|
+
Pre-built native binaries — no Python required.
|
|
290
|
+
|
|
291
|
+
### uvx — no permanent install needed
|
|
284
292
|
|
|
285
293
|
```bash
|
|
286
294
|
uvx devcoach mcp # starts the MCP server directly
|
|
287
295
|
```
|
|
288
296
|
|
|
289
|
-
###
|
|
297
|
+
### uv tool — permanent install
|
|
290
298
|
|
|
291
299
|
```bash
|
|
292
300
|
uv tool install devcoach
|
|
@@ -300,7 +308,7 @@ devcoach install
|
|
|
300
308
|
|
|
301
309
|
Restart Claude Code or Claude Desktop after installing.
|
|
302
310
|
|
|
303
|
-
> **Requirements:** [uv](https://docs.astral.sh/uv/) · Python 3.12+ · Claude Code or Claude Desktop
|
|
311
|
+
> **Requirements (uvx/uv):** [uv](https://docs.astral.sh/uv/) · Python 3.12+ · Claude Code or Claude Desktop
|
|
304
312
|
|
|
305
313
|
---
|
|
306
314
|
|
|
@@ -49,13 +49,21 @@ Everything runs **locally**. No data leaves your machine. One SQLite file at `~/
|
|
|
49
49
|
|
|
50
50
|
## Installation
|
|
51
51
|
|
|
52
|
-
###
|
|
52
|
+
### Homebrew (macOS / Linux)
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
brew tap UltimaPhoenix/tap && brew install devcoach
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
Pre-built native binaries — no Python required.
|
|
59
|
+
|
|
60
|
+
### uvx — no permanent install needed
|
|
53
61
|
|
|
54
62
|
```bash
|
|
55
63
|
uvx devcoach mcp # starts the MCP server directly
|
|
56
64
|
```
|
|
57
65
|
|
|
58
|
-
###
|
|
66
|
+
### uv tool — permanent install
|
|
59
67
|
|
|
60
68
|
```bash
|
|
61
69
|
uv tool install devcoach
|
|
@@ -69,7 +77,7 @@ devcoach install
|
|
|
69
77
|
|
|
70
78
|
Restart Claude Code or Claude Desktop after installing.
|
|
71
79
|
|
|
72
|
-
> **Requirements:** [uv](https://docs.astral.sh/uv/) · Python 3.12+ · Claude Code or Claude Desktop
|
|
80
|
+
> **Requirements (uvx/uv):** [uv](https://docs.astral.sh/uv/) · Python 3.12+ · Claude Code or Claude Desktop
|
|
73
81
|
|
|
74
82
|
---
|
|
75
83
|
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# -*- mode: python ; coding: utf-8 -*-
|
|
2
|
+
import sys
|
|
3
|
+
from pathlib import Path
|
|
4
|
+
|
|
5
|
+
src = Path("src/devcoach")
|
|
6
|
+
|
|
7
|
+
datas = [
|
|
8
|
+
(str(src / "SKILL.md"), "devcoach"),
|
|
9
|
+
(str(src / "web" / "templates"), "devcoach/web/templates"),
|
|
10
|
+
(str(src / "web" / "static"), "devcoach/web/static"),
|
|
11
|
+
]
|
|
12
|
+
|
|
13
|
+
hidden_imports = [
|
|
14
|
+
# pydantic-core is a compiled extension — ensure it's picked up
|
|
15
|
+
"pydantic_core",
|
|
16
|
+
"pydantic_core._pydantic_core",
|
|
17
|
+
# fastmcp / mcp internals that may be dynamically imported
|
|
18
|
+
"mcp",
|
|
19
|
+
"mcp.server",
|
|
20
|
+
"mcp.server.stdio",
|
|
21
|
+
"mcp.types",
|
|
22
|
+
# uvicorn needs these
|
|
23
|
+
"uvicorn.logging",
|
|
24
|
+
"uvicorn.loops",
|
|
25
|
+
"uvicorn.loops.auto",
|
|
26
|
+
"uvicorn.protocols",
|
|
27
|
+
"uvicorn.protocols.http",
|
|
28
|
+
"uvicorn.protocols.http.auto",
|
|
29
|
+
"uvicorn.protocols.websockets",
|
|
30
|
+
"uvicorn.protocols.websockets.auto",
|
|
31
|
+
"uvicorn.lifespan",
|
|
32
|
+
"uvicorn.lifespan.on",
|
|
33
|
+
# email / multipart used by starlette
|
|
34
|
+
"email.mime.multipart",
|
|
35
|
+
"email.mime.text",
|
|
36
|
+
"email.mime.base",
|
|
37
|
+
# sqlite3 is stdlib but needs explicit inclusion on some platforms
|
|
38
|
+
"sqlite3",
|
|
39
|
+
"_sqlite3",
|
|
40
|
+
]
|
|
41
|
+
|
|
42
|
+
a = Analysis(
|
|
43
|
+
["src/devcoach/mcp/server.py"],
|
|
44
|
+
pathex=["src"],
|
|
45
|
+
binaries=[],
|
|
46
|
+
datas=datas,
|
|
47
|
+
hiddenimports=hidden_imports,
|
|
48
|
+
hookspath=[],
|
|
49
|
+
hooksconfig={},
|
|
50
|
+
runtime_hooks=[],
|
|
51
|
+
excludes=["tkinter", "matplotlib", "numpy", "scipy", "PIL"],
|
|
52
|
+
noarchive=False,
|
|
53
|
+
)
|
|
54
|
+
|
|
55
|
+
pyz = PYZ(a.pure)
|
|
56
|
+
|
|
57
|
+
exe = EXE(
|
|
58
|
+
pyz,
|
|
59
|
+
a.scripts,
|
|
60
|
+
a.binaries,
|
|
61
|
+
a.datas,
|
|
62
|
+
[],
|
|
63
|
+
name="devcoach",
|
|
64
|
+
debug=False,
|
|
65
|
+
bootloader_ignore_signals=False,
|
|
66
|
+
strip=False,
|
|
67
|
+
upx=False,
|
|
68
|
+
console=True,
|
|
69
|
+
disable_windowed_traceback=False,
|
|
70
|
+
argv_emulation=False,
|
|
71
|
+
target_arch=None,
|
|
72
|
+
codesign_identity=None,
|
|
73
|
+
entitlements_file=None,
|
|
74
|
+
)
|
|
@@ -56,15 +56,15 @@ wheels = [
|
|
|
56
56
|
|
|
57
57
|
[[package]]
|
|
58
58
|
name = "authlib"
|
|
59
|
-
version = "1.7.
|
|
59
|
+
version = "1.7.1"
|
|
60
60
|
source = { registry = "https://pypi.org/simple" }
|
|
61
61
|
dependencies = [
|
|
62
62
|
{ name = "cryptography" },
|
|
63
63
|
{ name = "joserfc" },
|
|
64
64
|
]
|
|
65
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
65
|
+
sdist = { url = "https://files.pythonhosted.org/packages/3c/f2/e05664d5275ce811fd4e9df0a2b3f0086ee19a8a80358d95499fa82fd50c/authlib-1.7.1.tar.gz", hash = "sha256:8c09b0f9d080c823e594b52316af70f79a1fa4eed64d0363a076233c04ef063a", size = 175884, upload-time = "2026-05-04T08:11:25.033Z" }
|
|
66
66
|
wheels = [
|
|
67
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
67
|
+
{ url = "https://files.pythonhosted.org/packages/e0/82/730650ee5e5b598b7bfdc291b784bc2f6fe02a5671695485403365101088/authlib-1.7.1-py2.py3-none-any.whl", hash = "sha256:8470f4aa6b5590ac41bd81d6e6ee12448ce36a0da0af19bbed69fb53fb4e8ad9", size = 258826, upload-time = "2026-05-04T08:11:23.208Z" },
|
|
68
68
|
]
|
|
69
69
|
|
|
70
70
|
[[package]]
|
|
@@ -443,7 +443,7 @@ wheels = [
|
|
|
443
443
|
|
|
444
444
|
[[package]]
|
|
445
445
|
name = "devcoach"
|
|
446
|
-
version = "0.3.
|
|
446
|
+
version = "0.3.11"
|
|
447
447
|
source = { editable = "." }
|
|
448
448
|
dependencies = [
|
|
449
449
|
{ name = "fastapi" },
|
|
@@ -558,9 +558,43 @@ wheels = [
|
|
|
558
558
|
|
|
559
559
|
[[package]]
|
|
560
560
|
name = "fastmcp"
|
|
561
|
-
version = "3.
|
|
561
|
+
version = "3.3.1"
|
|
562
562
|
source = { registry = "https://pypi.org/simple" }
|
|
563
563
|
dependencies = [
|
|
564
|
+
{ name = "fastmcp-slim", extra = ["client", "server"] },
|
|
565
|
+
]
|
|
566
|
+
sdist = { url = "https://files.pythonhosted.org/packages/3b/a9/5c5a01b6abd5346bf60b97cfd29e4a86661940c27dd562bfcda07fd03519/fastmcp-3.3.1.tar.gz", hash = "sha256:979362ea557de42a5f40342563c7e4b236bcc8e7cd192715f50030695d1a71cd", size = 28681699, upload-time = "2026-05-15T15:50:39.673Z" }
|
|
567
|
+
wheels = [
|
|
568
|
+
{ url = "https://files.pythonhosted.org/packages/9f/11/6b1bdada6ccfe647d615ae63f9106f8136aec17971e9361546af01c7d38e/fastmcp-3.3.1-py3-none-any.whl", hash = "sha256:862440c5c4d281363a5995eee59d77f0f7cac1f18869038729cecf03b02fc522", size = 7903, upload-time = "2026-05-15T15:50:36.424Z" },
|
|
569
|
+
]
|
|
570
|
+
|
|
571
|
+
[[package]]
|
|
572
|
+
name = "fastmcp-slim"
|
|
573
|
+
version = "3.3.1"
|
|
574
|
+
source = { registry = "https://pypi.org/simple" }
|
|
575
|
+
dependencies = [
|
|
576
|
+
{ name = "platformdirs" },
|
|
577
|
+
{ name = "pydantic", extra = ["email"] },
|
|
578
|
+
{ name = "pydantic-settings" },
|
|
579
|
+
{ name = "python-dotenv" },
|
|
580
|
+
{ name = "rich" },
|
|
581
|
+
{ name = "typing-extensions" },
|
|
582
|
+
]
|
|
583
|
+
sdist = { url = "https://files.pythonhosted.org/packages/d1/a0/627103e517e1d0d6f1eec633d5662d13e776f01b45ad188e4f5f7478b438/fastmcp_slim-3.3.1.tar.gz", hash = "sha256:0957835fc59452e143ab2f4b7836d2d2df9b2d9958408edc79ba8b56232b2a88", size = 567007, upload-time = "2026-05-15T15:50:10.426Z" }
|
|
584
|
+
wheels = [
|
|
585
|
+
{ url = "https://files.pythonhosted.org/packages/7a/ee/97047f4cc2d7b1d46670d08d8ad01a96e7a748cc01c0b4b351ad8eddbc7a/fastmcp_slim-3.3.1-py3-none-any.whl", hash = "sha256:6cf1c2d77e3adb0d409d6825ed6b0b2a999062973e00b8eea03bd48bf9b4c043", size = 738644, upload-time = "2026-05-15T15:50:08.336Z" },
|
|
586
|
+
]
|
|
587
|
+
|
|
588
|
+
[package.optional-dependencies]
|
|
589
|
+
client = [
|
|
590
|
+
{ name = "authlib" },
|
|
591
|
+
{ name = "exceptiongroup" },
|
|
592
|
+
{ name = "httpx" },
|
|
593
|
+
{ name = "mcp" },
|
|
594
|
+
{ name = "opentelemetry-api" },
|
|
595
|
+
{ name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] },
|
|
596
|
+
]
|
|
597
|
+
server = [
|
|
564
598
|
{ name = "authlib" },
|
|
565
599
|
{ name = "cyclopts" },
|
|
566
600
|
{ name = "exceptiongroup" },
|
|
@@ -572,22 +606,15 @@ dependencies = [
|
|
|
572
606
|
{ name = "openapi-pydantic" },
|
|
573
607
|
{ name = "opentelemetry-api" },
|
|
574
608
|
{ name = "packaging" },
|
|
575
|
-
{ name = "platformdirs" },
|
|
576
609
|
{ name = "py-key-value-aio", extra = ["filetree", "keyring", "memory"] },
|
|
577
|
-
{ name = "pydantic", extra = ["email"] },
|
|
578
610
|
{ name = "pyperclip" },
|
|
579
|
-
{ name = "python-
|
|
611
|
+
{ name = "python-multipart" },
|
|
580
612
|
{ name = "pyyaml" },
|
|
581
|
-
{ name = "rich" },
|
|
582
613
|
{ name = "uncalled-for" },
|
|
583
614
|
{ name = "uvicorn" },
|
|
584
615
|
{ name = "watchfiles" },
|
|
585
616
|
{ name = "websockets" },
|
|
586
617
|
]
|
|
587
|
-
sdist = { url = "https://files.pythonhosted.org/packages/9c/13/29544fbc6dfe45ea38046af0067311e0bad7acc7d1f2ad38bb08f2409fe2/fastmcp-3.2.4.tar.gz", hash = "sha256:083ecb75b44a4169e7fc0f632f94b781bdb0ff877c6b35b9877cbb566fd4d4d1", size = 28746127, upload-time = "2026-04-14T01:42:24.174Z" }
|
|
588
|
-
wheels = [
|
|
589
|
-
{ url = "https://files.pythonhosted.org/packages/cf/76/b310d52fa0e30d39bd937eb58ec2c1f1ea1b5f519f0575e9dd9612f01deb/fastmcp-3.2.4-py3-none-any.whl", hash = "sha256:e6c9c429171041455e47ab94bb3f83c4657622a0ec28922f6940053959bd58a9", size = 728599, upload-time = "2026-04-14T01:42:26.85Z" },
|
|
590
|
-
]
|
|
591
618
|
|
|
592
619
|
[[package]]
|
|
593
620
|
name = "ghp-import"
|
|
@@ -658,11 +685,11 @@ wheels = [
|
|
|
658
685
|
|
|
659
686
|
[[package]]
|
|
660
687
|
name = "idna"
|
|
661
|
-
version = "3.
|
|
688
|
+
version = "3.15"
|
|
662
689
|
source = { registry = "https://pypi.org/simple" }
|
|
663
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
690
|
+
sdist = { url = "https://files.pythonhosted.org/packages/82/77/7b3966d0b9d1d31a36ddf1746926a11dface89a83409bf1483f0237aa758/idna-3.15.tar.gz", hash = "sha256:ca962446ea538f7092a95e057da437618e886f4d349216d2b1e294abfdb65fdc", size = 199245, upload-time = "2026-05-12T22:45:57.011Z" }
|
|
664
691
|
wheels = [
|
|
665
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
692
|
+
{ url = "https://files.pythonhosted.org/packages/d2/23/408243171aa9aaba178d3e2559159c24c1171a641aa83b67bdd3394ead8e/idna-3.15-py3-none-any.whl", hash = "sha256:048adeaf8c2d788c40fee287673ccaa74c24ffd8dcf09ffa555a2fbb59f10ac8", size = 72340, upload-time = "2026-05-12T22:45:55.733Z" },
|
|
666
693
|
]
|
|
667
694
|
|
|
668
695
|
[[package]]
|
|
@@ -1139,7 +1166,7 @@ wheels = [
|
|
|
1139
1166
|
|
|
1140
1167
|
[[package]]
|
|
1141
1168
|
name = "pydantic"
|
|
1142
|
-
version = "2.13.
|
|
1169
|
+
version = "2.13.4"
|
|
1143
1170
|
source = { registry = "https://pypi.org/simple" }
|
|
1144
1171
|
dependencies = [
|
|
1145
1172
|
{ name = "annotated-types" },
|
|
@@ -1147,9 +1174,9 @@ dependencies = [
|
|
|
1147
1174
|
{ name = "typing-extensions" },
|
|
1148
1175
|
{ name = "typing-inspection" },
|
|
1149
1176
|
]
|
|
1150
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1177
|
+
sdist = { url = "https://files.pythonhosted.org/packages/18/a5/b60d21ac674192f8ab0ba4e9fd860690f9b4a6e51ca5df118733b487d8d6/pydantic-2.13.4.tar.gz", hash = "sha256:c40756b57adaa8b1efeeced5c196f3f3b7c435f90e84ea7f443901bec8099ef6", size = 844775, upload-time = "2026-05-06T13:43:05.343Z" }
|
|
1151
1178
|
wheels = [
|
|
1152
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1179
|
+
{ url = "https://files.pythonhosted.org/packages/fd/7b/122376b1fd3c62c1ed9dc80c931ace4844b3c55407b6fb2d199377c9736f/pydantic-2.13.4-py3-none-any.whl", hash = "sha256:45a282cde31d808236fd7ea9d919b128653c8b38b393d1c4ab335c62924d9aba", size = 472262, upload-time = "2026-05-06T13:43:02.641Z" },
|
|
1153
1180
|
]
|
|
1154
1181
|
|
|
1155
1182
|
[package.optional-dependencies]
|
|
@@ -1159,77 +1186,77 @@ email = [
|
|
|
1159
1186
|
|
|
1160
1187
|
[[package]]
|
|
1161
1188
|
name = "pydantic-core"
|
|
1162
|
-
version = "2.46.
|
|
1189
|
+
version = "2.46.4"
|
|
1163
1190
|
source = { registry = "https://pypi.org/simple" }
|
|
1164
1191
|
dependencies = [
|
|
1165
1192
|
{ name = "typing-extensions" },
|
|
1166
1193
|
]
|
|
1167
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1168
|
-
wheels = [
|
|
1169
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1170
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1171
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1172
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1173
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1174
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1175
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1176
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1177
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1178
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1179
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1180
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1181
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1182
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1183
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1184
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1185
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1186
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1187
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1188
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1189
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1190
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1191
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1192
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1193
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1194
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1195
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1196
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1197
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1198
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1199
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1200
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1201
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1202
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1203
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1204
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1205
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1206
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1207
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1208
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1209
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1210
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1211
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1212
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1213
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1214
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1215
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1216
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1217
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1218
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1219
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1220
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1221
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1222
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1223
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1224
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1225
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1226
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1227
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1228
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1229
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1230
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1231
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1232
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1194
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9d/56/921726b776ace8d8f5db44c4ef961006580d91dc52b803c489fafd1aa249/pydantic_core-2.46.4.tar.gz", hash = "sha256:62f875393d7f270851f20523dd2e29f082bcc82292d66db2b64ea71f64b6e1c1", size = 471464, upload-time = "2026-05-06T13:37:06.98Z" }
|
|
1195
|
+
wheels = [
|
|
1196
|
+
{ url = "https://files.pythonhosted.org/packages/ce/8c/af022f0af448d7747c5154288d46b5f2bc5f17366eaa0e23e9aa04d59f3b/pydantic_core-2.46.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:3245406455a5d98187ec35530fd772b1d799b26667980872c8d4614991e2c4a2", size = 2106158, upload-time = "2026-05-06T13:38:57.215Z" },
|
|
1197
|
+
{ url = "https://files.pythonhosted.org/packages/19/95/6195171e385007300f0f5574592e467c568becce2d937a0b6804f218bc49/pydantic_core-2.46.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:962ccbab7b642487b1d8b7df90ef677e03134cf1fd8880bf698649b22a69371f", size = 1951724, upload-time = "2026-05-06T13:37:02.697Z" },
|
|
1198
|
+
{ url = "https://files.pythonhosted.org/packages/8e/bc/f47d1ff9cbb1620e1b5b697eef06010035735f07820180e74178226b27b3/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8233f2947cf85404441fd7e0085f53b10c93e0ee78611099b5c7237e36aacbf7", size = 1975742, upload-time = "2026-05-06T13:37:09.448Z" },
|
|
1199
|
+
{ url = "https://files.pythonhosted.org/packages/5b/11/9b9a5b0306345664a2da6410877af6e8082481b5884b3ddd78d47c6013ce/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a233125ac121aa3ffba9a2b59edfc4a985a76092dc8279586ab4b71390875e7", size = 2052418, upload-time = "2026-05-06T13:37:38.234Z" },
|
|
1200
|
+
{ url = "https://files.pythonhosted.org/packages/f1/b7/a65fec226f5d78fc39f4a13c4cc0c768c22b113438f60c14adc9d2865038/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5b712b53160b79a5850310b912a5ef8e57e56947c8ad690c227f5c9d7e561712", size = 2232274, upload-time = "2026-05-06T13:38:27.753Z" },
|
|
1201
|
+
{ url = "https://files.pythonhosted.org/packages/68/f0/92039db98b907ef49269a8271f67db9cb78ae2fc68062ef7e4e77adb5f61/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9401557acd873c3a7f3eb9383edef8ac4968f9510e340f4808d427e75667e7b4", size = 2309940, upload-time = "2026-05-06T13:38:05.353Z" },
|
|
1202
|
+
{ url = "https://files.pythonhosted.org/packages/5f/97/2aab507d3d00ca626e8e57c1eac6a79e4e5fbcc63eb99733ff55d1717f65/pydantic_core-2.46.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:926c9541b14b12b1681dca8a0b75feb510b06c6341b70a8e500c2fdcff837cce", size = 2094516, upload-time = "2026-05-06T13:39:10.577Z" },
|
|
1203
|
+
{ url = "https://files.pythonhosted.org/packages/22/37/a8aca44d40d737dde2bc05b3c6c07dff0de07ce6f82e9f3167aeaf4d5dea/pydantic_core-2.46.4-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:56cb4851bcaf3d117eddcef4fe66afd750a50274b0da8e22be256d10e5611987", size = 2136854, upload-time = "2026-05-06T13:40:22.59Z" },
|
|
1204
|
+
{ url = "https://files.pythonhosted.org/packages/24/99/fcef1b79238c06a8cbec70819ac722ba76e02bc8ada9b0fd66eba40da01b/pydantic_core-2.46.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c68fcd102d71ea85c5b2dfac3f4f8476eff42a9e078fd5faefff6d145063536b", size = 2180306, upload-time = "2026-05-06T13:40:10.666Z" },
|
|
1205
|
+
{ url = "https://files.pythonhosted.org/packages/ae/6c/fc44000918855b42779d007ae63b0532794739027b2f417321cddbc44f6a/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:b2f69dec1725e79a012d920df1707de5caf7ed5e08f3be4435e25803efc47458", size = 2190044, upload-time = "2026-05-06T13:40:43.231Z" },
|
|
1206
|
+
{ url = "https://files.pythonhosted.org/packages/6b/65/d9cadc9f1920d7a127ad2edba16c1db7916e59719285cd6c94600b0080ba/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:8d0820e8192167f80d88d64038e609c31452eeca865b4e1d9950a27a4609b00b", size = 2329133, upload-time = "2026-05-06T13:39:57.365Z" },
|
|
1207
|
+
{ url = "https://files.pythonhosted.org/packages/d0/cf/c873d91679f3a30bcf5e7ac280ce5573483e72295307685120d0d5ad3416/pydantic_core-2.46.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:fbdb89b3e1c94a30cc5edfce477c6e6a5dc4d8f84665b455c27582f211a1c72c", size = 2374464, upload-time = "2026-05-06T13:38:06.976Z" },
|
|
1208
|
+
{ url = "https://files.pythonhosted.org/packages/47/bd/6f2fc8188f31bf10590f1e98e7b306336161fac930a8c514cd7bd828c7dc/pydantic_core-2.46.4-cp312-cp312-win32.whl", hash = "sha256:9aa768456404a8bf48a4406685ac2bec8e72b62c69313734fa3b73cf33b3a894", size = 1974823, upload-time = "2026-05-06T13:40:47.985Z" },
|
|
1209
|
+
{ url = "https://files.pythonhosted.org/packages/40/8c/985c1d41ea1107c2534abd9870e4ed5c8e7669b5c308297835c001e7a1c4/pydantic_core-2.46.4-cp312-cp312-win_amd64.whl", hash = "sha256:e9c26f834c65f5752f3f06cb08cb86a913ceb7274d0db6e267808a708b46bc89", size = 2072919, upload-time = "2026-05-06T13:39:21.153Z" },
|
|
1210
|
+
{ url = "https://files.pythonhosted.org/packages/c4/ba/f463d006e0c47373ca7ec5e1a261c59dc01ef4d62b2657af925fb0deee3a/pydantic_core-2.46.4-cp312-cp312-win_arm64.whl", hash = "sha256:4fc73cb559bdb54b1134a706a2802a4cddd27a0633f5abb7e53056268751ac6a", size = 2027604, upload-time = "2026-05-06T13:39:03.753Z" },
|
|
1211
|
+
{ url = "https://files.pythonhosted.org/packages/51/a2/5d30b469c5267a17b39dec53208222f76a8d351dfac4af661888c5aee77d/pydantic_core-2.46.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:5d5902252db0d3cedf8d4a1bc68f70eeb430f7e4c7104c8c476753519b423008", size = 2106306, upload-time = "2026-05-06T13:37:48.029Z" },
|
|
1212
|
+
{ url = "https://files.pythonhosted.org/packages/c1/81/4fa520eaffa8bd7d1525e644cd6d39e7d60b1592bc5b516693c7340b50f1/pydantic_core-2.46.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c94f0688e7b8d0a67abf40e57a7eaaecd17cc9586706a31b76c031f63df052b4", size = 1951906, upload-time = "2026-05-06T13:37:17.012Z" },
|
|
1213
|
+
{ url = "https://files.pythonhosted.org/packages/03/d5/fd02da45b659668b05923b17ba3a0100a0a3d5541e3bd8fcc4ecb711309e/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f027324c56cd5406ca49c124b0db10e56c69064fec039acc571c29020cc87c76", size = 1976802, upload-time = "2026-05-06T13:37:35.113Z" },
|
|
1214
|
+
{ url = "https://files.pythonhosted.org/packages/21/f2/95727e1368be3d3ed485eaab7adbd7dda408f33f7a36e8b48e0144002b91/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e739fee756ba1010f8bcccb534252e85a35fe45ae92c295a06059ce58b74ccd3", size = 2052446, upload-time = "2026-05-06T13:37:12.313Z" },
|
|
1215
|
+
{ url = "https://files.pythonhosted.org/packages/9c/86/5d99feea3f77c7234b8718075b23db11532773c1a0dbd9b9490215dc2eeb/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d56801be94b86a9da183e5f3766e6310752b99ff647e38b09a9500d88e46e76", size = 2232757, upload-time = "2026-05-06T13:39:01.149Z" },
|
|
1216
|
+
{ url = "https://files.pythonhosted.org/packages/d2/3a/508ac615935ef7588cf6d9e9b91309fdc2da751af865e02a9098de88258c/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2412e734dcb48da14d4e4006b82b46b74f2518b8a26ee7e58c6844a6cd6d03c4", size = 2309275, upload-time = "2026-05-06T13:37:41.406Z" },
|
|
1217
|
+
{ url = "https://files.pythonhosted.org/packages/07/f8/41db9de19d7987d6b04715a02b3b40aea467000275d9d758ffaa31af7d50/pydantic_core-2.46.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9551187363ffc0de2a00b2e47c25aeaeb1020b69b668762966df15fc5659dd5a", size = 2094467, upload-time = "2026-05-06T13:39:18.847Z" },
|
|
1218
|
+
{ url = "https://files.pythonhosted.org/packages/2c/e2/f35033184cb11d0052daf4416e8e10a502ea2ac006fc4f459aee872727d1/pydantic_core-2.46.4-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:0186750b482eefa11d7f435892b09c5c606193ef3375bcf94aa00ae6bfb66262", size = 2134417, upload-time = "2026-05-06T13:40:17.944Z" },
|
|
1219
|
+
{ url = "https://files.pythonhosted.org/packages/7e/7b/6ceeb1cc90e193862f444ebe373d8fdf613f0a82572dde03fb10734c6c71/pydantic_core-2.46.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5855698a4856556d86e8e6cd8434bc3ac0314ee8e12089ae0e143f64c6256e4e", size = 2179782, upload-time = "2026-05-06T13:40:32.618Z" },
|
|
1220
|
+
{ url = "https://files.pythonhosted.org/packages/5a/f2/c8d7773ede6af08036423a00ae0ceffce266c3c52a096c435d68c896083f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:cbaf13819775b7f769bf4a1f066cb6df7a28d4480081a589828ef190226881cd", size = 2188782, upload-time = "2026-05-06T13:36:51.018Z" },
|
|
1221
|
+
{ url = "https://files.pythonhosted.org/packages/59/31/0c864784e31f09f05cdd87606f08923b9c9e7f6e51dd27f20f62f975ce9f/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:633147d34cf4550417f12e2b1a0383973bdf5cdfde212cb09e9a581cf10820be", size = 2328334, upload-time = "2026-05-06T13:40:37.764Z" },
|
|
1222
|
+
{ url = "https://files.pythonhosted.org/packages/c2/eb/4f6c8a41efa30baa755590f4141abf3a8c370fab610915733e74134a7270/pydantic_core-2.46.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:82cf5301172168103724d49a1444d3378cb20cdee30b116a1bd6031236298a5d", size = 2372986, upload-time = "2026-05-06T13:39:34.152Z" },
|
|
1223
|
+
{ url = "https://files.pythonhosted.org/packages/5b/24/b375a480d53113860c299764bfe9f349a3dc9108b3adc0d7f0d786492ebf/pydantic_core-2.46.4-cp313-cp313-win32.whl", hash = "sha256:9fa8ae11da9e2b3126c6426f147e0fba88d96d65921799bb30c6abd1cb2c97fb", size = 1973693, upload-time = "2026-05-06T13:37:55.072Z" },
|
|
1224
|
+
{ url = "https://files.pythonhosted.org/packages/7e/e8/cff247591966f2d22ec8c003cd7587e27b7ba7b81ab2fb888e3ab75dc285/pydantic_core-2.46.4-cp313-cp313-win_amd64.whl", hash = "sha256:6b3ace8194b0e5204818c92802dcdca7fc6d88aabbb799d7c795540d9cd6d292", size = 2071819, upload-time = "2026-05-06T13:38:49.139Z" },
|
|
1225
|
+
{ url = "https://files.pythonhosted.org/packages/c6/1a/f4aee670d5670e9e148e0c82c7db98d780be566c6e6a97ee8035528ca0b3/pydantic_core-2.46.4-cp313-cp313-win_arm64.whl", hash = "sha256:184c081504d17f1c1066e430e117142b2c77d9448a97f7b65c6ac9fd9aee238d", size = 2027411, upload-time = "2026-05-06T13:40:45.796Z" },
|
|
1226
|
+
{ url = "https://files.pythonhosted.org/packages/8d/74/228a26ddad29c6672b805d9fd78e8d251cd04004fa7eed0e622096cd0250/pydantic_core-2.46.4-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:428e04521a40150c85216fc8b85e8d39fece235a9cf5e383761238c7fa9b96fb", size = 2102079, upload-time = "2026-05-06T13:38:41.019Z" },
|
|
1227
|
+
{ url = "https://files.pythonhosted.org/packages/ad/1f/8970b150a4b4365623ae00fc88603491f763c627311ae8031e3111356d6e/pydantic_core-2.46.4-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:23ace664830ee0bfe014a0c7bc248b1f7f25ed7ad103852c317624a1083af462", size = 1952179, upload-time = "2026-05-06T13:36:59.812Z" },
|
|
1228
|
+
{ url = "https://files.pythonhosted.org/packages/95/30/5211a831ae054928054b2f79731661087a2bc5c01e825c672b3a4a8f1b3e/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce5c1d2a8b27468f433ca974829c44060b8097eedc39933e3c206a90ee49c4a9", size = 1978926, upload-time = "2026-05-06T13:37:39.933Z" },
|
|
1229
|
+
{ url = "https://files.pythonhosted.org/packages/57/e9/689668733b1eb67adeef047db3c2e8788fcf65a7fd9c9e2b46b7744fe245/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7283d57845ecf5a163403eb0702dfc220cc4fbdd18919cb5ccea4f95ee1cdab4", size = 2046785, upload-time = "2026-05-06T13:38:01.995Z" },
|
|
1230
|
+
{ url = "https://files.pythonhosted.org/packages/60/d9/6715260422ff50a2109878fd24d948a6c3446bb2664f34ee78cd972b3acd/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8daafc69c93ee8a0204506a3b6b30f586ef54028f52aeeeb5c4cfc5184fd5914", size = 2228733, upload-time = "2026-05-06T13:40:50.371Z" },
|
|
1231
|
+
{ url = "https://files.pythonhosted.org/packages/18/ae/fdb2f64316afca925640f8e70bb1a564b0ec2721c1389e25b8eb4bf9a299/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd2213145bcc2ba85884d0ac63d222fece9209678f77b9b4d76f054c561adb28", size = 2307534, upload-time = "2026-05-06T13:37:21.531Z" },
|
|
1232
|
+
{ url = "https://files.pythonhosted.org/packages/89/1d/8eff589b45bb8190a9d12c49cfad0f176a5cbd1534908a6b5125e2886239/pydantic_core-2.46.4-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a5f930472650a82629163023e630d160863fce524c616f4e5186e5de9d9a49b", size = 2099732, upload-time = "2026-05-06T13:39:31.942Z" },
|
|
1233
|
+
{ url = "https://files.pythonhosted.org/packages/06/d5/ee5a3366637fee41dee51a1fc91562dcf12ddbc68fda34e6b253da2324bb/pydantic_core-2.46.4-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:c1b3f518abeca3aa13c712fd202306e145abf59a18b094a6bafb2d2bbf59192c", size = 2129627, upload-time = "2026-05-06T13:37:25.033Z" },
|
|
1234
|
+
{ url = "https://files.pythonhosted.org/packages/94/33/2414be571d2c6a6c4d08be21f9292b6d3fdb08949a97b6dfe985017821db/pydantic_core-2.46.4-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a7dd0b3ee80d90150e3495a3a13ac34dbcbfd4f012996a6a1d8900e91b5c0fb", size = 2179141, upload-time = "2026-05-06T13:37:14.046Z" },
|
|
1235
|
+
{ url = "https://files.pythonhosted.org/packages/7b/79/7daa95be995be0eecc4cf75064cb33f9bbbfe3fe0158caf2f0d4a996a5c7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_aarch64.whl", hash = "sha256:3fb702cd90b0446a3a1c5e470bfa0dd23c0233b676a9099ddcc964fa6ca13898", size = 2184325, upload-time = "2026-05-06T13:36:53.615Z" },
|
|
1236
|
+
{ url = "https://files.pythonhosted.org/packages/9f/cb/d0a382f5c0de8a222dc61c65348e0ce831b1f68e0a018450d31c2cace3a5/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_armv7l.whl", hash = "sha256:b8458003118a712e66286df6a707db01c52c0f52f7db8e4a38f0da1d3b94fc4e", size = 2323990, upload-time = "2026-05-06T13:40:29.971Z" },
|
|
1237
|
+
{ url = "https://files.pythonhosted.org/packages/05/db/d9ba624cc4a5aced1598e88c04fdbd8310c8a69b9d38b9a3d39ce3a61ed7/pydantic_core-2.46.4-cp314-cp314-musllinux_1_1_x86_64.whl", hash = "sha256:372429a130e469c9cd698925ce5fc50940b7a1336b0d82038e63d5bbc4edc519", size = 2369978, upload-time = "2026-05-06T13:37:23.027Z" },
|
|
1238
|
+
{ url = "https://files.pythonhosted.org/packages/f2/20/d15df15ba918c423461905802bfd2981c3af0bfa0e40d05e13edbfa48bc3/pydantic_core-2.46.4-cp314-cp314-win32.whl", hash = "sha256:85bb3611ff1802f3ee7fdd7dbff26b56f343fb432d57a4728fdd49b6ef35e2f4", size = 1966354, upload-time = "2026-05-06T13:38:03.499Z" },
|
|
1239
|
+
{ url = "https://files.pythonhosted.org/packages/fc/b6/6b8de4c0a7d7ab3004c439c80c5c1e0a3e8d78bbae19379b01960383d9e5/pydantic_core-2.46.4-cp314-cp314-win_amd64.whl", hash = "sha256:811ff8e9c313ab425368bcbb36e5c4ebd7108c2bbf4e4089cfbb0b01eff63fac", size = 2072238, upload-time = "2026-05-06T13:39:40.807Z" },
|
|
1240
|
+
{ url = "https://files.pythonhosted.org/packages/32/36/51eb763beec1f4cf59b1db243a7dcc39cbb41230f050a09b9d69faaf0a48/pydantic_core-2.46.4-cp314-cp314-win_arm64.whl", hash = "sha256:bfec22eab3c8cc2ceec0248aec886624116dc079afa027ecc8ad4a7e62010f8a", size = 2018251, upload-time = "2026-05-06T13:37:26.72Z" },
|
|
1241
|
+
{ url = "https://files.pythonhosted.org/packages/e8/91/855af51d625b23aa987116a19e231d2aaef9c4a415273ddc189b79a45fee/pydantic_core-2.46.4-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:af8244b2bef6aaad6d92cda81372de7f8c8d36c9f0c3ea36e827c60e7d9467a0", size = 2099593, upload-time = "2026-05-06T13:39:47.682Z" },
|
|
1242
|
+
{ url = "https://files.pythonhosted.org/packages/fb/1b/8784a54c65edb5f49f0a14d6977cf1b209bba85a4c77445b255c2de58ab3/pydantic_core-2.46.4-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5a4330cdbc57162e4b3aa303f588ba752257694c9c9be3e7ebb11b4aca659b5d", size = 1935226, upload-time = "2026-05-06T13:40:40.428Z" },
|
|
1243
|
+
{ url = "https://files.pythonhosted.org/packages/e8/e7/1955d28d1afc56dd4b3ad7cc0cf39df1b9852964cf16e5d13912756d6d6b/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:29c61fc04a3d840155ff08e475a04809278972fe6aef51e2720554e96367e34b", size = 1974605, upload-time = "2026-05-06T13:37:32.029Z" },
|
|
1244
|
+
{ url = "https://files.pythonhosted.org/packages/93/e2/3fedbf0ba7a22850e6e9fd78117f1c0f10f950182344d8a6c535d468fdd8/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c50f2528cf200c5eed56faf3f4e22fcd5f38c157a8b78576e6ba3168ec35f000", size = 2030777, upload-time = "2026-05-06T13:38:55.239Z" },
|
|
1245
|
+
{ url = "https://files.pythonhosted.org/packages/f8/61/46be275fcaaba0b4f5b9669dd852267ce1ff616592dccf7a7845588df091/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0cbe8b01f948de4286c74cdd6c667aceb38f5c1e26f0693b3983d9d74887c65e", size = 2236641, upload-time = "2026-05-06T13:37:08.096Z" },
|
|
1246
|
+
{ url = "https://files.pythonhosted.org/packages/60/db/12e93e46a8bac9988be3c016860f83293daea8c716c029c9ace279036f2f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:617d7e2ca7dcb8c5cf6bcb8c59b8832c94b36196bbf1cbd1bfb56ed341905edd", size = 2286404, upload-time = "2026-05-06T13:40:20.221Z" },
|
|
1247
|
+
{ url = "https://files.pythonhosted.org/packages/e2/4a/4d8b19008f38d31c53b8219cfedc2e3d5de5fe99d90076b7e767de29274f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7027560ee92211647d0d34e3f7cd6f50da56399d26a9c8ad0da286d3869a53f3", size = 2109219, upload-time = "2026-05-06T13:38:12.153Z" },
|
|
1248
|
+
{ url = "https://files.pythonhosted.org/packages/88/70/3cbc40978fefb7bb09c6708d40d4ad1a5d70fd7213c3d17f971de868ec1f/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:f99626688942fb746e545232e7726926f3be91b5975f8b55327665fafda991c7", size = 2110594, upload-time = "2026-05-06T13:40:02.971Z" },
|
|
1249
|
+
{ url = "https://files.pythonhosted.org/packages/9d/20/b8d36736216e29491125531685b2f9e61aa5b4b2599893f8268551da3338/pydantic_core-2.46.4-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fc3e9034a63de20e15e8ade85358bc6efc614008cab72898b4b4952bea0509ff", size = 2159542, upload-time = "2026-05-06T13:39:27.506Z" },
|
|
1250
|
+
{ url = "https://files.pythonhosted.org/packages/1d/a2/367df868eb584dacf6bf82a389272406d7178e301c4ac82545ab98bc2dd9/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_aarch64.whl", hash = "sha256:97e7cf2be5c77b7d1a9713a05605d49460d02c6078d38d8bef3cbe323c548424", size = 2168146, upload-time = "2026-05-06T13:38:31.93Z" },
|
|
1251
|
+
{ url = "https://files.pythonhosted.org/packages/c1/b8/4460f77f7e201893f649a29ab355dddd3beee8a97bcb1a320db414f9a06e/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_armv7l.whl", hash = "sha256:3bf92c5d0e00fefaab325a4d27828fe6b6e2a21848686b5b60d2d9eeb09d76c6", size = 2306309, upload-time = "2026-05-06T13:37:44.717Z" },
|
|
1252
|
+
{ url = "https://files.pythonhosted.org/packages/64/c4/be2639293acd87dc8ddbcec41a73cee9b2ebf996fe6d892a1a74e88ad3f7/pydantic_core-2.46.4-cp314-cp314t-musllinux_1_1_x86_64.whl", hash = "sha256:3ecbc122d18468d06ca279dc26a8c2e2d5acb10943bb35e36ae92096dc3b5565", size = 2369736, upload-time = "2026-05-06T13:37:05.645Z" },
|
|
1253
|
+
{ url = "https://files.pythonhosted.org/packages/30/a6/9f9f380dbb301f67023bf8f707aaa75daadf84f7152d95c410fd7e81d994/pydantic_core-2.46.4-cp314-cp314t-win32.whl", hash = "sha256:e846ae7835bf0703ae43f534ab79a867146dadd59dc9ca5c8b53d5c8f7c9ef02", size = 1955575, upload-time = "2026-05-06T13:38:51.116Z" },
|
|
1254
|
+
{ url = "https://files.pythonhosted.org/packages/40/1f/f1eb9eb350e795d1af8586289746f5c5677d16043040d63710e22abc43c9/pydantic_core-2.46.4-cp314-cp314t-win_amd64.whl", hash = "sha256:2108ba5c1c1eca18030634489dc544844144ee36357f2f9f780b93e7ddbb44b5", size = 2051624, upload-time = "2026-05-06T13:38:21.672Z" },
|
|
1255
|
+
{ url = "https://files.pythonhosted.org/packages/f6/d2/42dd53d0a85c27606f316d3aa5d2869c4e8470a5ed6dec30e4a1abe19192/pydantic_core-2.46.4-cp314-cp314t-win_arm64.whl", hash = "sha256:4fcbe087dbc2068af7eda3aa87634eba216dbda64d1ae73c8684b621d33f6596", size = 2017325, upload-time = "2026-05-06T13:40:52.723Z" },
|
|
1256
|
+
{ url = "https://files.pythonhosted.org/packages/9d/1d/8987ad40f65ae1432753072f214fb5c74fe47ffbd0698bb9cbbb585664f8/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_10_12_x86_64.whl", hash = "sha256:1d8ba486450b14f3b1d63bc521d410ec7565e52f887b9fb671791886436a42f7", size = 2095527, upload-time = "2026-05-06T13:39:52.283Z" },
|
|
1257
|
+
{ url = "https://files.pythonhosted.org/packages/64/d3/84c282a7eee1d3ac4c0377546ef5a1ea436ce26840d9ac3b7ed54a377507/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-macosx_11_0_arm64.whl", hash = "sha256:3009f12e4e90b7f88b4f9adb1b0c4a3d58fe7820f3238c190047209d148026df", size = 1936024, upload-time = "2026-05-06T13:40:15.671Z" },
|
|
1258
|
+
{ url = "https://files.pythonhosted.org/packages/d7/ca/eac61596cdeb4d7e174d3dc0bd8a6238f14f75f97a24e7b7db4c7e7340a0/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad785e92e6dc634c21555edc8bd6b64957ab844541bcb96a1366c202951ae526", size = 1990696, upload-time = "2026-05-06T13:38:34.717Z" },
|
|
1259
|
+
{ url = "https://files.pythonhosted.org/packages/fa/c3/7c8b240552251faf6b3a957db200fcfbbcec36763c050428b601e0c9b83b/pydantic_core-2.46.4-graalpy312-graalpy250_312_native-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00c603d540afdd6b80eb39f078f33ebd46211f02f33e34a32d9f053bba711de0", size = 2147590, upload-time = "2026-05-06T13:39:29.883Z" },
|
|
1233
1260
|
]
|
|
1234
1261
|
|
|
1235
1262
|
[[package]]
|
|
@@ -1271,15 +1298,15 @@ crypto = [
|
|
|
1271
1298
|
|
|
1272
1299
|
[[package]]
|
|
1273
1300
|
name = "pymdown-extensions"
|
|
1274
|
-
version = "10.21.
|
|
1301
|
+
version = "10.21.3"
|
|
1275
1302
|
source = { registry = "https://pypi.org/simple" }
|
|
1276
1303
|
dependencies = [
|
|
1277
1304
|
{ name = "markdown" },
|
|
1278
1305
|
{ name = "pyyaml" },
|
|
1279
1306
|
]
|
|
1280
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1307
|
+
sdist = { url = "https://files.pythonhosted.org/packages/9e/26/d1015444da4d952a1ca487a236b522eb979766f0295a0bd0c5fc089989a9/pymdown_extensions-10.21.3.tar.gz", hash = "sha256:72cfcf55f07aea0d4af2c4f11dd4e52466ddfb1bb819673146398e0bd3a77354", size = 854140, upload-time = "2026-05-13T12:57:32.267Z" }
|
|
1281
1308
|
wheels = [
|
|
1282
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1309
|
+
{ url = "https://files.pythonhosted.org/packages/7e/85/545a951eecc270fcd688288c600017e2050a1aacb56c711d208586d3e470/pymdown_extensions-10.21.3-py3-none-any.whl", hash = "sha256:d7a5d08014fc571e80ca21dd6f854e31f94c489800350564d55d15b3c41e76b6", size = 269002, upload-time = "2026-05-13T12:57:30.296Z" },
|
|
1283
1310
|
]
|
|
1284
1311
|
|
|
1285
1312
|
[[package]]
|
|
@@ -1572,27 +1599,27 @@ wheels = [
|
|
|
1572
1599
|
|
|
1573
1600
|
[[package]]
|
|
1574
1601
|
name = "ruff"
|
|
1575
|
-
version = "0.15.
|
|
1576
|
-
source = { registry = "https://pypi.org/simple" }
|
|
1577
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1578
|
-
wheels = [
|
|
1579
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1580
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1581
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1582
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1583
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1584
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1585
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1586
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1587
|
-
{ url = "https://files.pythonhosted.org/packages/e8/
|
|
1588
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1589
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1590
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1591
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1592
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1593
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1594
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1595
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1602
|
+
version = "0.15.13"
|
|
1603
|
+
source = { registry = "https://pypi.org/simple" }
|
|
1604
|
+
sdist = { url = "https://files.pythonhosted.org/packages/24/21/a7d5c126d5b557715ef81098f3db2fe20f622a039ff2e626af28d674ab80/ruff-0.15.13.tar.gz", hash = "sha256:f9d89f17f7ba7fb2ed42921f0df75da797a9a5d71bc39049e2c687cf2baf44b7", size = 4678180, upload-time = "2026-05-14T13:44:37.869Z" }
|
|
1605
|
+
wheels = [
|
|
1606
|
+
{ url = "https://files.pythonhosted.org/packages/c6/61/11d458dc6ac22504fd8e237b29dfd40504c7fbbcc8930402cfe51a8e63ed/ruff-0.15.13-py3-none-linux_armv6l.whl", hash = "sha256:444b580fc72fd6887e650acd3e575e18cdc79dbcf42fb4030b491057921f61f8", size = 10738279, upload-time = "2026-05-14T13:44:18.7Z" },
|
|
1607
|
+
{ url = "https://files.pythonhosted.org/packages/86/ca/caa871ee7be718c45256fada4e16a218ee3e33f0c4a46b729a60a24912e6/ruff-0.15.13-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:6590d009e7cb7ebf36f83dbdd44a3fa48a0994ff6f1cdc1b08006abe58f98dc7", size = 11124798, upload-time = "2026-05-14T13:44:06.427Z" },
|
|
1608
|
+
{ url = "https://files.pythonhosted.org/packages/d3/19/43f5f2e568dddde567fc41f8471f9432c09563e19d3e617a48cfa52f8f0a/ruff-0.15.13-py3-none-macosx_11_0_arm64.whl", hash = "sha256:1c26d2f66163deeb6e08d8b39fbbe983ce3c71cea06a6d7591cfd1421793c629", size = 10460761, upload-time = "2026-05-14T13:44:04.375Z" },
|
|
1609
|
+
{ url = "https://files.pythonhosted.org/packages/99/df/cf938cd6de3003178f03ad7c1ea2a6c099468c03a35037985070b37e76be/ruff-0.15.13-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbd6f94b434f896308e4d57fb7bfde0d02b99f7a64b3bdab0fdfa6a864203a5", size = 10804451, upload-time = "2026-05-14T13:44:25.221Z" },
|
|
1610
|
+
{ url = "https://files.pythonhosted.org/packages/c7/7d/5d0973129b154ded2225729169d7068f26b467760b146493fde138415f23/ruff-0.15.13-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bf3259f3be4d181bda591da5db2571aed6853c6a048157756448020bc6c5cd22", size = 10534285, upload-time = "2026-05-14T13:44:08.888Z" },
|
|
1611
|
+
{ url = "https://files.pythonhosted.org/packages/1f/e3/6b999bbc66cd51e5f073842bc2a3995e99c5e0e72e16b15e7261f7abf57a/ruff-0.15.13-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae9c17e5eb4430c154e76abc25d79a318190f5a997f38fb6b114416c5319ffc9", size = 11312063, upload-time = "2026-05-14T13:44:11.274Z" },
|
|
1612
|
+
{ url = "https://files.pythonhosted.org/packages/af/5a/642639e9f5db04f1e97fbd6e091c6fd20725bdf072fb114d00eefb9e6eb8/ruff-0.15.13-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e2e39bff6c341f4b577a21b801326fab0b11847f48fcaa83f00a113c9b3cb55", size = 12183079, upload-time = "2026-05-14T13:44:01.634Z" },
|
|
1613
|
+
{ url = "https://files.pythonhosted.org/packages/19/4c/7585735f6b53b0f12de13618b2f7d250a844f018822efc899df2e7b8295f/ruff-0.15.13-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e8d9a8e08013542e94d3220bc5b62cc3e5ef87c5f74bff367d3fac14fab013e6", size = 11440833, upload-time = "2026-05-14T13:43:59.043Z" },
|
|
1614
|
+
{ url = "https://files.pythonhosted.org/packages/e8/31/bf1a0803d077e679cfeee5f2f67290a0fa79c7385b5d9a8c17b9db2c48f0/ruff-0.15.13-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cc411dfebe5eebe55ce041c6ae080eb7668955e866daa2fbb16692a784f1c4ca", size = 11434486, upload-time = "2026-05-14T13:44:27.761Z" },
|
|
1615
|
+
{ url = "https://files.pythonhosted.org/packages/e1/4e/62c9b999875d4f14db80f277c030578f5e249c9852d65b7ac7ad0b43c041/ruff-0.15.13-py3-none-manylinux_2_31_riscv64.whl", hash = "sha256:768494eb08b9cee54e2fd27969966f74db5a57f6eaa7a90fcb3306af34dfc4bd", size = 11385189, upload-time = "2026-05-14T13:44:13.704Z" },
|
|
1616
|
+
{ url = "https://files.pythonhosted.org/packages/fc/89/7e959047a104df3eb12863447c110140191fc5b6c4f379ea2e803fcdb0e4/ruff-0.15.13-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:fb75f9a3a7e42ffe117d734494e6c5e5cb3565d66e12612cb63d0e572a41a5b6", size = 10781380, upload-time = "2026-05-14T13:43:56.734Z" },
|
|
1617
|
+
{ url = "https://files.pythonhosted.org/packages/ff/52/5fd18f3b88cab63e88aa11516b3b4e1e5f720e5c330f8dbe5c26210f41f8/ruff-0.15.13-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:8cb74dd33bb2f6613faf7fc03b660053b5ac4f80e706d5788c6335e2a8048d51", size = 10540605, upload-time = "2026-05-14T13:44:20.748Z" },
|
|
1618
|
+
{ url = "https://files.pythonhosted.org/packages/e8/e0/9e35f338990d3e41a82875ff7053ffe97541dae81c9d02143177f381d572/ruff-0.15.13-py3-none-musllinux_1_2_i686.whl", hash = "sha256:7ef823f817fcd191dc934e984be9cf4094f808effa16f2542ad8e821ba02bbf2", size = 11036554, upload-time = "2026-05-14T13:44:16.256Z" },
|
|
1619
|
+
{ url = "https://files.pythonhosted.org/packages/c2/13/070fb048c24080fba188f66371e2a92785be257ad02242066dc7255ac6e9/ruff-0.15.13-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:f345a13937bd7f09f6f5d19fa0721b0c103e00e7f62bc67089a8e5e037719e0b", size = 11528133, upload-time = "2026-05-14T13:44:22.808Z" },
|
|
1620
|
+
{ url = "https://files.pythonhosted.org/packages/6b/8c/b1e1666aef7fc6555094d73ae6cd981701781ae85b97ceefc0eebd0b4668/ruff-0.15.13-py3-none-win32.whl", hash = "sha256:4044f94208b3b05ba0fc4a4abd0558cf4d6459bd18325eead7fd8cc66f909b41", size = 10721455, upload-time = "2026-05-14T13:44:35.697Z" },
|
|
1621
|
+
{ url = "https://files.pythonhosted.org/packages/ab/a6/870a3e8a50590bb92be184ad928c2922f088b00d9dc5c5ec7b924ee08c22/ruff-0.15.13-py3-none-win_amd64.whl", hash = "sha256:7064884d442b7d477b4e7473d12da7f08851d2b1982763c5d3f388a19468a1a4", size = 11900409, upload-time = "2026-05-14T13:44:30.389Z" },
|
|
1622
|
+
{ url = "https://files.pythonhosted.org/packages/9b/36/9c015cd052fca743dae8cb2aeb16b551444787467db42ceab0fc968865af/ruff-0.15.13-py3-none-win_arm64.whl", hash = "sha256:2471da9bd1068c8c064b5fd9c0c4b6dddffd6369cb1cd68b29993b1709ff1b21", size = 11179336, upload-time = "2026-05-14T13:44:33.026Z" },
|
|
1596
1623
|
]
|
|
1597
1624
|
|
|
1598
1625
|
[[package]]
|
|
@@ -1675,24 +1702,24 @@ wheels = [
|
|
|
1675
1702
|
|
|
1676
1703
|
[[package]]
|
|
1677
1704
|
name = "urllib3"
|
|
1678
|
-
version = "2.
|
|
1705
|
+
version = "2.7.0"
|
|
1679
1706
|
source = { registry = "https://pypi.org/simple" }
|
|
1680
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1707
|
+
sdist = { url = "https://files.pythonhosted.org/packages/53/0c/06f8b233b8fd13b9e5ee11424ef85419ba0d8ba0b3138bf360be2ff56953/urllib3-2.7.0.tar.gz", hash = "sha256:231e0ec3b63ceb14667c67be60f2f2c40a518cb38b03af60abc813da26505f4c", size = 433602, upload-time = "2026-05-07T16:13:18.596Z" }
|
|
1681
1708
|
wheels = [
|
|
1682
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1709
|
+
{ url = "https://files.pythonhosted.org/packages/7f/3e/5db95bcf282c52709639744ca2a8b149baccf648e39c8cc87553df9eae0c/urllib3-2.7.0-py3-none-any.whl", hash = "sha256:9fb4c81ebbb1ce9531cce37674bbc6f1360472bc18ca9a553ede278ef7276897", size = 131087, upload-time = "2026-05-07T16:13:17.151Z" },
|
|
1683
1710
|
]
|
|
1684
1711
|
|
|
1685
1712
|
[[package]]
|
|
1686
1713
|
name = "uvicorn"
|
|
1687
|
-
version = "0.
|
|
1714
|
+
version = "0.47.0"
|
|
1688
1715
|
source = { registry = "https://pypi.org/simple" }
|
|
1689
1716
|
dependencies = [
|
|
1690
1717
|
{ name = "click" },
|
|
1691
1718
|
{ name = "h11" },
|
|
1692
1719
|
]
|
|
1693
|
-
sdist = { url = "https://files.pythonhosted.org/packages/
|
|
1720
|
+
sdist = { url = "https://files.pythonhosted.org/packages/f6/b1/8e7077a8641086aea449e1b5752a570f1b5906c64e0a33cd6d93b63a066b/uvicorn-0.47.0.tar.gz", hash = "sha256:7c9a0ea1a9414106bbab7324609c162d8fa0cdcdcb703060987269d77c7bb533", size = 90582, upload-time = "2026-05-14T18:16:54.455Z" }
|
|
1694
1721
|
wheels = [
|
|
1695
|
-
{ url = "https://files.pythonhosted.org/packages/
|
|
1722
|
+
{ url = "https://files.pythonhosted.org/packages/15/41/ac2dfdbc1f60c7af4f994c7a335cfa7040c01642b605d65f611cecc2a1e4/uvicorn-0.47.0-py3-none-any.whl", hash = "sha256:2c5715bc12d1892d84752049f400cd1c3cb018514967fdfeb97640443a6a9432", size = 71301, upload-time = "2026-05-14T18:16:51.762Z" },
|
|
1696
1723
|
]
|
|
1697
1724
|
|
|
1698
1725
|
[[package]]
|
|
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
|
{devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-git-interactive-rebase-light.png
RENAMED
|
File without changes
|
{devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-postgresql-explain-analyze-dark.png
RENAMED
|
File without changes
|
{devcoach-0.3.11 → devcoach-0.3.12}/docs/screenshots/lesson-postgresql-explain-analyze-light.png
RENAMED
|
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
|
|
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
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|