free-claude-code 6.2.69__tar.gz → 6.2.70__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 (869) hide show
  1. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/actions/ci-environment/action.yml +5 -2
  2. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/workflows/post-merge.yml +3 -1
  3. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/CONTRIBUTING.md +2 -3
  4. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/PKG-INFO +2 -2
  5. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_progressive_startup.py +10 -1
  6. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/pyproject.toml +1 -1
  7. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/install.ps1 +1 -1
  8. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/install.sh +1 -1
  9. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_uv_policy.py +74 -0
  10. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/test_installers.py +3 -3
  11. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/uv.lock +4 -102
  12. free_claude_code-6.2.69/.python-version +0 -1
  13. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.gitattributes +0 -0
  14. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  15. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/ISSUE_TEMPLATE/config.yml +0 -0
  16. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/ISSUE_TEMPLATE/feature-request.yml +0 -0
  17. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/dependabot.yml +0 -0
  18. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/workflows/tests.yml +0 -0
  19. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/workflows/validate-bug-report-version.yml +0 -0
  20. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.github/workflows/version-policy.yml +0 -0
  21. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/.gitignore +0 -0
  22. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/LICENSE +0 -0
  23. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/README.md +0 -0
  24. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/admin-messaging.png +0 -0
  25. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/admin-page.png +0 -0
  26. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/browser-code-session.png +0 -0
  27. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/cc-model-picker.png +0 -0
  28. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/codex-model-picker.png +0 -0
  29. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/codex.png +0 -0
  30. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/free-claude-code-wordmark-dark.svg +0 -0
  31. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/free-claude-code-wordmark-light.svg +0 -0
  32. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/how-it-works.mmd +0 -0
  33. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/how-it-works.svg +0 -0
  34. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/package-manager-uv.svg +0 -0
  35. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/assets/pic.png +0 -0
  36. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/conftest.py +0 -0
  37. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/__init__.py +0 -0
  38. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/code_support.py +0 -0
  39. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/conftest.py +0 -0
  40. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/form_support.py +0 -0
  41. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/provider_support.py +0 -0
  42. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_admin_apply.py +0 -0
  43. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_admin_assets.py +0 -0
  44. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_admin_integrations.py +0 -0
  45. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_admin_models.py +0 -0
  46. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_admin_providers.py +0 -0
  47. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_claude_desktop_integration.py +0 -0
  48. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_code_sessions.py +0 -0
  49. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_connected_accounts.py +0 -0
  50. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_integration_notices.py +0 -0
  51. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_jetbrains_acp_integration.py +0 -0
  52. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_provider_modals.py +0 -0
  53. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/test_tool_schema_patterns.py +0 -0
  54. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/e2e/thread_diagnostics.py +0 -0
  55. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/check_version_policy.py +0 -0
  56. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/ci.ps1 +0 -0
  57. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/ci.sh +0 -0
  58. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/install-muse.ps1 +0 -0
  59. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/publish_release.py +0 -0
  60. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/uninstall-muse.ps1 +0 -0
  61. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/uninstall.ps1 +0 -0
  62. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/uninstall.sh +0 -0
  63. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/update/fcc-update +0 -0
  64. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/update/fcc-update.cmd +0 -0
  65. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/scripts/validate_release.py +0 -0
  66. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/README.md +0 -0
  67. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/__init__.py +0 -0
  68. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/assets/vision-fcc.png +0 -0
  69. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/capabilities.py +0 -0
  70. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/conftest.py +0 -0
  71. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/features.py +0 -0
  72. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/__init__.py +0 -0
  73. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/child_process.py +0 -0
  74. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/claude_cli_matrix.py +0 -0
  75. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/config.py +0 -0
  76. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/e2e.py +0 -0
  77. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/http.py +0 -0
  78. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/local_providers.py +0 -0
  79. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/outcomes.py +0 -0
  80. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/report.py +0 -0
  81. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/report_summary.py +0 -0
  82. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/server.py +0 -0
  83. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/lib/skips.py +0 -0
  84. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/__init__.py +0 -0
  85. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_api_prereq_live.py +0 -0
  86. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_auth_prereq_live.py +0 -0
  87. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_cli_prereq_live.py +0 -0
  88. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_client_shapes_prereq_live.py +0 -0
  89. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_local_provider_endpoints_prereq_live.py +0 -0
  90. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_messaging_prereq_live.py +0 -0
  91. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_provider_prereq_live.py +0 -0
  92. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_tools_prereq_live.py +0 -0
  93. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/prereq/test_voice_prereq_live.py +0 -0
  94. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/__init__.py +0 -0
  95. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_api_product_live.py +0 -0
  96. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_auth_product_live.py +0 -0
  97. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_cli_package_product_live.py +0 -0
  98. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_client_product_live.py +0 -0
  99. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_codex_modes_product_live.py +0 -0
  100. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_config_extensibility_product_live.py +0 -0
  101. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_live_platform_product_live.py +0 -0
  102. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_local_provider_product_live.py +0 -0
  103. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_messaging_product_live.py +0 -0
  104. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_model_fallback_product_live.py +0 -0
  105. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_nvidia_nim_cli_product_live.py +0 -0
  106. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_nvidia_nim_vision_product_live.py +0 -0
  107. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_openrouter_free_cli_product_live.py +0 -0
  108. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_provider_product_live.py +0 -0
  109. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_runtime_ownership_product_live.py +0 -0
  110. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/smoke/product/test_voice_product_live.py +0 -0
  111. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/__init__.py +0 -0
  112. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/__init__.py +0 -0
  113. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_cache.py +0 -0
  114. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_routes.py +0 -0
  115. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_security.py +0 -0
  116. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/admin.css +0 -0
  117. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/admin.js +0 -0
  118. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/code_sessions.css +0 -0
  119. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/code_sessions.js +0 -0
  120. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/form_controls.js +0 -0
  121. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/index.html +0 -0
  122. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/model_combobox.js +0 -0
  123. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/LICENSE-llamacpp.txt +0 -0
  124. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/LICENSE-lobe-icons.txt +0 -0
  125. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/SOURCES.md +0 -0
  126. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/agnesai.svg +0 -0
  127. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/azure-color.svg +0 -0
  128. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/bedrock-color.svg +0 -0
  129. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/cerebras-color.svg +0 -0
  130. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/cheaperinference.svg +0 -0
  131. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/chutes.png +0 -0
  132. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/cline.svg +0 -0
  133. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/cloudflare-color.svg +0 -0
  134. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/cohere-color.svg +0 -0
  135. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/deepinfra-color.svg +0 -0
  136. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/deepseek-color.svg +0 -0
  137. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/experiential.svg +0 -0
  138. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/featherless-color.svg +0 -0
  139. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/fireworks-color.svg +0 -0
  140. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/gemini-color.svg +0 -0
  141. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/githubcopilot.svg +0 -0
  142. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/groq.svg +0 -0
  143. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/huggingface-color.svg +0 -0
  144. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/kilocode.svg +0 -0
  145. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/kimi-color.svg +0 -0
  146. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/lightning.png +0 -0
  147. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/llamacpp.svg +0 -0
  148. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/llm7.png +0 -0
  149. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/lmstudio.svg +0 -0
  150. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/minimax-color.svg +0 -0
  151. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/mistral-color.svg +0 -0
  152. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/nararoute.png +0 -0
  153. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/nebius.svg +0 -0
  154. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/novita-color.svg +0 -0
  155. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/nvidia-color.svg +0 -0
  156. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/ollama.svg +0 -0
  157. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/openai.svg +0 -0
  158. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/opencode.svg +0 -0
  159. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/openrouter.svg +0 -0
  160. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/poolside-color.svg +0 -0
  161. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/qwen-color.svg +0 -0
  162. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/sambanova-color.svg +0 -0
  163. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/scaleway.svg +0 -0
  164. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/siliconcloud-color.svg +0 -0
  165. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/together-color.svg +0 -0
  166. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/tokenrouter.png +0 -0
  167. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/vercel.svg +0 -0
  168. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/vertexai-color.svg +0 -0
  169. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/wafer.png +0 -0
  170. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/wandb.png +0 -0
  171. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/xai.svg +0 -0
  172. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/zai.svg +0 -0
  173. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/providers/zenmux.svg +0 -0
  174. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/session_layout.css +0 -0
  175. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/admin_static/session_ui.js +0 -0
  176. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/app.py +0 -0
  177. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/code_sessions_routes.py +0 -0
  178. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/command_utils.py +0 -0
  179. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/dependencies.py +0 -0
  180. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/detection.py +0 -0
  181. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/handlers/__init__.py +0 -0
  182. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/handlers/classifier_response.py +0 -0
  183. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/handlers/messages.py +0 -0
  184. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/handlers/responses.py +0 -0
  185. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/handlers/token_count.py +0 -0
  186. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/markdown.py +0 -0
  187. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/model_catalog.py +0 -0
  188. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/optimization_handlers.py +0 -0
  189. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/ports.py +0 -0
  190. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/request_errors.py +0 -0
  191. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/request_ids.py +0 -0
  192. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/request_lifetime.py +0 -0
  193. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/response_streams.py +0 -0
  194. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/routes.py +0 -0
  195. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/api/validation_log.py +0 -0
  196. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/__init__.py +0 -0
  197. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/code_sessions/__init__.py +0 -0
  198. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/code_sessions/models.py +0 -0
  199. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/code_sessions/ports.py +0 -0
  200. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/code_sessions/service.py +0 -0
  201. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/code_sessions/state.py +0 -0
  202. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/connected_accounts.py +0 -0
  203. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/errors.py +0 -0
  204. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/execution.py +0 -0
  205. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/model_catalog.py +0 -0
  206. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/model_metadata.py +0 -0
  207. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/ports.py +0 -0
  208. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/readiness.py +0 -0
  209. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/reasoning.py +0 -0
  210. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/routing.py +0 -0
  211. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/session_events.py +0 -0
  212. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/web_tools/__init__.py +0 -0
  213. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/web_tools/ports.py +0 -0
  214. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/web_tools/request.py +0 -0
  215. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/application/web_tools/service.py +0 -0
  216. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/assets/app-icon.icns +0 -0
  217. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/assets/app-icon.ico +0 -0
  218. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/assets/app-icon.png +0 -0
  219. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/assets/app-icon.svg +0 -0
  220. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/__init__.py +0 -0
  221. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/commands.py +0 -0
  222. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/desktop.py +0 -0
  223. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/desktop_assets.py +0 -0
  224. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/desktop_entrypoint.py +0 -0
  225. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/desktop_tray.py +0 -0
  226. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/entrypoints.py +0 -0
  227. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/__init__.py +0 -0
  228. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/aider.py +0 -0
  229. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/aider_config.py +0 -0
  230. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/catalog_http.py +0 -0
  231. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/claude.py +0 -0
  232. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/cline.py +0 -0
  233. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/cline_config.py +0 -0
  234. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/codex.py +0 -0
  235. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/common.py +0 -0
  236. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/dsh.py +0 -0
  237. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/dsh_config.py +0 -0
  238. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/grok.py +0 -0
  239. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/hermes.py +0 -0
  240. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/hermes_config.py +0 -0
  241. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/muse.py +0 -0
  242. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/opencode.py +0 -0
  243. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/opencode_config.py +0 -0
  244. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/pi.py +0 -0
  245. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/pi_extension.ts +0 -0
  246. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/launchers/runner.py +0 -0
  247. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/local_http.py +0 -0
  248. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/managed/__init__.py +0 -0
  249. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/managed/claude.py +0 -0
  250. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/managed/diagnostics.py +0 -0
  251. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/managed/manager.py +0 -0
  252. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/managed/session.py +0 -0
  253. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/process_registry.py +0 -0
  254. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/server_socket.py +0 -0
  255. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/cli/uvicorn_server.py +0 -0
  256. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/__init__.py +0 -0
  257. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/__init__.py +0 -0
  258. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/manifest.py +0 -0
  259. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/persistence.py +0 -0
  260. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/provider_manifest.py +0 -0
  261. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/specs.py +0 -0
  262. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/state.py +0 -0
  263. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/status.py +0 -0
  264. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/validation.py +0 -0
  265. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/admin/values.py +0 -0
  266. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/constants.py +0 -0
  267. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/env_files.py +0 -0
  268. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/env_migrations.py +0 -0
  269. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/loader.py +0 -0
  270. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/logging_config.py +0 -0
  271. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/model_refs.py +0 -0
  272. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/nim.py +0 -0
  273. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/paths.py +0 -0
  274. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/provider_catalog.py +0 -0
  275. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/provider_proxies.py +0 -0
  276. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/reasoning.py +0 -0
  277. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/server_urls.py +0 -0
  278. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/config/settings.py +0 -0
  279. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/__init__.py +0 -0
  280. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/__init__.py +0 -0
  281. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/content.py +0 -0
  282. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/conversion.py +0 -0
  283. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/errors.py +0 -0
  284. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/image_sources.py +0 -0
  285. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/models.py +0 -0
  286. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/native.py +0 -0
  287. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/native_stream.py +0 -0
  288. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/request_serialization.py +0 -0
  289. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/request_snapshot.py +0 -0
  290. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/server_tool_sse.py +0 -0
  291. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/server_tool_types.py +0 -0
  292. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/sse_aggregation.py +0 -0
  293. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/stream_contracts.py +0 -0
  294. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/streaming/__init__.py +0 -0
  295. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/streaming/decoder.py +0 -0
  296. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/streaming/emitter.py +0 -0
  297. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/streaming/ledger.py +0 -0
  298. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/streaming/recovery.py +0 -0
  299. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/thinking.py +0 -0
  300. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/tokens.py +0 -0
  301. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/tool_results.py +0 -0
  302. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/tool_schema.py +0 -0
  303. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/tools.py +0 -0
  304. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/usage.py +0 -0
  305. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/anthropic/utils.py +0 -0
  306. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/async_iterators.py +0 -0
  307. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/async_tasks.py +0 -0
  308. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/data/README.md +0 -0
  309. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/data/TIKTOKEN-LICENSE +0 -0
  310. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/data/cl100k_base.tiktoken +0 -0
  311. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/diagnostics.py +0 -0
  312. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/failures.py +0 -0
  313. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/gateway_model_ids.py +0 -0
  314. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/history_replay.py +0 -0
  315. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/interprocess_lock.py +0 -0
  316. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/json_types.py +0 -0
  317. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/model_capabilities.py +0 -0
  318. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_chat.py +0 -0
  319. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/__init__.py +0 -0
  320. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/chat_request.py +0 -0
  321. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/errors.py +0 -0
  322. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/events.py +0 -0
  323. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/ids.py +0 -0
  324. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/items.py +0 -0
  325. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/messages_request.py +0 -0
  326. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/messages_stream.py +0 -0
  327. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/models.py +0 -0
  328. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/native.py +0 -0
  329. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/provider_input.py +0 -0
  330. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/provider_stream.py +0 -0
  331. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/reasoning.py +0 -0
  332. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/streaming/__init__.py +0 -0
  333. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/streaming/blocks.py +0 -0
  334. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/streaming/completion.py +0 -0
  335. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/streaming/error_mapping.py +0 -0
  336. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/streaming/event_builders.py +0 -0
  337. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/streaming/ledger.py +0 -0
  338. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/tokens.py +0 -0
  339. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/tool_adaptation.py +0 -0
  340. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/tool_search.py +0 -0
  341. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_responses/tools.py +0 -0
  342. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/openai_tool_names.py +0 -0
  343. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/rate_limit.py +0 -0
  344. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/reasoning.py +0 -0
  345. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/token_estimation.py +0 -0
  346. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/tool_schema_patterns.py +0 -0
  347. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/trace.py +0 -0
  348. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/version.py +0 -0
  349. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/web_tools.py +0 -0
  350. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/core/windows_dpi.py +0 -0
  351. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/__init__.py +0 -0
  352. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/claude.py +0 -0
  353. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/claude_desktop_integration.py +0 -0
  354. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/claude_integration.py +0 -0
  355. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/codex.py +0 -0
  356. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/codex_integration.py +0 -0
  357. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/codex_model_catalog.py +0 -0
  358. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/config_file.py +0 -0
  359. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/environment.py +0 -0
  360. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/jetbrains_acp_integration.py +0 -0
  361. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/launch.py +0 -0
  362. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/harnesses/resources.py +0 -0
  363. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/__init__.py +0 -0
  364. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/cli_event_constants.py +0 -0
  365. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/command_context.py +0 -0
  366. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/command_dispatcher.py +0 -0
  367. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/commands.py +0 -0
  368. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/event_parser.py +0 -0
  369. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/limiter.py +0 -0
  370. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/managed_protocols.py +0 -0
  371. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/models.py +0 -0
  372. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/node_event_pipeline.py +0 -0
  373. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/node_runner.py +0 -0
  374. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/__init__.py +0 -0
  375. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/discord.py +0 -0
  376. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/discord_inbound.py +0 -0
  377. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/discord_io.py +0 -0
  378. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/factory.py +0 -0
  379. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/outbox.py +0 -0
  380. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/ports.py +0 -0
  381. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/telegram.py +0 -0
  382. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/telegram_inbound.py +0 -0
  383. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/telegram_io.py +0 -0
  384. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/platforms/voice_flow.py +0 -0
  385. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/rendering/__init__.py +0 -0
  386. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/rendering/discord_markdown.py +0 -0
  387. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/rendering/markdown_tables.py +0 -0
  388. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/rendering/profiles.py +0 -0
  389. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/rendering/telegram_markdown.py +0 -0
  390. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/safe_diagnostics.py +0 -0
  391. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/session/__init__.py +0 -0
  392. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/session/managed_message_log.py +0 -0
  393. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/session/persistence.py +0 -0
  394. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/session/store.py +0 -0
  395. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/transcript/__init__.py +0 -0
  396. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/transcript/buffer.py +0 -0
  397. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/transcript/context.py +0 -0
  398. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/transcript/renderer.py +0 -0
  399. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/transcript/segments.py +0 -0
  400. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/transcript/subagents.py +0 -0
  401. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/transcription.py +0 -0
  402. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/__init__.py +0 -0
  403. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/graph.py +0 -0
  404. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/identity.py +0 -0
  405. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/manager.py +0 -0
  406. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/node.py +0 -0
  407. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/processor.py +0 -0
  408. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/queue.py +0 -0
  409. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/repository.py +0 -0
  410. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/runtime.py +0 -0
  411. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/snapshot.py +0 -0
  412. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/trees/transitions.py +0 -0
  413. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/turn_intake.py +0 -0
  414. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/ui_updates.py +0 -0
  415. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/voice.py +0 -0
  416. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/messaging/workflow.py +0 -0
  417. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/__init__.py +0 -0
  418. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/admission.py +0 -0
  419. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/anthropic_messages/__init__.py +0 -0
  420. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/anthropic_messages/request_policy.py +0 -0
  421. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/anthropic_messages/transport.py +0 -0
  422. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/base.py +0 -0
  423. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/cloudflare/__init__.py +0 -0
  424. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/cloudflare/client.py +0 -0
  425. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/credential_validation.py +0 -0
  426. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/deepseek/__init__.py +0 -0
  427. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/deepseek/client.py +0 -0
  428. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/deepseek/compat.py +0 -0
  429. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/endpoint.py +0 -0
  430. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/endpoint_types.py +0 -0
  431. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/failure_policy.py +0 -0
  432. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/gemini/__init__.py +0 -0
  433. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/gemini/client.py +0 -0
  434. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/__init__.py +0 -0
  435. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/auth.py +0 -0
  436. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/broker.py +0 -0
  437. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/lifecycle.py +0 -0
  438. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/login.py +0 -0
  439. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/native_cli.py +0 -0
  440. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/provider.py +0 -0
  441. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/request_policy.py +0 -0
  442. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/responses_events.py +0 -0
  443. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/sdk.py +0 -0
  444. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/github_copilot/types.py +0 -0
  445. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/google_openai/__init__.py +0 -0
  446. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/google_openai/provider.py +0 -0
  447. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/google_openai/reasoning.py +0 -0
  448. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/google_openai/thought_signatures.py +0 -0
  449. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/groq/__init__.py +0 -0
  450. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/groq/client.py +0 -0
  451. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/groq/tpm.py +0 -0
  452. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/history_replay.py +0 -0
  453. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/http.py +0 -0
  454. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/kilo/__init__.py +0 -0
  455. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/kilo/client.py +0 -0
  456. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/kilo/models.py +0 -0
  457. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/lmstudio/__init__.py +0 -0
  458. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/lmstudio/client.py +0 -0
  459. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/mistral/__init__.py +0 -0
  460. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/mistral/client.py +0 -0
  461. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/mistral/reasoning.py +0 -0
  462. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/model_listing.py +0 -0
  463. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/nvidia_nim/__init__.py +0 -0
  464. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/nvidia_nim/client.py +0 -0
  465. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/nvidia_nim/native_tool_stream.py +0 -0
  466. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/nvidia_nim/request_options.py +0 -0
  467. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/nvidia_nim/retry.py +0 -0
  468. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/nvidia_nim/tool_schema.py +0 -0
  469. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/nvidia_nim/voice.py +0 -0
  470. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/open_router/__init__.py +0 -0
  471. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/open_router/client.py +0 -0
  472. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_api/__init__.py +0 -0
  473. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_api/provider.py +0 -0
  474. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/__init__.py +0 -0
  475. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/base_url.py +0 -0
  476. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/behavior.py +0 -0
  477. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/client.py +0 -0
  478. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/extra_body.py +0 -0
  479. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/output_cap.py +0 -0
  480. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/profiles.py +0 -0
  481. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/provider.py +0 -0
  482. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/reasoning.py +0 -0
  483. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/reasoning_details.py +0 -0
  484. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/request_policy.py +0 -0
  485. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/stream_output.py +0 -0
  486. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/tool_calls.py +0 -0
  487. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/transport.py +0 -0
  488. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_chat/usage.py +0 -0
  489. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_client.py +0 -0
  490. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_codex/__init__.py +0 -0
  491. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_codex/auth.py +0 -0
  492. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_codex/endpoint.py +0 -0
  493. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_codex/login.py +0 -0
  494. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_codex/provider.py +0 -0
  495. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_responses/__init__.py +0 -0
  496. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_responses/presentation.py +0 -0
  497. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_responses/transport.py +0 -0
  498. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/openai_stream.py +0 -0
  499. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/opencode/__init__.py +0 -0
  500. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/opencode/catalog.py +0 -0
  501. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/opencode/provider.py +0 -0
  502. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/reasoning_compatibility.py +0 -0
  503. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/request_recovery.py +0 -0
  504. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/runtime/__init__.py +0 -0
  505. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/runtime/config.py +0 -0
  506. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/runtime/discovery.py +0 -0
  507. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/runtime/factory.py +0 -0
  508. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/runtime/model_cache.py +0 -0
  509. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/runtime/runtime.py +0 -0
  510. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/stream_recovery.py +0 -0
  511. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/vertex/__init__.py +0 -0
  512. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/vertex/auth.py +0 -0
  513. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/vertex/client.py +0 -0
  514. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/vertex/endpoint.py +0 -0
  515. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/providers/vertex/models.py +0 -0
  516. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/__init__.py +0 -0
  517. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/application.py +0 -0
  518. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/asgi.py +0 -0
  519. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/bootstrap.py +0 -0
  520. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/code_sessions_sqlite.py +0 -0
  521. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/codex_app_server.py +0 -0
  522. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/codex_catalog.py +0 -0
  523. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/codex_protocol.py +0 -0
  524. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/configuration.py +0 -0
  525. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/folder_picker.py +0 -0
  526. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/native_folder_dialog.py +0 -0
  527. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/provider_manager.py +0 -0
  528. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/retired_chat.py +0 -0
  529. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/web_tools/__init__.py +0 -0
  530. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/web_tools/client.py +0 -0
  531. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/web_tools/constants.py +0 -0
  532. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/web_tools/egress.py +0 -0
  533. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/src/free_claude_code/runtime/web_tools/parsers.py +0 -0
  534. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/__init__.py +0 -0
  535. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/model_fallback_support.py +0 -0
  536. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/support.py +0 -0
  537. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_admin.py +0 -0
  538. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_admin_configuration_io.py +0 -0
  539. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_api.py +0 -0
  540. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_api_handlers.py +0 -0
  541. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_app_lifespan_and_errors.py +0 -0
  542. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_app_version.py +0 -0
  543. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_auth.py +0 -0
  544. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_classifier_provider_compatibility.py +0 -0
  545. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_classifier_response.py +0 -0
  546. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_claude_desktop_integration.py +0 -0
  547. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_code_sessions_routes.py +0 -0
  548. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_codex_integration_routes.py +0 -0
  549. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_dependencies.py +0 -0
  550. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_detection.py +0 -0
  551. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_execution_failure_contract.py +0 -0
  552. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_groq_token_limits.py +0 -0
  553. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_jetbrains_acp_integration.py +0 -0
  554. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_managed_proxy_token.py +0 -0
  555. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_markdown.py +0 -0
  556. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_model_fallback.py +0 -0
  557. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_model_listing.py +0 -0
  558. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_openai_codex_compatibility.py +0 -0
  559. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_openai_responses.py +0 -0
  560. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_opencode_session_headers.py +0 -0
  561. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_openrouter_image_errors.py +0 -0
  562. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_optimization_handlers.py +0 -0
  563. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_ordinary_error_phases.py +0 -0
  564. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_request_ids.py +0 -0
  565. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_request_lifetime.py +0 -0
  566. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_request_utils.py +0 -0
  567. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_request_utils_filepaths_and_suggestions.py +0 -0
  568. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_response_streams.py +0 -0
  569. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_routes_optimizations.py +0 -0
  570. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_runtime_safe_logging.py +0 -0
  571. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_safe_logging.py +0 -0
  572. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_validation_log.py +0 -0
  573. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_vscode_integration.py +0 -0
  574. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/api/test_web_server_tools.py +0 -0
  575. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_code_sessions.py +0 -0
  576. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_code_sessions_state.py +0 -0
  577. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_connected_accounts.py +0 -0
  578. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_execution.py +0 -0
  579. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_model_catalog.py +0 -0
  580. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_model_metadata.py +0 -0
  581. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_reasoning.py +0 -0
  582. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_request_conversion.py +0 -0
  583. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_routing.py +0 -0
  584. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_session_events.py +0 -0
  585. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/application/test_web_tools.py +0 -0
  586. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/conftest.py +0 -0
  587. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_aider_config.py +0 -0
  588. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_aider_launcher.py +0 -0
  589. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_catalog_http.py +0 -0
  590. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_claude_launcher.py +0 -0
  591. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_cli.py +0 -0
  592. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_cli_manager_edge_cases.py +0 -0
  593. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_cli_ownership.py +0 -0
  594. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_cline_launcher.py +0 -0
  595. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_codex_launcher.py +0 -0
  596. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_codex_model_catalog.py +0 -0
  597. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_config_restart_lifecycle.py +0 -0
  598. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_desktop.py +0 -0
  599. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_desktop_assets.py +0 -0
  600. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_dsh_config.py +0 -0
  601. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_dsh_launcher.py +0 -0
  602. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_entrypoints.py +0 -0
  603. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_grok_launcher.py +0 -0
  604. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_hermes_config.py +0 -0
  605. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_hermes_launcher.py +0 -0
  606. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_launcher_checks.py +0 -0
  607. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_launcher_environment.py +0 -0
  608. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_launcher_resources.py +0 -0
  609. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_launcher_workflow.py +0 -0
  610. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_local_http.py +0 -0
  611. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_managed_claude.py +0 -0
  612. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_managed_session_shutdown.py +0 -0
  613. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_model_catalog_decoder.py +0 -0
  614. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_muse_launcher.py +0 -0
  615. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_opencode_launcher.py +0 -0
  616. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_pi_extension.py +0 -0
  617. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_pi_launcher.py +0 -0
  618. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_process_registry.py +0 -0
  619. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_progressive_launch.py +0 -0
  620. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_server_shutdown.py +0 -0
  621. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/cli/test_update_wrapper.py +0 -0
  622. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/code_sessions_support.py +0 -0
  623. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/config/test_admin_credential_changes.py +0 -0
  624. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/config/test_admin_status.py +0 -0
  625. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/config/test_config.py +0 -0
  626. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/config/test_env_migrations.py +0 -0
  627. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/config/test_fixed_cloud_endpoints.py +0 -0
  628. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/config/test_logging_config.py +0 -0
  629. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/config/test_provider_catalog.py +0 -0
  630. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/conftest.py +0 -0
  631. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_admin_provider_manifest.py +0 -0
  632. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_capability_map.py +0 -0
  633. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_feature_manifest.py +0 -0
  634. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_import_boundaries.py +0 -0
  635. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_issue_form_version_validation.py +0 -0
  636. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_issue_forms.py +0 -0
  637. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_local_provider_smoke.py +0 -0
  638. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_nvidia_nim_cli_matrix.py +0 -0
  639. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_offline_startup.py +0 -0
  640. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_packaging_contracts.py +0 -0
  641. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_protocol_matrix.py +0 -0
  642. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_provider_catalog_order.py +0 -0
  643. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_smoke_child_process.py +0 -0
  644. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_smoke_config.py +0 -0
  645. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_smoke_tiers.py +0 -0
  646. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_startup_import_boundaries.py +0 -0
  647. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/contracts/test_stream_contracts.py +0 -0
  648. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_errors.py +0 -0
  649. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_image_sources.py +0 -0
  650. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_models.py +0 -0
  651. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_native_messages.py +0 -0
  652. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_native_messages_stream.py +0 -0
  653. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_native_sse_framing.py +0 -0
  654. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_openai_tool_names.py +0 -0
  655. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_request_serialization.py +0 -0
  656. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_response_models.py +0 -0
  657. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_server_tool_sse.py +0 -0
  658. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_sse_decoder.py +0 -0
  659. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_stream_ledger.py +0 -0
  660. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_stream_repair.py +0 -0
  661. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_text_tools.py +0 -0
  662. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_tool_results.py +0 -0
  663. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/anthropic/test_usage.py +0 -0
  664. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_chat_request.py +0 -0
  665. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_client_tool_discovery.py +0 -0
  666. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_messages_request.py +0 -0
  667. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_native.py +0 -0
  668. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_openai_responses_models.py +0 -0
  669. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_provider_input.py +0 -0
  670. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_provider_stream.py +0 -0
  671. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_reasoning_replay.py +0 -0
  672. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_responses_from_messages_stream.py +0 -0
  673. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_tokens.py +0 -0
  674. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_tool_adaptation.py +0 -0
  675. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/openai_responses/test_tool_search.py +0 -0
  676. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_async_iterators.py +0 -0
  677. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_desktop_model_ids.py +0 -0
  678. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_diagnostics.py +0 -0
  679. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_failure_protocol_mapping.py +0 -0
  680. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_failures.py +0 -0
  681. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_history_replay.py +0 -0
  682. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_history_switching.py +0 -0
  683. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_openai_chat.py +0 -0
  684. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_protocol_model_ownership.py +0 -0
  685. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_strict_sliding_window.py +0 -0
  686. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_token_estimation.py +0 -0
  687. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_tool_schema_patterns.py +0 -0
  688. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_trace.py +0 -0
  689. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_version.py +0 -0
  690. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/core/test_windows_dpi.py +0 -0
  691. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/harnesses/__init__.py +0 -0
  692. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/harnesses/test_claude_desktop_integration.py +0 -0
  693. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/harnesses/test_claude_integration.py +0 -0
  694. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/harnesses/test_codex_integration.py +0 -0
  695. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/harnesses/test_codex_model_catalog.py +0 -0
  696. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/harnesses/test_environment.py +0 -0
  697. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/harnesses/test_integration_refresh.py +0 -0
  698. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/harnesses/test_jetbrains_acp_integration.py +0 -0
  699. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/AGENTS.md +0 -0
  700. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/_pty_runner.py +0 -0
  701. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/conftest.py +0 -0
  702. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/fixtures/.gitattributes +0 -0
  703. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/fixtures/README.md +0 -0
  704. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/fixtures/rtk-LICENSE +0 -0
  705. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/fixtures/rtk-opencode-v1.ts +0 -0
  706. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/test_muse_windows_lifecycle.py +0 -0
  707. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/test_powershell_cache.py +0 -0
  708. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/installers/test_uninstallers.py +0 -0
  709. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_discord_markdown.py +0 -0
  710. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_discord_platform.py +0 -0
  711. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_event_parser.py +0 -0
  712. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_extract_text.py +0 -0
  713. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_handler.py +0 -0
  714. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_handler_context_isolation.py +0 -0
  715. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_handler_format.py +0 -0
  716. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_handler_integration.py +0 -0
  717. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_handler_markdown_and_status_edges.py +0 -0
  718. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_limiter.py +0 -0
  719. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_message_tree_transitions.py +0 -0
  720. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_messaging.py +0 -0
  721. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_messaging_factory.py +0 -0
  722. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_platform_outbox.py +0 -0
  723. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_platform_voice_flow.py +0 -0
  724. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_reliability.py +0 -0
  725. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_rendering_profiles.py +0 -0
  726. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_restart_reply_restore.py +0 -0
  727. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_robust_formatting.py +0 -0
  728. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_session_store_edge_cases.py +0 -0
  729. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_stream_transcript_contract.py +0 -0
  730. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_telegram.py +0 -0
  731. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_telegram_edge_cases.py +0 -0
  732. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_transcript.py +0 -0
  733. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_transcription.py +0 -0
  734. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_transcription_nim.py +0 -0
  735. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_tree_concurrency.py +0 -0
  736. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_tree_customer_regressions.py +0 -0
  737. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_tree_ownership_concurrency.py +0 -0
  738. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_tree_processor.py +0 -0
  739. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_tree_queue.py +0 -0
  740. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_tree_repository.py +0 -0
  741. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_voice_handlers.py +0 -0
  742. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/messaging/test_voice_services.py +0 -0
  743. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/provider_request_mocks.py +0 -0
  744. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/copilot_support.py +0 -0
  745. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/fixtures/copilot_responses_changing_ids.json +0 -0
  746. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/request_factory.py +0 -0
  747. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/support.py +0 -0
  748. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_agnes.py +0 -0
  749. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_anthropic_messages_transport.py +0 -0
  750. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_azure_openai.py +0 -0
  751. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_bedrock.py +0 -0
  752. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_cerebras.py +0 -0
  753. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_cheaperinference.py +0 -0
  754. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_chutes.py +0 -0
  755. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_cline_pass.py +0 -0
  756. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_cloudflare.py +0 -0
  757. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_codestral.py +0 -0
  758. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_cohere.py +0 -0
  759. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_converter.py +0 -0
  760. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_credential_validation.py +0 -0
  761. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_deepinfra.py +0 -0
  762. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_deepseek.py +0 -0
  763. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_endpoint_context_transports.py +0 -0
  764. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_execution_failure_boundary.py +0 -0
  765. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_experiential.py +0 -0
  766. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_failure_policy.py +0 -0
  767. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_featherless.py +0 -0
  768. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_fireworks.py +0 -0
  769. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_gemini.py +0 -0
  770. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_github_copilot_auth.py +0 -0
  771. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_github_copilot_broker.py +0 -0
  772. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_github_copilot_login.py +0 -0
  773. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_github_copilot_provider.py +0 -0
  774. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_github_copilot_responses_identity.py +0 -0
  775. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_github_copilot_sdk.py +0 -0
  776. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_groq.py +0 -0
  777. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_groq_reasoning.py +0 -0
  778. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_groq_tpm.py +0 -0
  779. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_history_corrections.py +0 -0
  780. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_history_transports.py +0 -0
  781. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_huggingface.py +0 -0
  782. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_kilo.py +0 -0
  783. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_kimi.py +0 -0
  784. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_kimi_code.py +0 -0
  785. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_lightning.py +0 -0
  786. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_llamacpp.py +0 -0
  787. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_llm7.py +0 -0
  788. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_lmstudio.py +0 -0
  789. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_messages_request_policy.py +0 -0
  790. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_minimax.py +0 -0
  791. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_mistral.py +0 -0
  792. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_model_discovery.py +0 -0
  793. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_model_token_limit_profiles.py +0 -0
  794. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_nararoute.py +0 -0
  795. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_nebius.py +0 -0
  796. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_nim_request_clone.py +0 -0
  797. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_novita.py +0 -0
  798. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_nvidia_nim.py +0 -0
  799. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_nvidia_nim_degraded_retry.py +0 -0
  800. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_nvidia_nim_native_tool_stream.py +0 -0
  801. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_nvidia_nim_request.py +0 -0
  802. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_ollama.py +0 -0
  803. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_open_router.py +0 -0
  804. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_api_provider.py +0 -0
  805. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_api_sampling.py +0 -0
  806. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_chat_output_cap.py +0 -0
  807. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_chat_reasoning.py +0 -0
  808. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_chat_stream_output.py +0 -0
  809. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_chat_tool_names.py +0 -0
  810. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_chat_transport.py +0 -0
  811. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_chat_usage.py +0 -0
  812. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_codex_auth.py +0 -0
  813. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_codex_provider.py +0 -0
  814. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_compat_5xx_retry.py +0 -0
  815. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_model_listing_filters.py +0 -0
  816. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_openai_responses_transport.py +0 -0
  817. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_opencode.py +0 -0
  818. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_parsers.py +0 -0
  819. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_poolside.py +0 -0
  820. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_provider_admission.py +0 -0
  821. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_provider_client_tool_discovery.py +0 -0
  822. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_provider_runtime.py +0 -0
  823. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_provider_transport_logging.py +0 -0
  824. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_qwencloud.py +0 -0
  825. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_qwencloud_coding.py +0 -0
  826. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_reasoning_capabilities.py +0 -0
  827. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_reasoning_compatibility.py +0 -0
  828. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_request_recovery_transitions.py +0 -0
  829. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_sambanova.py +0 -0
  830. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_scaleway.py +0 -0
  831. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_sdk_stream_lifecycle.py +0 -0
  832. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_siliconflow.py +0 -0
  833. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_stream_recovery.py +0 -0
  834. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_stream_startup_contract.py +0 -0
  835. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_streaming_errors.py +0 -0
  836. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_subagent_interception.py +0 -0
  837. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_together.py +0 -0
  838. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_vercel.py +0 -0
  839. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_vertex.py +0 -0
  840. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_wafer.py +0 -0
  841. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_wandb.py +0 -0
  842. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_xai.py +0 -0
  843. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_zai.py +0 -0
  844. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/providers/test_zenmux.py +0 -0
  845. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/codex_fake_process.py +0 -0
  846. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_application_runtime.py +0 -0
  847. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_code_sessions_sqlite.py +0 -0
  848. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_codex_app_server.py +0 -0
  849. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_codex_catalog.py +0 -0
  850. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_codex_protocol.py +0 -0
  851. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_config_startup.py +0 -0
  852. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_config_transactions.py +0 -0
  853. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_configuration.py +0 -0
  854. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_folder_picker.py +0 -0
  855. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_integration_startup.py +0 -0
  856. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_model_cache.py +0 -0
  857. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_native_folder_dialog.py +0 -0
  858. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_progressive_startup.py +0 -0
  859. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_provider_manager.py +0 -0
  860. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_retired_chat.py +0 -0
  861. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/runtime/test_web_tools_client.py +0 -0
  862. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/scripts/conftest.py +0 -0
  863. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/scripts/test_ci_scripts.py +0 -0
  864. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/scripts/test_publish_release.py +0 -0
  865. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/scripts/test_release_package.py +0 -0
  866. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/scripts/test_release_workflow.py +0 -0
  867. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/scripts/test_version_policy.py +0 -0
  868. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/test_thread_diagnostics.py +0 -0
  869. {free_claude_code-6.2.69 → free_claude_code-6.2.70}/tests/web_tools_support.py +0 -0
@@ -19,6 +19,9 @@ inputs:
19
19
  default: "false"
20
20
 
21
21
  outputs:
22
+ python-version:
23
+ description: Exact Python version required by the project
24
+ value: ${{ steps.identity.outputs.python-version }}
22
25
  python-path:
23
26
  description: Managed Python cache directory
24
27
  value: ${{ steps.identity.outputs.python-path }}
@@ -62,8 +65,8 @@ runs:
62
65
  CI_UV: ${{ inputs.uv-version }}
63
66
  run: |
64
67
  set -euo pipefail
65
- version="$(tr -d '[:space:]' < .python-version)"
66
- test -n "$version"
68
+ version="$(python -c 'import pathlib, tomllib; print(tomllib.loads(pathlib.Path("pyproject.toml").read_text(encoding="utf-8"))["project"]["requires-python"].removeprefix("=="))')"
69
+ [[ "$version" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]] || { echo 'Expected an exact requires-python pin in pyproject.toml' >&2; exit 1; }
67
70
  cache_root="${CI_TEMP//\\//}"
68
71
  identity="$CI_RUNNER-$CI_OS-$CI_ARCH-py-$version-uv-$CI_UV"
69
72
  {
@@ -95,6 +95,7 @@ jobs:
95
95
  fetch-depth: 0
96
96
 
97
97
  - name: Set up CI environment
98
+ id: environment
98
99
  uses: ./.github/actions/ci-environment
99
100
  with:
100
101
  uv-version: ${{ env.CI_UV_VERSION }}
@@ -107,6 +108,7 @@ jobs:
107
108
  GH_TOKEN: ${{ github.token }}
108
109
  RELEASE_REPOSITORY: ${{ github.repository }}
109
110
  RELEASE_COMMIT: ${{ inputs.release_commit || github.sha }}
111
+ CI_PYTHON: ${{ steps.environment.outputs.python-version }}
110
112
  run: |
111
- uv run --no-project --python "$(cat .python-version)" python -m scripts.publish_release \
113
+ uv run --no-project --python "$CI_PYTHON" python -m scripts.publish_release \
112
114
  --repository "$RELEASE_REPOSITORY" --commit "$RELEASE_COMMIT"
@@ -11,18 +11,17 @@ Thanks for helping improve Free Claude Code. Keep changes focused, test the beha
11
11
 
12
12
  ## Pull Request Titles
13
13
 
14
- Changes to `assets/`, `scripts/`, `src/`, `.python-version`, `pyproject.toml`, or `uv.lock` require a title starting with `patch: `, `minor: `, or `major: ` followed by a description. Use exactly one space after the colon.
14
+ Changes to `assets/`, `scripts/`, `src/`, `pyproject.toml`, or `uv.lock` require a title starting with `patch: `, `minor: `, or `major: ` followed by a description. Use exactly one space after the colon.
15
15
 
16
16
  PRs without changes to those paths must not use a release prefix. Do not edit version numbers. Publishing calculates the version after merge, creates its Git tag, and publishes to PyPI and GitHub Releases.
17
17
 
18
18
  ## Development Setup
19
19
 
20
- Install [uv](https://docs.astral.sh/uv/) and Python 3.14, then run directly from the checkout:
20
+ Install [uv](https://docs.astral.sh/uv/), then run directly from the checkout. uv automatically installs the Python version required by the project.
21
21
 
22
22
  ```bash
23
23
  git clone https://github.com/Alishahryar1/free-claude-code.git
24
24
  cd free-claude-code
25
- uv python install 3.14.0
26
25
  uv run fcc-server
27
26
  ```
28
27
 
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: free-claude-code
3
- Version: 6.2.69
3
+ Version: 6.2.70
4
4
  Summary: Local proxy connecting coding agents to OpenAI-compatible AI providers
5
5
  License-Expression: AGPL-3.0-only
6
6
  License-File: LICENSE
7
- Requires-Python: >=3.14.0
7
+ Requires-Python: ==3.14.7
8
8
  Requires-Dist: aiohttp>=3.14.3
9
9
  Requires-Dist: anyio>=4.15.1
10
10
  Requires-Dist: discord-py>=2.7.1
@@ -73,7 +73,16 @@ def test_codex_connect_waits_for_catalog_and_recovers_from_publication_error(
73
73
  route.fulfill(json=data)
74
74
 
75
75
  page.route("**/admin/api/status", status)
76
- page.goto(f"{admin_base_url}/admin/integrations")
76
+ with (
77
+ page.expect_response(
78
+ "**/admin/api/integrations/claude-vscode"
79
+ ) as claude_status,
80
+ page.expect_response("**/admin/api/integrations/codex") as codex_status,
81
+ ):
82
+ page.goto(f"{admin_base_url}/admin/integrations")
83
+ claude_status.value.finished()
84
+ codex_status.value.finished()
85
+ page.wait_for_function("state.startup?.startup?.catalog_file === 'starting'")
77
86
  connect = page.locator("#openCodexIntegration")
78
87
  expect(connect).to_be_disabled()
79
88
  expect(connect).to_have_attribute("aria-busy", "true")
@@ -9,7 +9,7 @@ description = "Local proxy connecting coding agents to OpenAI-compatible AI prov
9
9
  readme = "README.md"
10
10
  license = "AGPL-3.0-only"
11
11
  license-files = ["LICENSE"]
12
- requires-python = ">=3.14.0"
12
+ requires-python = "==3.14.7"
13
13
  dependencies = [
14
14
  "anyio>=4.15.1",
15
15
  "fastapi[standard]>=0.141.1",
@@ -13,7 +13,7 @@ $ErrorActionPreference = "Stop"
13
13
  $ProgressPreference = "SilentlyContinue"
14
14
 
15
15
  # Windows on ARM emulates x64, whose Python package ecosystem has broader wheel support.
16
- $PythonRequest = "cpython-3.14.0-windows-x86_64-none"
16
+ $PythonRequest = "cpython-3.14.7-windows-x86_64-none"
17
17
  $MinUvVersion = "0.12.13"
18
18
  $ClaudeInstallUrl = "https://claude.ai/install.ps1"
19
19
  $CodexInstallUrl = "https://chatgpt.com/codex/install.ps1"
@@ -1,7 +1,7 @@
1
1
  #!/bin/sh
2
2
  set -eu
3
3
 
4
- PYTHON_VERSION="3.14.0"
4
+ PYTHON_VERSION="3.14.7"
5
5
  MIN_UV_VERSION="0.12.13"
6
6
  CLAUDE_INSTALL_URL="https://claude.ai/install.sh"
7
7
  CODEX_INSTALL_URL="https://chatgpt.com/codex/install.sh"
@@ -1,3 +1,8 @@
1
+ import os
2
+ import re
3
+ import shutil
4
+ import subprocess
5
+ import sys
1
6
  import tomllib
2
7
  from pathlib import Path
3
8
 
@@ -18,6 +23,75 @@ REQUIRED_TEST_RUNNERS = {
18
23
  }
19
24
 
20
25
 
26
+ @pytest.mark.parametrize(
27
+ "requirement, valid",
28
+ [
29
+ ('"==3.14.7"', True),
30
+ ("'==3.14.7'", True),
31
+ ('"==3.14.7" # Python runtime', True),
32
+ ('">=3.14.7"', False),
33
+ ],
34
+ )
35
+ def test_ci_python_identity_parses_toml(
36
+ tmp_path: Path, requirement: str, valid: bool
37
+ ) -> None:
38
+ setup = yaml.safe_load(CI_SETUP.read_text(encoding="utf-8"))
39
+ step = next(step for step in setup["runs"]["steps"] if step.get("id") == "identity")
40
+ (tmp_path / "pyproject.toml").write_text(
41
+ f"[project]\nrequires-python = {requirement}\n", encoding="utf-8"
42
+ )
43
+ bash = shutil.which("bash")
44
+ if sys.platform == "win32":
45
+ git = shutil.which("git")
46
+ assert git is not None
47
+ bash = str(Path(git).resolve().parent.parent / "bin" / "bash.exe")
48
+ assert bash is not None
49
+ env = {
50
+ **os.environ,
51
+ "PATH": str(Path(sys.executable).parent) + os.pathsep + os.environ["PATH"],
52
+ "CI_TEMP": tmp_path.as_posix(),
53
+ "CI_RUNNER": "test-runner",
54
+ "CI_OS": "test-os",
55
+ "CI_ARCH": "X64",
56
+ "CI_UV": UV_MINIMUM,
57
+ "GITHUB_ENV": "github-env",
58
+ "GITHUB_OUTPUT": "github-output",
59
+ }
60
+ result = subprocess.run(
61
+ [bash, "-c", step["run"]],
62
+ cwd=tmp_path,
63
+ env=env,
64
+ capture_output=True,
65
+ text=True,
66
+ timeout=30,
67
+ )
68
+ if valid:
69
+ assert result.returncode == 0, result.stderr
70
+ output = (tmp_path / "github-output").read_text(encoding="utf-8")
71
+ assert "python-version=3.14.7\n" in output
72
+ assert f"py-3.14.7-uv-{UV_MINIMUM}" in output
73
+ else:
74
+ assert result.returncode != 0
75
+ assert not (tmp_path / "github-output").exists()
76
+
77
+
78
+ def test_installer_python_requests_match_package_requirement() -> None:
79
+ project = tomllib.loads(Path("pyproject.toml").read_text(encoding="utf-8"))
80
+ requirement = project["project"]["requires-python"]
81
+ match = re.fullmatch(r"==([0-9]+\.[0-9]+\.[0-9]+)", requirement)
82
+ assert match is not None
83
+ version = match[1]
84
+ shell = Path("scripts/install.sh").read_text(encoding="utf-8")
85
+ powershell = Path("scripts/install.ps1").read_text(encoding="utf-8")
86
+ shell_pin = re.search(r'^PYTHON_VERSION="([^"]+)"', shell, re.MULTILINE)
87
+ windows_pin = re.search(r'^\$PythonRequest = "([^"]+)"', powershell, re.MULTILINE)
88
+ assert shell_pin is not None and windows_pin is not None
89
+ assert shell_pin[1] == version
90
+ assert windows_pin[1] == f"cpython-{version}-windows-x86_64-none"
91
+ lock = tomllib.loads(Path("uv.lock").read_text(encoding="utf-8"))
92
+ assert lock["requires-python"] == requirement
93
+
94
+
21
95
  def _assert_required_test_matrix(workflow: dict, suite: str) -> None:
22
96
  job = workflow["jobs"][suite]
23
97
  assert job["name"] == f"{suite} (${{{{ matrix.os }}}})"
@@ -838,7 +838,7 @@ def test_install_sh_fresh_install_is_verified(posix_harness: PosixHarness) -> No
838
838
  assert any(
839
839
  call.startswith(
840
840
  "uv:tool install --force --refresh-package free-claude-code "
841
- "--python 3.14.0 free-claude-code"
841
+ "--python 3.14.7 free-claude-code"
842
842
  )
843
843
  for call in calls
844
844
  )
@@ -3186,7 +3186,7 @@ def test_install_ps1_fresh_install_is_verified(
3186
3186
  assert any(
3187
3187
  call.startswith(
3188
3188
  "uv:tool install --force --refresh-package free-claude-code "
3189
- "--python cpython-3.14.0-windows-x86_64-none "
3189
+ "--python cpython-3.14.7-windows-x86_64-none "
3190
3190
  "free-claude-code"
3191
3191
  )
3192
3192
  for call in calls
@@ -4237,7 +4237,7 @@ def test_installers_use_native_clients_and_single_python_selection() -> None:
4237
4237
  def test_install_ps1_uses_x64_python_for_windows_arm_compatibility() -> None:
4238
4238
  powershell = (_repo_root() / "scripts" / "install.ps1").read_text(encoding="utf-8")
4239
4239
 
4240
- assert '$PythonRequest = "cpython-3.14.0-windows-x86_64-none"' in powershell
4240
+ assert '$PythonRequest = "cpython-3.14.7-windows-x86_64-none"' in powershell
4241
4241
 
4242
4242
 
4243
4243
  @pytest.mark.parametrize("powershell", _powershells())
@@ -1,6 +1,6 @@
1
1
  version = 1
2
2
  revision = 3
3
- requires-python = ">=3.14.0"
3
+ requires-python = "==3.14.7"
4
4
 
5
5
  [[package]]
6
6
  name = "accelerate"
@@ -123,7 +123,7 @@ version = "4.15.1"
123
123
  source = { registry = "https://pypi.org/simple" }
124
124
  dependencies = [
125
125
  { name = "idna" },
126
- { name = "typing-extensions", marker = "python_full_version < '3.15'" },
126
+ { name = "typing-extensions" },
127
127
  ]
128
128
  sdist = { url = "https://files.pythonhosted.org/packages/a9/d2/f4d173e22df740bc37b1db102b386ba719b66e95b0f0d751f556b387e6d2/anyio-4.15.1.tar.gz", hash = "sha256:9f28306018cbd6d329e64a36d58256edff76dd996fe423bc957326e578b82a94", size = 276966, upload-time = "2026-09-05T10:42:39.44Z" }
129
129
  wheels = [
@@ -804,26 +804,6 @@ wheels = [
804
804
  { url = "https://files.pythonhosted.org/packages/a3/e9/b88bbf5b29970cb84172dc2c32aa3e5e579ceb94c808e81c826454138850/greenlet-3.5.5-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:d246c0db9a2513cd45f019ba178ea4d4d4705bd210ee465e2c15d76a1ab13874", size = 1637320, upload-time = "2026-08-10T14:15:09.317Z" },
805
805
  { url = "https://files.pythonhosted.org/packages/6d/8c/7631ed29cc6f0392f11830076e172ce4885e70b0bc2c1bce1731176d4b4e/greenlet-3.5.5-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:72507285b5caa1d17904a3f7c322ca780823a54170a0e04ec3f37bcc60d4db71", size = 1697412, upload-time = "2026-08-10T13:40:34.924Z" },
806
806
  { url = "https://files.pythonhosted.org/packages/da/0f/f7dd935f9c4cb1be49098770587f54d8a78518e55c89bce86c4fb4109057/greenlet-3.5.5-cp314-cp314t-win_amd64.whl", hash = "sha256:7805655781fb8f28a55d05fe57ed61f5f10f1892fb587673e3bb5264f28041f0", size = 331514, upload-time = "2026-08-10T13:29:20.611Z" },
807
- { url = "https://files.pythonhosted.org/packages/b7/e5/681b01f8fbc1b55232822f99e8f8afeb78a55a7c76a7bf9dbdc7ccb03a6d/greenlet-3.5.5-cp315-cp315-macosx_11_0_universal2.whl", hash = "sha256:c0db80fcd5b8aece93f66c64f78a786bbb6b96c5fe63ef5a5a4581ecf8bab206", size = 295975, upload-time = "2026-08-10T13:28:45.985Z" },
808
- { url = "https://files.pythonhosted.org/packages/11/f2/69b488cd9e7267bf4b0fe8cdebf25d8d6df680d21bdf41150d23e23d6652/greenlet-3.5.5-cp315-cp315-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:6b241c32f912ada659808d68e308c568baf577eebf757d15471472de0c18cfad", size = 666823, upload-time = "2026-08-10T14:14:40.222Z" },
809
- { url = "https://files.pythonhosted.org/packages/84/d4/d5bc2fdebbdda0c94555925ba79948b8395d75a7f6a36cc85dce5bab9f11/greenlet-3.5.5-cp315-cp315-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:ef6a08349401d8eaf3cb12688ac8557de95788556b8631ef17555a4a173022c0", size = 677613, upload-time = "2026-08-10T14:27:31.543Z" },
810
- { url = "https://files.pythonhosted.org/packages/65/53/4e13642efc4d7ad6554ecb2242a5be42666b2e1a067323e88dfc0124a04b/greenlet-3.5.5-cp315-cp315-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:37faa97daccb6d9f4c2141ce3118d023c3c5506864a7d8bdf726f665018c1f76", size = 681436, upload-time = "2026-08-10T14:30:14.839Z" },
811
- { url = "https://files.pythonhosted.org/packages/bd/93/542d8a3a90f3b35c6ad8bf7e56a03010287f2cafa289a5b7985b5207db39/greenlet-3.5.5-cp315-cp315-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:f2e3d061b8e13aec2f0441689b3c71b244a20e5d274a52cb0f7e31bd1d139552", size = 675930, upload-time = "2026-08-10T13:40:54.205Z" },
812
- { url = "https://files.pythonhosted.org/packages/cd/32/188447c9a468d6977d2989397226b0c6b65ab6f4cf943f931643328512fc/greenlet-3.5.5-cp315-cp315-manylinux_2_39_riscv64.whl", hash = "sha256:b18007dc2473a7942fd157366b55f01da6fed7ce85318591005b419e0a439474", size = 487404, upload-time = "2026-08-10T14:30:08.903Z" },
813
- { url = "https://files.pythonhosted.org/packages/52/b5/89c9f2e8460d71101037d47a1feed11928615a5edd42370be290e0657eeb/greenlet-3.5.5-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:9ab5f5b93655e77fe0d6c2dfd22b5eac751bb1f876d8ec21761b7c1fb9266007", size = 1633878, upload-time = "2026-08-10T14:15:10.693Z" },
814
- { url = "https://files.pythonhosted.org/packages/b8/60/297de93f3b02ac78a5e04d32bb8bbe3080f4a73d8ed95016561463b70618/greenlet-3.5.5-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:f0e5a21bd4452a88cf032fc43c4a5b307ab1380eacb63b5988f9c0317885e773", size = 1696597, upload-time = "2026-08-10T13:40:36.252Z" },
815
- { url = "https://files.pythonhosted.org/packages/18/25/54c6eaff4f337fb670215e89eb2d00d9499487b658e709d4b477be4a342e/greenlet-3.5.5-cp315-cp315-win_amd64.whl", hash = "sha256:469dbb0a78625642f4a626cfd0c6e8bccc0385b5e49189b6308bbe849ec88a8e", size = 327700, upload-time = "2026-08-10T13:28:06.752Z" },
816
- { url = "https://files.pythonhosted.org/packages/67/67/857e88a36301caa0e029870132c2478bd55d896630321432afab03a3115f/greenlet-3.5.5-cp315-cp315-win_arm64.whl", hash = "sha256:2d57406c3efd32d7a81e17a674314e8bd00792cdab49ea3228a49aa1bfb2e769", size = 311750, upload-time = "2026-08-10T13:34:08.815Z" },
817
- { url = "https://files.pythonhosted.org/packages/10/e2/3144c0a116067ac1e30457b0139a94d60d1d36a86e015de68e9ac87cb3bc/greenlet-3.5.5-cp315-cp315t-macosx_11_0_universal2.whl", hash = "sha256:68184dfcf50ccaa8e864770fe0633a7e27250ea9329f8192ef47ee9ecfd78e1c", size = 306387, upload-time = "2026-08-10T13:27:00.897Z" },
818
- { url = "https://files.pythonhosted.org/packages/5c/a1/cb4223a7e9b9f43b8807e8eb212358bfe2dfaa174a9ea2889eb1714dcba2/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9ec0dc0e59dc9c61af5c47348365ccbbd7addfafe0a93b00336ff3da2907bdc6", size = 676472, upload-time = "2026-08-10T14:14:41.417Z" },
819
- { url = "https://files.pythonhosted.org/packages/9e/cd/a154b4498e5d8f12ada291cfb3b8d596eadde2177f5bf09a9be699d2a446/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:e604f58e35833fc46ef20302bcb314dddbfd3fcf33a4f936216d51dd678d63ae", size = 684238, upload-time = "2026-08-10T14:27:32.946Z" },
820
- { url = "https://files.pythonhosted.org/packages/ce/f4/e450a68a152f819491d8c7df6a8254e761d87e6a78759268961f8c5bd4dd/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_s390x.manylinux_2_28_s390x.whl", hash = "sha256:2888a3a38bc5ee5bb6c438372197152e815837e4fab7ed7a1f86ef18ffd58ad1", size = 686022, upload-time = "2026-08-10T14:30:15.96Z" },
821
- { url = "https://files.pythonhosted.org/packages/bf/bb/b0031d260c2968a3c87deebc51d80c64e499377f993aafe06ee3b7488cc2/greenlet-3.5.5-cp315-cp315t-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:40239b5384f96da3963585cc6d7eaa9b56f8ae67e8d92cc82dd9e202fc847de3", size = 681246, upload-time = "2026-08-10T13:40:55.402Z" },
822
- { url = "https://files.pythonhosted.org/packages/18/23/17e63d6bf3b9c9b9dbea981b7f643a71f79603bdfb4f1c3a9cf353e22aed/greenlet-3.5.5-cp315-cp315t-manylinux_2_39_riscv64.whl", hash = "sha256:1e8d9391fe77f15649589a907cef972dbbd6352ef7ff7dc0492f658c0c26495f", size = 516951, upload-time = "2026-08-10T14:30:10.907Z" },
823
- { url = "https://files.pythonhosted.org/packages/9a/07/da554b71ab88e649da146e1065d86a48a5c5d92e50ab74ef41b504aa7f56/greenlet-3.5.5-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:a1eaccf5c3a1d3e46dead602c72e6836731e8e245c9de6a27764567b6b62d4c0", size = 1642735, upload-time = "2026-08-10T14:15:11.92Z" },
824
- { url = "https://files.pythonhosted.org/packages/78/76/26a3782a051677668af9d92beaa47cd87ba9dd5072f762961144a03dd4c6/greenlet-3.5.5-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:19e4e026fe20691f333b8eb1a3bc9625eceba8c3f9d62ec5a6f8581afbc6b5a5", size = 1700925, upload-time = "2026-08-10T13:40:37.656Z" },
825
- { url = "https://files.pythonhosted.org/packages/28/d9/fe7baf4190c2ae71f267efb9de21b3172bb35bc0ed1ef53dd6027d658e33/greenlet-3.5.5-cp315-cp315t-win_amd64.whl", hash = "sha256:712aee154f648bde84634654bb38bb78c69ac640c37a45c9effed800735049d8", size = 331829, upload-time = "2026-08-10T13:26:48.851Z" },
826
- { url = "https://files.pythonhosted.org/packages/df/af/419a4e383bd600858a9b67e9b280a60fdc383ee3f2fe5b6c0c1ef04e74d1/greenlet-3.5.5-cp315-cp315t-win_arm64.whl", hash = "sha256:7f049911ee81a16a03c33d5450d8d5867d27f596ca5fb201b86f4524e874468b", size = 315093, upload-time = "2026-08-10T13:29:34.949Z" },
827
807
  ]
828
808
 
829
809
  [[package]]
@@ -845,16 +825,6 @@ wheels = [
845
825
  { url = "https://files.pythonhosted.org/packages/de/c4/3e1c3d6155c16b8737cc31d5b477d6cf1fc7cdd10d58320cf0ec9b446f42/grpcio-1.84.0-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c5559b492007dc09b4de9b95dab05f0b5e53547aad230cf07e46c7dd017a3be5", size = 8123299, upload-time = "2026-09-14T06:58:54.332Z" },
846
826
  { url = "https://files.pythonhosted.org/packages/56/fe/f4864de5b815e5ba18858771f99381a398fac14117f89ef5291ed43d3c4e/grpcio-1.84.0-cp314-cp314-win32.whl", hash = "sha256:2c024da73b296f040b8360e60bd73a659b230093684a438da0e1260f34cc724e", size = 4562560, upload-time = "2026-09-14T06:58:56.894Z" },
847
827
  { url = "https://files.pythonhosted.org/packages/44/03/640811d4d8c84f5e603995c5a9bab725223aa472cad9ca4286c3bbf1c3e3/grpcio-1.84.0-cp314-cp314-win_amd64.whl", hash = "sha256:800b7e00d92553313c0463c200087930aa78678ec1d528193aeb50906f55989b", size = 5394092, upload-time = "2026-09-14T06:58:59.61Z" },
848
- { url = "https://files.pythonhosted.org/packages/4a/1a/9e3d2c9f005f680f03308fa894b1db91d4ab3f0fe65ff630c69561e91e95/grpcio-1.84.0-cp315-cp315-linux_armv7l.whl", hash = "sha256:47ecf0d9b81d981f07b61bd89eced9d2582f5eaacc3aaa36ad27f81aef70a27f", size = 6428252, upload-time = "2026-09-14T06:59:02.597Z" },
849
- { url = "https://files.pythonhosted.org/packages/77/34/0bc9f52ebf091311651eeab3a452fb557985604a3088cb5406f4d6df85d3/grpcio-1.84.0-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:61386101ecaa096b694d0dd278caf99a56aeec78440cc17e918eef0b50f2d567", size = 12359488, upload-time = "2026-09-14T06:59:05.646Z" },
850
- { url = "https://files.pythonhosted.org/packages/93/0e/c31052712f241cb6ecae9c226fabd519b7f8c64a7a40bac27e9ca0405b78/grpcio-1.84.0-cp315-cp315-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f6d178ba6dc8e82976c184b65fddde172d054c17237993a3e083efe4f134d55b", size = 7019339, upload-time = "2026-09-14T06:59:08.76Z" },
851
- { url = "https://files.pythonhosted.org/packages/55/b9/b9b33ea4f1eb4cad28833cade604febf357385b5ebb0c9c7562d020e167a/grpcio-1.84.0-cp315-cp315-manylinux2014_i686.manylinux_2_17_i686.whl", hash = "sha256:15bb76489e337fc492685c9758e2fd4d4ab516b901ad830dc5a91987decf00be", size = 7107974, upload-time = "2026-09-14T06:59:11.568Z" },
852
- { url = "https://files.pythonhosted.org/packages/0e/9e/799d4c45db91bbdcd8c54b3982932dbcf3d059f7ce67dca3e8540faa1ece/grpcio-1.84.0-cp315-cp315-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:82da34ae4f639c73ac46e521e00c0a49bf86f717b9fb1f405f133e98731e38dc", size = 7200036, upload-time = "2026-09-14T06:59:14.401Z" },
853
- { url = "https://files.pythonhosted.org/packages/45/dc/dcfdd13ada41aff9098f0c2c6f260eb7debbc88b84b7e5fcbd085165427d/grpcio-1.84.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:9b73836ba0e16fcbb57c31cf6cbc2907c8d8c790b83679df454b74bd15e0be04", size = 7742281, upload-time = "2026-09-14T06:59:17.348Z" },
854
- { url = "https://files.pythonhosted.org/packages/55/31/75eab2ec77b80804bc5e21cec99b57598e726fca6484cd3e8920a97639d5/grpcio-1.84.0-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:42959bd50dd660ffc3f2a9bec15a6da4f9aaa0dda555d59ff2d2e80b908456a8", size = 8113629, upload-time = "2026-09-14T06:59:20.584Z" },
855
- { url = "https://files.pythonhosted.org/packages/34/f0/fdcf6bdc1df9ca11679a1187bef8e6b81df31a2baae69497e17344f05ea3/grpcio-1.84.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:659728f20fc7a0933ed7b1945435e31014b97ab8a5a7edcbaa70da4794aeb191", size = 8152972, upload-time = "2026-09-14T06:59:24.523Z" },
856
- { url = "https://files.pythonhosted.org/packages/5c/cf/6720e720bfa80fcb1ace873f66724eb3c8b03bba2fa078a30c12cab3212e/grpcio-1.84.0-cp315-cp315-win32.whl", hash = "sha256:edb6f87fc60ff438557291501b3e16c7a77c3b01a52d782cf276dccc7c5dd89c", size = 4561981, upload-time = "2026-09-14T06:59:27.275Z" },
857
- { url = "https://files.pythonhosted.org/packages/7f/b9/69d8a709df225bc2e06e028e9465166b174c24b3da07cc72d9a5ddc63194/grpcio-1.84.0-cp315-cp315-win_amd64.whl", hash = "sha256:4119efa6519871719ad81f33bc95ab87857dcb1c5801f30a6e592f2c41164169", size = 5394757, upload-time = "2026-09-14T06:59:30.118Z" },
858
828
  ]
859
829
 
860
830
  [[package]]
@@ -1598,19 +1568,6 @@ wheels = [
1598
1568
  { url = "https://files.pythonhosted.org/packages/23/26/fcb2f6e37175b04f53570b59937867e2b80ee1685e744023153028fc14f9/pillow-12.3.0-cp314-cp314t-win32.whl", hash = "sha256:4b0a7fe987b14c31ebda6083f74f22b561fd3739bc0ac51e019622e3d72668c7", size = 6474125, upload-time = "2026-07-01T11:55:30.956Z" },
1599
1569
  { url = "https://files.pythonhosted.org/packages/90/de/3634abee5f1c9e13c56787b7d5517b0ba8d6de51700b95578cf338349c9f/pillow-12.3.0-cp314-cp314t-win_amd64.whl", hash = "sha256:962864dc93511324d51ddbb5b9f8731bf71675b93ca612a07441896f4688fb8c", size = 7242939, upload-time = "2026-07-01T11:55:34.044Z" },
1600
1570
  { url = "https://files.pythonhosted.org/packages/ce/2a/fd13f8eb24de5714a6eb444a3d67e2842c6c576e159a43793adf23051351/pillow-12.3.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0740a512dc522224c77d9aa5a8d70d8b7d73fb91f2c21125d8d025d3b8990e45", size = 2567506, upload-time = "2026-07-01T11:55:35.988Z" },
1601
- { url = "https://files.pythonhosted.org/packages/5d/dc/8fdce34ec725a33c81c6ba122b904d6b9024e50ea9ac7bede62fab54506c/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphoneos.whl", hash = "sha256:0feb2e9d6ad6c9e3c06effe9d00f3f1e618a6643273576b016f591e9315a7139", size = 4162063, upload-time = "2026-07-01T11:55:37.941Z" },
1602
- { url = "https://files.pythonhosted.org/packages/76/66/2044b9a63d3b84ff048228dfcb7cd9bf0df983e8470971bf7d4c57b693de/pillow-12.3.0-cp315-cp315-ios_13_0_arm64_iphonesimulator.whl", hash = "sha256:9e881fca225083806662a5c43d627d215f258ff43c890f831966c7d7ba9c7402", size = 4255549, upload-time = "2026-07-01T11:55:40.022Z" },
1603
- { url = "https://files.pythonhosted.org/packages/52/7e/1f67e6f4ece6b582ee4b539decbcc9f848dc245a93ed8cd7338bafef72f1/pillow-12.3.0-cp315-cp315-ios_13_0_x86_64_iphonesimulator.whl", hash = "sha256:4998562bf62a445225f22e07c896bb04b35b1b1f2eb6d760584c9c51d7a5f78c", size = 3696331, upload-time = "2026-07-01T11:55:41.98Z" },
1604
- { url = "https://files.pythonhosted.org/packages/12/40/d306fc2c8e4d45d7f175c77edca7063be7b86fe7fe6e68f4353bf71d808c/pillow-12.3.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:dc624f6bc473dacdf7ef7eb8678d0d08edf15cd94fad6ae5c7d6cc67a4e4902f", size = 5350370, upload-time = "2026-07-01T11:55:44.028Z" },
1605
- { url = "https://files.pythonhosted.org/packages/dd/44/668fb1437e8ce420f62d6106eb66e44a5971602a4d794615bdf79315d82d/pillow-12.3.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:71d6097b330eea8fd15097780c8e89cb1a8ce7838669f48c5bacd6f663dd4701", size = 4780147, upload-time = "2026-07-01T11:55:46.073Z" },
1606
- { url = "https://files.pythonhosted.org/packages/54/76/a09cc3ccc8d773a7283d34c38bec1708f9e3cc932093cbc4c5e71ac4060b/pillow-12.3.0-cp315-cp315-win32.whl", hash = "sha256:57b3d78c95ba9059768b10e28b813002261d3f3dfc55cc48b0c988f625175827", size = 6467375, upload-time = "2026-07-01T11:55:57.769Z" },
1607
- { url = "https://files.pythonhosted.org/packages/3e/03/1846c49ba3b1d5550392a4bbd06d6fb4578e1cd91a803198b5c90f5f7d53/pillow-12.3.0-cp315-cp315-win_amd64.whl", hash = "sha256:fa4ecea169a355be7a3ade2c783e2ed12f0e40d2c5621cda8b3297faf7fbb9f5", size = 7237048, upload-time = "2026-07-01T11:55:59.975Z" },
1608
- { url = "https://files.pythonhosted.org/packages/fb/bb/89f35dcc79610423f9f195504d7def7f0d1416a711541b42867e25fe3412/pillow-12.3.0-cp315-cp315-win_arm64.whl", hash = "sha256:877c3f311ff35410f690861c4409e7ccbf0cd2f878e50628a28e5a0bb689e658", size = 2566006, upload-time = "2026-07-01T11:56:02.143Z" },
1609
- { url = "https://files.pythonhosted.org/packages/30/88/707027ba09942dfa2c28759b5c222d769290a41c6d20ea60ec250801941f/pillow-12.3.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:e9871b1ffbfa9656b60aeee92ed5136a5742696006fa322b29ea3d8da0ecc9cf", size = 5352509, upload-time = "2026-07-01T11:56:04.2Z" },
1610
- { url = "https://files.pythonhosted.org/packages/b0/6d/00352fa25332c2569cd387851f568cc5a4b75a9adbfb37ac4fbce4c02eec/pillow-12.3.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:53aa02d20d10c3d814d536aa4e5ac9b84ca0ff5a88377963b085ad6822f93e64", size = 4783167, upload-time = "2026-07-01T11:56:06.631Z" },
1611
- { url = "https://files.pythonhosted.org/packages/18/f0/a5595c1e8c3ae44b9828cb2f0fa8155e5095ef04d6327b8f61cf44a3df85/pillow-12.3.0-cp315-cp315t-win32.whl", hash = "sha256:1657923d2d45afb66526e5b933e5b3052e6bdea196c90d3abb2424e18c77dae8", size = 6474384, upload-time = "2026-07-01T11:56:18.855Z" },
1612
- { url = "https://files.pythonhosted.org/packages/e4/04/62bcd9f844984c5938d3b05264a61d797a29d3e0812341a8204af70bbdee/pillow-12.3.0-cp315-cp315t-win_amd64.whl", hash = "sha256:8cd2f7bdda092d99c9fc2fb7391354f306d01443d22785d0cbfafa2e2c8bb418", size = 7243537, upload-time = "2026-07-01T11:56:21.214Z" },
1613
- { url = "https://files.pythonhosted.org/packages/3d/68/1f3066acedf37673694a7141381d8f811ae97f30d34413d236abe7d489f1/pillow-12.3.0-cp315-cp315t-win_arm64.whl", hash = "sha256:06ff022112bc9cbf83b60f8e028d94ad87b60621706487e65f673de61610ab59", size = 2567491, upload-time = "2026-07-01T11:56:23.506Z" },
1614
1571
  ]
1615
1572
 
1616
1573
  [[package]]
@@ -1887,8 +1844,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/b4/b1/729f7458a63758bd2
1887
1844
  wheels = [
1888
1845
  { url = "https://files.pythonhosted.org/packages/bd/8a/cfa4f56939d554dbb342ec6e5226a441e2f552bc2002a0ddf7705bb11bef/pyobjc_core-12.2.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:2b8fc0531c27277325e113ac00b8a72a82e6145f0a88175b9425d8de814ff69a", size = 6429289, upload-time = "2026-06-19T16:05:02.191Z" },
1889
1846
  { url = "https://files.pythonhosted.org/packages/42/74/446c89bc18103aaa4a00d1fb85ff8acace9a0dc3f362d9678ebf7571e275/pyobjc_core-12.2.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:9bef500f979e22d54f9da3aaebf6a48f873234b324858bd69256055a318955c7", size = 6690181, upload-time = "2026-06-19T16:05:06.201Z" },
1890
- { url = "https://files.pythonhosted.org/packages/99/c7/0121ee4c616af07ad2de8cd1a286f6978dc9a227eb58b7c2e875cb68a1df/pyobjc_core-12.2.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:047c226eeb58a2993ace5e8904e71cc9426ee20d064c617f8fbf32717d37093e", size = 6487078, upload-time = "2026-06-19T16:05:10.093Z" },
1891
- { url = "https://files.pythonhosted.org/packages/b5/a8/cb9fcc150f97d0bf22a2028f88b24cc35949beb1bcc7b8bc5c17d4401677/pyobjc_core-12.2.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:1188613805336270279570467e4455b74cb6c0f60913ac74c917ee1c37cfaecb", size = 6733064, upload-time = "2026-06-19T16:05:14.313Z" },
1892
1847
  ]
1893
1848
 
1894
1849
  [[package]]
@@ -1902,8 +1857,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/51/34/fbe38a204643aa4e1
1902
1857
  wheels = [
1903
1858
  { url = "https://files.pythonhosted.org/packages/ec/c8/b90baa8f3592eded79b4be98fb59d2b8dc16b62361e34292bd95806ebd9f/pyobjc_framework_cocoa-12.2.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:b386c324d64ae565c1f6b7dfb77be68f640a1c7c23caa6966ab661131f519561", size = 388357, upload-time = "2026-06-19T16:07:43.364Z" },
1904
1859
  { url = "https://files.pythonhosted.org/packages/98/d8/64a94651b9294702d55e748d94de30e25bc59d0784526be7643f4467eccd/pyobjc_framework_cocoa-12.2.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:a6c584e2af0813cb2f6103b184e632665a26f58c1bd5b08ffd6e95a19c617f7b", size = 392404, upload-time = "2026-06-19T16:07:44.955Z" },
1905
- { url = "https://files.pythonhosted.org/packages/5c/cc/26e8a7bf1f5e8caa38b7f80d486296f9fd3c97e71ad7e5444ef22e802758/pyobjc_framework_cocoa-12.2.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:b6023657b8d6cc049a21bd6b4752425f2f53c42f9f0b02d64c7608cc484bf103", size = 388589, upload-time = "2026-06-19T16:07:46.276Z" },
1906
- { url = "https://files.pythonhosted.org/packages/b6/f3/eedf743a303ea742b8e082afe3613fb4d6618bc1a48cf2568b004ce906f7/pyobjc_framework_cocoa-12.2.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:c685ccd8e266a07cf912a2c5a13b1f2eff2a868a1aff163b4801b4687bd425e1", size = 392691, upload-time = "2026-06-19T16:07:47.477Z" },
1907
1860
  ]
1908
1861
 
1909
1862
  [[package]]
@@ -1918,8 +1871,6 @@ sdist = { url = "https://files.pythonhosted.org/packages/3b/f6/2a8b84dbf1fe7c04d
1918
1871
  wheels = [
1919
1872
  { url = "https://files.pythonhosted.org/packages/8b/5d/85ffd9d433989205d572a50d625c63b29c05e0c5235a725f15ae1023672c/pyobjc_framework_quartz-12.2.1-cp314-cp314-macosx_10_15_universal2.whl", hash = "sha256:ceb56939c337b36d9d81185ade31f77dc52c85cf79bb16e53e9b32f54b6bb3f5", size = 219769, upload-time = "2026-06-19T16:16:08.814Z" },
1920
1873
  { url = "https://files.pythonhosted.org/packages/e2/d6/b917e4b63d72ea84a27121076f3033f23f6497c0e6ce8d304766c899897f/pyobjc_framework_quartz-12.2.1-cp314-cp314t-macosx_10_15_universal2.whl", hash = "sha256:8105c98b798f2bf81c05c54bddeeadbf62f0b5dfec13bd6e719dd2cdf7e1cddf", size = 224717, upload-time = "2026-06-19T16:16:10.215Z" },
1921
- { url = "https://files.pythonhosted.org/packages/04/e2/f3c1ed3228f7430ef5ade23db6f1fcbae99290f177ce5653348fd9e05f4d/pyobjc_framework_quartz-12.2.1-cp315-cp315-macosx_10_15_universal2.whl", hash = "sha256:bbc214f1a216b5d3651bc832d0ac4589f029f3f37cd6cbb370aac12a7c77942c", size = 219825, upload-time = "2026-06-19T16:16:11.433Z" },
1922
- { url = "https://files.pythonhosted.org/packages/66/2a/2c99a5ad2fe0a11600ea123b8e9a08ff138fcb2ad1e13e376f4bd4aa1d96/pyobjc_framework_quartz-12.2.1-cp315-cp315t-macosx_10_15_universal2.whl", hash = "sha256:ca61624a0b0e6286d8a0f97f47eb9011e4e81e9a339db436d48af527e7065bb1", size = 224770, upload-time = "2026-06-19T16:16:13.035Z" },
1923
1874
  ]
1924
1875
 
1925
1876
  [[package]]
@@ -2281,35 +2232,6 @@ wheels = [
2281
2232
  { url = "https://files.pythonhosted.org/packages/f3/d7/afb49b49d7f2be8b7ba1a9f0977fa5168003437b93086726f066544e8351/rpds_py-2026.5.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:62ae3853454fe9ef283a03c96c2d835d39e84b14643a9d62c82ef0fb87d702ca", size = 581916, upload-time = "2026-05-28T12:01:02.22Z" },
2282
2233
  { url = "https://files.pythonhosted.org/packages/25/d1/dbef8c1f8a10f07beb62b5f054e20099fd9924b3ec001b8f0b6ac7813a85/rpds_py-2026.5.1-cp314-cp314t-win32.whl", hash = "sha256:6c3d771a46ec18b12af06ce36243a9a80b07a5d0515236332d90863ca8bb326a", size = 207855, upload-time = "2026-05-28T12:01:03.821Z" },
2283
2234
  { url = "https://files.pythonhosted.org/packages/2a/72/bfa4e61ab8e7dc1c8adf397e05e6cbdd4239357bd72b248d3de662f23915/rpds_py-2026.5.1-cp314-cp314t-win_amd64.whl", hash = "sha256:c93c629be4636cf54337bd5f06c104d55e42ced54d681f6fe21ae510a65116f6", size = 225422, upload-time = "2026-05-28T12:01:05.194Z" },
2284
- { url = "https://files.pythonhosted.org/packages/27/3a/7b5da92b640f67b6717ccafc83cdd06bfa7ff2395c3685c68922bb54d703/rpds_py-2026.5.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:3574b55c604b8f75dacb007136508bbc0db406e626301778096a133327e7f2fb", size = 349576, upload-time = "2026-05-28T12:01:06.722Z" },
2285
- { url = "https://files.pythonhosted.org/packages/d7/8a/2aafd7ad355a1bd48ca76e2262b74b15e6432b5a1efe150efd4d779cd55d/rpds_py-2026.5.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:94068eb3ae6d43f5a786b7db96a406a34e6d5c24489feef32fd6e8946ea7b291", size = 343640, upload-time = "2026-05-28T12:01:08.441Z" },
2286
- { url = "https://files.pythonhosted.org/packages/f7/7d/6c9523c1abbe840a1b7fba3c516d48e1d3487cc80fea4366c4071cf56784/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3a5b10e8ce894825f380a8f1b6444cf73c294dfea62afbb2d13e3a9e630cec1", size = 375322, upload-time = "2026-05-28T12:01:09.934Z" },
2287
- { url = "https://files.pythonhosted.org/packages/5a/5d/0b7b03fb1dc509321f01de3149784ab773e34c8573022029af8076afcb9c/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc09f82e63d4bcd58149572f857a431bae851dc747e313c3b5bdf7abb907fda8", size = 379066, upload-time = "2026-05-28T12:01:11.48Z" },
2288
- { url = "https://files.pythonhosted.org/packages/d7/e2/8ef6012999ebf1cb1c22f876d9ce5e63d960fd4631d2af3202d3f480aa25/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e10464d17df3b582745c25cec695cb9558bca2cb6ddb631aee1787fc72c767b2", size = 494586, upload-time = "2026-05-28T12:01:13.051Z" },
2289
- { url = "https://files.pythonhosted.org/packages/80/af/1eeb029bec67582c226b7809172207cd005073af4ebd906e65ff494f4983/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ba05adbf15d994c38ec0b7ab32e858e5110c21e9009a00a86545fd220f84e038", size = 388415, upload-time = "2026-05-28T12:01:14.631Z" },
2290
- { url = "https://files.pythonhosted.org/packages/18/23/ffbe10711c4d766c1cab0557d6906c074f795814863c67b351355d29354a/rpds_py-2026.5.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77c004fdc7b891967106f78ddfd7b076bfe6813c6139c6fff6aed3bcaa960b26", size = 372427, upload-time = "2026-05-28T12:01:16.153Z" },
2291
- { url = "https://files.pythonhosted.org/packages/bd/3a/30ba4a6ad457e5b070c18d742a33fb77d8d922b565cc881f8a5313d63bfe/rpds_py-2026.5.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:83bcf894486c9d78dd290d3c0124ff6dd8875d3025e2090a8ec49fcc37c55fdd", size = 383615, upload-time = "2026-05-28T12:01:17.809Z" },
2292
- { url = "https://files.pythonhosted.org/packages/d3/69/62e242b53ce39c0814bd24e1a6e6eba6c92be716277745f317f9540a2e7b/rpds_py-2026.5.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3df104083952a0e0c6f10de33e440eabe98fb6317d23e1a58c68f6df08d01b9", size = 402786, upload-time = "2026-05-28T12:01:19.419Z" },
2293
- { url = "https://files.pythonhosted.org/packages/38/c1/a770b9c186928a1ed0f7e6d7ae50e7f3950ed23e3f9e366dbc8e38cb55de/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:980450826cf22e133c57e0835070bdd0dd3f73b9b708c3ce223def2cb9469e14", size = 551583, upload-time = "2026-05-28T12:01:21.013Z" },
2294
- { url = "https://files.pythonhosted.org/packages/21/7c/68e8579b95375b70d2a963103c42e705856cdb98569258bd807f4423891c/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:205dde846f24332ab0c1188699a043b8d165b79bb84529ce272c45048ff6be01", size = 616941, upload-time = "2026-05-28T12:01:22.548Z" },
2295
- { url = "https://files.pythonhosted.org/packages/70/a1/a6135aed5730ff03ab957182259987ac11e55fb392a28dc6f0592048a280/rpds_py-2026.5.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3966b82dd563176396df030f3dd52a6e54cb69b718e95e78bd555ed3d1e0185d", size = 578349, upload-time = "2026-05-28T12:01:24.118Z" },
2296
- { url = "https://files.pythonhosted.org/packages/09/6e/f24201a76a84e6c49d0bdfdfcb735210e21701e9b21c5bfc0ba497dd62f6/rpds_py-2026.5.1-cp315-cp315-win32.whl", hash = "sha256:7818f8d0a415be74d2be3590b0a1c1f463a642f4d0217e7d10602dceef5b79aa", size = 209922, upload-time = "2026-05-28T12:01:25.522Z" },
2297
- { url = "https://files.pythonhosted.org/packages/9e/e4/966bc240bb0485fc265278f6de44d05834bf0b3618886e0b22e33d54c49a/rpds_py-2026.5.1-cp315-cp315-win_amd64.whl", hash = "sha256:b3cc20c0d800af78fd0fac68086e28c1856cec51ea528bb81ea851aa40d39325", size = 226003, upload-time = "2026-05-28T12:01:27.062Z" },
2298
- { url = "https://files.pythonhosted.org/packages/5c/5c/a15a59269cd5e74472734516c73795c15eccfc841b3d4b0228c3f53f19d0/rpds_py-2026.5.1-cp315-cp315-win_arm64.whl", hash = "sha256:3609e9939a8a76cd904cf98a3f1f13b5dc7e150adeaee89e0ea09652ea213e16", size = 221245, upload-time = "2026-05-28T12:01:28.51Z" },
2299
- { url = "https://files.pythonhosted.org/packages/e0/22/135ce03804e179a71ceb13be095deda4a279bc88f7a6b8fa161c5ad44e12/rpds_py-2026.5.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:5d333a7127d4b307601ac37792bee01bb95c867cbfacf21b6375b804d6bbd723", size = 352015, upload-time = "2026-05-28T12:01:30.214Z" },
2300
- { url = "https://files.pythonhosted.org/packages/3b/5f/f1f6d2652eb9d848f6eb369d8db83a2da6249bb49ad2c2a48f45d54538d3/rpds_py-2026.5.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:b5f077b44a4f7808520f66dae234988d867deb9aed9be5da057ce9ba831b2a41", size = 345016, upload-time = "2026-05-28T12:01:31.656Z" },
2301
- { url = "https://files.pythonhosted.org/packages/88/66/b74182775691ea2290c99e52ac8d5db844e56fbec90ce421f107658c8314/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:55d8f9b7b78c9538fc9e04e82ec0e888ff0c3cffcfad152c77e57cd09351a98a", size = 374775, upload-time = "2026-05-28T12:01:33.136Z" },
2302
- { url = "https://files.pythonhosted.org/packages/ff/8f/15e5a61d9f0a43902d36561d4f07cae6ae9f4716be825159fd72717f33af/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e3a8ae58895ac107ed934a6bf51e5846f95c53b9b940c2c6d310838fd5846358", size = 380270, upload-time = "2026-05-28T12:01:34.574Z" },
2303
- { url = "https://files.pythonhosted.org/packages/02/c3/f859b12763a80540cdf2af0f15b19904cf756a71d7bdd3f82ff3e5b1bbf9/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0957cf3c2b8632ec7aaebffebea8005b353cc2a237b6e2ae3c2cac0820704cfb", size = 495285, upload-time = "2026-05-28T12:01:36.127Z" },
2304
- { url = "https://files.pythonhosted.org/packages/1c/c7/ff27c2ac8411d30b03b1829fd88cae8dad1a4d0da48dd25e57c4038042e6/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c396c1304de421050b3681ea70f371874b54d41b0151e96109758144c231e30b", size = 389581, upload-time = "2026-05-28T12:01:37.635Z" },
2305
- { url = "https://files.pythonhosted.org/packages/6e/67/fe92ee32a6cc05c77228a2f8b1762e7124f386ec20ff83d0757b762d58d0/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aad1bff7f666b9598e573815affd666aac6a13a585dde336f843e33350c7fadc", size = 376041, upload-time = "2026-05-28T12:01:39.307Z" },
2306
- { url = "https://files.pythonhosted.org/packages/f8/91/b4d6685c27aba55bd82f25b278be8237038117d05f9659a6213ad3408130/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:656a042550878f12d45752452d47094b7cfe5ad1e9d7b87b5a22ad3ae5ff8015", size = 383946, upload-time = "2026-05-28T12:01:41.043Z" },
2307
- { url = "https://files.pythonhosted.org/packages/bd/79/2c1d832a53c8e0f8e98fc970ec257b950fecd4f62be2ab7182b500a0cbc8/rpds_py-2026.5.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c4bd4f70294737b5206a3e8e30ccadbf8a60301831c8ea23eec5dbeea1ecfa", size = 405526, upload-time = "2026-05-28T12:01:43.032Z" },
2308
- { url = "https://files.pythonhosted.org/packages/78/c4/c98117b03c6a8581ab2c2dfccfe9a5ad82bd8128a3c28b46a6ad2d97c393/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:43bca78665423cabae77146f2fe7ce55272b6c8d55d82cca83effd42c7e13972", size = 551165, upload-time = "2026-05-28T12:01:44.648Z" },
2309
- { url = "https://files.pythonhosted.org/packages/3b/c1/bc479ca069200af730881b1bd525e3114b2b391a351509fcb1b772f28086/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:42d0f20e85e549c870749d0e247f0c10d318a45b7e9676d575d2dcb04a1b2e66", size = 618778, upload-time = "2026-05-28T12:01:46.337Z" },
2310
- { url = "https://files.pythonhosted.org/packages/77/65/38ab2f90df44c2febfb63cc10ced40763d9b4bc94d173e734528663fe7f5/rpds_py-2026.5.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:b1be5c35683684d5331b93600c210e8367c254683d8a6df6bd21bd2da3a334fb", size = 581839, upload-time = "2026-05-28T12:01:48.109Z" },
2311
- { url = "https://files.pythonhosted.org/packages/15/2d/ce1f605fe036aadd460e5822e578c6c7ec3a860936cca37d6e0f299daa77/rpds_py-2026.5.1-cp315-cp315t-win32.whl", hash = "sha256:75808f6c38ce7749bb68cc2770161aae5045e6c6f6781a9782e74b93304399df", size = 207866, upload-time = "2026-05-28T12:01:49.648Z" },
2312
- { url = "https://files.pythonhosted.org/packages/79/cb/966040123eb102371559746908ef2c9471f4d43e17ec9a645a2258dab64b/rpds_py-2026.5.1-cp315-cp315t-win_amd64.whl", hash = "sha256:90bd6630002a1c7f09e7843dd79f0d24f3d2897cc25a753480917865d14f15b3", size = 225441, upload-time = "2026-05-28T12:01:51.408Z" },
2313
2235
  ]
2314
2236
 
2315
2237
  [[package]]
@@ -2613,20 +2535,6 @@ wheels = [
2613
2535
  { url = "https://files.pythonhosted.org/packages/29/ce/af8964c38bc8226dd8950305b7a255fa33345d5572f78af7275a313d28e0/tiktoken-0.14.0-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:2fc834fbe3f6a0736905c36ab709537e6840dbd63b982dc9e0216ae7d305ba1a", size = 1250932, upload-time = "2026-08-17T19:49:19.28Z" },
2614
2536
  { url = "https://files.pythonhosted.org/packages/1d/4b/323631116fc986d9cc5bbeb2b8223c7c85e61a8bb94ea5ab4951023b149b/tiktoken-0.14.0-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:ca4db6ff5c5bf600f9b7761a0070ed44dfe5797a76bd432fb978bc480ef40c58", size = 1315190, upload-time = "2026-08-17T19:49:20.467Z" },
2615
2537
  { url = "https://files.pythonhosted.org/packages/18/8b/ba48a73729c9270989b36f37ab2ed5525e52690d715097c9fa791aaa5d05/tiktoken-0.14.0-cp314-cp314t-win_amd64.whl", hash = "sha256:7aab286a020660a039097912a088236b985d18a3090d73f136c4413d29d37ca0", size = 987717, upload-time = "2026-08-17T19:49:21.704Z" },
2616
- { url = "https://files.pythonhosted.org/packages/1d/10/b73b7e319179e0f60b32475f783b044f9cece872c53b6662664e9084b0d0/tiktoken-0.14.0-cp315-cp315-macosx_10_15_x86_64.whl", hash = "sha256:14b47e3674f2624803a8acc8fb367b7e24fc53055f9df3296482fe9a3a34a232", size = 1096280, upload-time = "2026-08-17T19:49:22.779Z" },
2617
- { url = "https://files.pythonhosted.org/packages/c2/6b/09999a9bf1d559670d1680e8f8e419ac0e2c5f6aac82e9bfdf70f260b30a/tiktoken-0.14.0-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:19d643d701fdaa70e5b9c7f8f96abcaffe77ca5e482a3a1a7dde46feb4284695", size = 1040433, upload-time = "2026-08-17T19:49:23.998Z" },
2618
- { url = "https://files.pythonhosted.org/packages/cd/7b/8537be0836f3df99b2a636b44399bfa43cd757f2b8b4097dacb794cf24a7/tiktoken-0.14.0-cp315-cp315-manylinux_2_28_aarch64.whl", hash = "sha256:e4ddf863b59347deaa92302dcd90e5eb003cdc9be06ec2b692c38d1bdd9efd49", size = 1186989, upload-time = "2026-08-17T19:49:25.021Z" },
2619
- { url = "https://files.pythonhosted.org/packages/7c/9d/f9c56d7a943a4468abf9ef37661bb9b8e0cd3aa8aa87368c7146cc3f3222/tiktoken-0.14.0-cp315-cp315-manylinux_2_28_x86_64.whl", hash = "sha256:60c47ca69ddda0dea8256fffd12e1b86f4b59734a20e4a70c61f63cc5f021df4", size = 1204615, upload-time = "2026-08-17T19:49:26.37Z" },
2620
- { url = "https://files.pythonhosted.org/packages/4b/d2/98a38579db25c4a8a84e31dd95d9072ec5f21f7e70de591da0412e29b25b/tiktoken-0.14.0-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:728303a072163130c5b477b1f20d6211895569c1d5302c24ffc93a3009160871", size = 1251828, upload-time = "2026-08-17T19:49:27.423Z" },
2621
- { url = "https://files.pythonhosted.org/packages/0c/83/467be424746c039c5493c0f4102feab16b9b48eb6f5c089b2a2438e3cde2/tiktoken-0.14.0-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:3c5349c9f916283bba32bec8af69b763e4faa304dc004d0eaaea66a3cf004c1f", size = 1316260, upload-time = "2026-08-17T19:49:29.101Z" },
2622
- { url = "https://files.pythonhosted.org/packages/02/ee/ddf46ca78e371f5890e96b6e7d089a85b3536432be219851eb0481786ca8/tiktoken-0.14.0-cp315-cp315-win_amd64.whl", hash = "sha256:1b6e4adcfd285c44502aed51df98aaaca4f0fea028165dbf8a9e857b9f98d8ea", size = 988230, upload-time = "2026-08-17T19:49:30.246Z" },
2623
- { url = "https://files.pythonhosted.org/packages/2a/00/5162e90c851a28da18ed382d34898b79a8022548e5619a64e14c03ce7c3d/tiktoken-0.14.0-cp315-cp315t-macosx_10_15_x86_64.whl", hash = "sha256:11d8211b290855d2721334ff17dd9b3a17bfb26872be01f25d73612ef7ece890", size = 1096186, upload-time = "2026-08-17T19:49:31.656Z" },
2624
- { url = "https://files.pythonhosted.org/packages/65/97/a5a7bfccf25b1bb65e82bae8edff11ac3c9c041c374b7b4a823d60c38133/tiktoken-0.14.0-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:d0781223705199b289faa59601bb9c2441712d4c600dd13c43d8fd6a33d22cd5", size = 1039947, upload-time = "2026-08-17T19:49:32.848Z" },
2625
- { url = "https://files.pythonhosted.org/packages/fb/ba/ef427fc638f1439181c5e12dd26b70e881861f89c007aa7e5b36300f8342/tiktoken-0.14.0-cp315-cp315t-manylinux_2_28_aarch64.whl", hash = "sha256:2ea70afba6b9eddbf22c165142e5f0a2ad7aa36a452873c48b57bb2aeb8492ae", size = 1186997, upload-time = "2026-08-17T19:49:34.121Z" },
2626
- { url = "https://files.pythonhosted.org/packages/3e/88/2f3f85a968cdc514152129af0a060ebcccb067005a2f29b0d5ef3c838514/tiktoken-0.14.0-cp315-cp315t-manylinux_2_28_x86_64.whl", hash = "sha256:78571efc311c30b73f31eb949a921d6dac39a5d9dc42d1cfa8f8db157b3447b1", size = 1205211, upload-time = "2026-08-17T19:49:35.284Z" },
2627
- { url = "https://files.pythonhosted.org/packages/4e/f6/80760e98a08e6649d2d68afb6035af713121dfb615acce8c4f73810ec438/tiktoken-0.14.0-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:86f66c85e796f5d05d5c4a60ec1d40cbfebc47a32464053528c797163fa9ab89", size = 1251479, upload-time = "2026-08-17T19:49:36.419Z" },
2628
- { url = "https://files.pythonhosted.org/packages/c5/84/50966fb6918a0fb9b32721277e5342bf729a2d74350074d662fbedf9772e/tiktoken-0.14.0-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:149d97453c4c98c04b081d64a85e635921269b532710d6faf81e9e82b790e7d3", size = 1316673, upload-time = "2026-08-17T19:49:37.756Z" },
2629
- { url = "https://files.pythonhosted.org/packages/35/5e/9b01afd037bfa22a0033963fa091e0f75b6fb15cd85bffb42ff86e697323/tiktoken-0.14.0-cp315-cp315t-win_amd64.whl", hash = "sha256:561e7580f84a79859af1ef6f676968e9030fcc3fe195700b15235bca64f009c9", size = 987929, upload-time = "2026-08-17T19:49:38.947Z" },
2630
2538
  ]
2631
2539
 
2632
2540
  [[package]]
@@ -2670,7 +2578,7 @@ name = "torch"
2670
2578
  version = "2.14.0+cu130"
2671
2579
  source = { registry = "https://download.pytorch.org/whl/cu130" }
2672
2580
  dependencies = [
2673
- { name = "cuda-bindings", marker = "python_full_version < '3.15' and sys_platform == 'linux'" },
2581
+ { name = "cuda-bindings", marker = "sys_platform == 'linux'" },
2674
2582
  { name = "cuda-toolkit", extra = ["cublas", "cudart", "cufft", "cufile", "cupti", "curand", "cusolver", "cusparse", "nvjitlink", "nvrtc", "nvtx"], marker = "sys_platform == 'linux'" },
2675
2583
  { name = "filelock" },
2676
2584
  { name = "fsspec" },
@@ -2682,7 +2590,7 @@ dependencies = [
2682
2590
  { name = "nvidia-nvshmem-cu13", marker = "sys_platform == 'linux'" },
2683
2591
  { name = "setuptools" },
2684
2592
  { name = "sympy" },
2685
- { name = "triton", marker = "python_full_version < '3.15' and sys_platform == 'linux'" },
2593
+ { name = "triton", marker = "sys_platform == 'linux'" },
2686
2594
  { name = "typing-extensions" },
2687
2595
  ]
2688
2596
  wheels = [
@@ -2692,12 +2600,6 @@ wheels = [
2692
2600
  { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp314-cp314t-manylinux_2_28_aarch64.whl", hash = "sha256:6c6f734dc5bd126316a9e6320cff848b0e21afc1702118dd504fa45512c0d2d5", upload-time = "2026-09-02T18:55:47Z" },
2693
2601
  { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp314-cp314t-manylinux_2_28_x86_64.whl", hash = "sha256:9a5dfdca3375869ae89803ae79d44531b706af9352a77066b8bdf134de0e09d4", upload-time = "2026-09-02T18:56:03Z" },
2694
2602
  { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp314-cp314t-win_amd64.whl", hash = "sha256:7db94ac0c41f1e0c10efd532ab43150c681edfc823cd5332c307644573403840", upload-time = "2026-09-02T18:56:39Z" },
2695
- { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp315-cp315-manylinux_2_28_aarch64.whl", hash = "sha256:b82c5857f2c397a285027b65093dc8c89c7b45a69535786a69dae462bf67fd07", upload-time = "2026-09-02T18:57:13Z" },
2696
- { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp315-cp315-manylinux_2_28_x86_64.whl", hash = "sha256:9e91cca5c03701158d783fb91fc1c5651469f466a3a3bcb4df5bcbff36cfd371", upload-time = "2026-09-02T18:57:26Z" },
2697
- { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp315-cp315-win_amd64.whl", hash = "sha256:fca94b3181939ca5bdfc1f7d108a79888dec750f3683f922bda40dc4e78d6eaa", upload-time = "2026-09-02T18:57:59Z" },
2698
- { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp315-cp315t-manylinux_2_28_aarch64.whl", hash = "sha256:16171adcc338c0827fbc28e448b96071638f4733743ee144b9692ec43477d821", upload-time = "2026-09-02T18:58:34Z" },
2699
- { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp315-cp315t-manylinux_2_28_x86_64.whl", hash = "sha256:9e68cd6d619325acf1d94fc0c0a819e7a19dd95d226744be20acf7b7aff3ac8a", upload-time = "2026-09-02T18:58:46Z" },
2700
- { url = "https://download-r2.pytorch.org/whl/cu130/torch-2.14.0%2Bcu130-cp315-cp315t-win_amd64.whl", hash = "sha256:c9d9ebc6c552c9e1b1779838b3c236f22e34fac2bcd441c1db8c939dd15f6fff", upload-time = "2026-09-02T18:59:19Z" },
2701
2603
  ]
2702
2604
 
2703
2605
  [[package]]
@@ -1 +0,0 @@
1
- 3.14.0