stkit 17.1.0__tar.gz → 17.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (245) hide show
  1. {stkit-17.1.0 → stkit-17.2.0}/CHANGELOG.md +29 -0
  2. {stkit-17.1.0 → stkit-17.2.0}/PKG-INFO +13 -9
  3. {stkit-17.1.0 → stkit-17.2.0}/README.md +4 -4
  4. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/uv.lock +192 -5
  5. {stkit-17.1.0 → stkit-17.2.0}/pyproject.toml +11 -5
  6. {stkit-17.1.0 → stkit-17.2.0}/stk/__init__.py +1 -1
  7. {stkit-17.1.0 → stkit-17.2.0}/stk/app.py +6 -0
  8. {stkit-17.1.0 → stkit-17.2.0}/stk/checks.py +21 -6
  9. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/__init__.py +2 -1
  10. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/agent.py +11 -3
  11. stkit-17.2.0/stk/cli/copy_rules.py +147 -0
  12. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/develop.py +27 -2
  13. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/doctor.py +6 -13
  14. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/main.py +1 -1
  15. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/reports.py +21 -18
  16. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/smoke.py +20 -5
  17. stkit-17.2.0/stk/files/__init__.py +23 -0
  18. stkit-17.2.0/stk/files/models.py +34 -0
  19. stkit-17.2.0/stk/files/store.py +58 -0
  20. stkit-17.2.0/stk/files/views.py +154 -0
  21. stkit-17.2.0/stk/mcp/__init__.py +53 -0
  22. stkit-17.2.0/stk/mcp/models.py +65 -0
  23. stkit-17.2.0/stk/mcp/server.py +202 -0
  24. stkit-17.2.0/stk/mcp/views.py +122 -0
  25. stkit-17.2.0/stk/migrations/versions/stk_0002_jobs.py +37 -0
  26. stkit-17.2.0/stk/migrations/versions/stk_0003_files.py +42 -0
  27. stkit-17.2.0/stk/migrations/versions/stk_0004_notifications.py +43 -0
  28. stkit-17.2.0/stk/migrations/versions/stk_0005_mcp_tokens.py +42 -0
  29. stkit-17.2.0/stk/notification/__init__.py +29 -0
  30. stkit-17.2.0/stk/notification/models.py +33 -0
  31. stkit-17.2.0/stk/notification/views.py +78 -0
  32. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/CLAUDE.md +2 -1
  33. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/claude/skills/stk-api/SKILL.md +1 -1
  34. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/claude/skills/stk-blueprint/SKILL.md +2 -2
  35. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/claude/skills/stk-deploy/SKILL.md +1 -1
  36. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/claude/skills/stk-lessons/SKILL.md +1 -1
  37. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/claude/skills/stk-migrate/SKILL.md +1 -1
  38. stkit-17.2.0/stk/static/VERSIONS.txt +4 -0
  39. {stkit-17.1.0 → stkit-17.2.0}/stk/static/css/layout.css +0 -9
  40. stkit-17.2.0/stk/static/css/vuetify.min.css +6 -0
  41. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.animals.woff2 +0 -0
  42. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.arrows-1.woff2 +0 -0
  43. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.arrows-2.woff2 +0 -0
  44. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.badges.woff2 +0 -0
  45. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.brand-1.woff2 +0 -0
  46. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.brand-2.woff2 +0 -0
  47. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.buildings.woff2 +0 -0
  48. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.charts.woff2 +0 -0
  49. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.communication.woff2 +0 -0
  50. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.computers.woff2 +0 -0
  51. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.core.woff2 +0 -0
  52. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.currencies.woff2 +0 -0
  53. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.database.woff2 +0 -0
  54. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.design-1.woff2 +0 -0
  55. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.design-2.woff2 +0 -0
  56. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.development.woff2 +0 -0
  57. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.devices-1.woff2 +0 -0
  58. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.devices-2.woff2 +0 -0
  59. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.document.woff2 +0 -0
  60. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.e-commerce.woff2 +0 -0
  61. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.electrical.woff2 +0 -0
  62. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.extensions.woff2 +0 -0
  63. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.food.woff2 +0 -0
  64. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.games.woff2 +0 -0
  65. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.gender.woff2 +0 -0
  66. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.gestures.woff2 +0 -0
  67. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.health.woff2 +0 -0
  68. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.laundry.woff2 +0 -0
  69. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.letters.woff2 +0 -0
  70. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.logic.woff2 +0 -0
  71. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.map.woff2 +0 -0
  72. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.math.woff2 +0 -0
  73. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.media.woff2 +0 -0
  74. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.mood.woff2 +0 -0
  75. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.nature.woff2 +0 -0
  76. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.numbers.woff2 +0 -0
  77. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.photography.woff2 +0 -0
  78. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.shapes.woff2 +0 -0
  79. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.sport.woff2 +0 -0
  80. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.symbols.woff2 +0 -0
  81. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.system-1.woff2 +0 -0
  82. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.system-2.woff2 +0 -0
  83. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.system-3.woff2 +0 -0
  84. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.text.woff2 +0 -0
  85. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.vehicles.woff2 +0 -0
  86. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.version-control.woff2 +0 -0
  87. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.weather.woff2 +0 -0
  88. stkit-17.2.0/stk/static/icons/fonts/tabler-icons.zodiac.woff2 +0 -0
  89. stkit-17.2.0/stk/static/icons/tabler-icons.min.css +4 -0
  90. stkit-17.2.0/stk/static/js/axios.min.js +5 -0
  91. stkit-17.2.0/stk/static/js/components/NotificationDropdown.js +129 -0
  92. stkit-17.2.0/stk/static/js/vue.min.js +14 -0
  93. stkit-17.2.0/stk/static/js/vuetify.min.js +3886 -0
  94. stkit-17.2.0/stk/tasks/__init__.py +231 -0
  95. stkit-17.2.0/stk/tasks/models.py +43 -0
  96. stkit-17.2.0/stk/templates/cms/jobs.html +138 -0
  97. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/dashboard.html +3 -3
  98. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/index.html +1 -1
  99. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/layout.html +8 -35
  100. stkit-17.2.0/stk/templates/mcp/tokens.html +164 -0
  101. {stkit-17.1.0 → stkit-17.2.0}/stk/user/views.py +28 -0
  102. stkit-17.2.0/stk/utils/netguard.py +146 -0
  103. {stkit-17.1.0 → stkit-17.2.0}/tests/test_agent_operability.py +14 -0
  104. {stkit-17.1.0 → stkit-17.2.0}/tests/test_app_index.py +9 -2
  105. stkit-17.2.0/tests/test_copy_rules.py +112 -0
  106. stkit-17.2.0/tests/test_files.py +190 -0
  107. stkit-17.2.0/tests/test_jobs.py +215 -0
  108. stkit-17.2.0/tests/test_mcp.py +309 -0
  109. stkit-17.2.0/tests/test_netguard.py +201 -0
  110. stkit-17.2.0/tests/test_notifications.py +132 -0
  111. {stkit-17.1.0 → stkit-17.2.0}/tests/test_production_security.py +30 -5
  112. {stkit-17.1.0 → stkit-17.2.0}/tests/test_scaffolder.py +5 -1
  113. stkit-17.1.0/stk/static/VERSIONS.txt +0 -4
  114. stkit-17.1.0/stk/static/css/vuetify.min.css +0 -6
  115. stkit-17.1.0/stk/static/icons/fonts/tabler-icons.woff2 +0 -0
  116. stkit-17.1.0/stk/static/icons/tabler-icons.min.css +0 -4
  117. stkit-17.1.0/stk/static/js/axios.min.js +0 -5
  118. stkit-17.1.0/stk/static/js/components/NotificationDropdown.js +0 -156
  119. stkit-17.1.0/stk/static/js/vue.min.js +0 -13
  120. stkit-17.1.0/stk/static/js/vuetify.min.js +0 -3148
  121. stkit-17.1.0/stk/tasks/__init__.py +0 -78
  122. {stkit-17.1.0 → stkit-17.2.0}/.gitignore +0 -0
  123. {stkit-17.1.0 → stkit-17.2.0}/LICENSE +0 -0
  124. {stkit-17.1.0 → stkit-17.2.0}/SECURITY.md +0 -0
  125. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/.env-sample +0 -0
  126. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/.gitignore +0 -0
  127. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/README.md +0 -0
  128. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/__init__.py +0 -0
  129. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/app.py +0 -0
  130. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/migrations/364232ae77d5_add_note.py +0 -0
  131. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/note/__init__.py +0 -0
  132. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/note/models.py +0 -0
  133. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/note/templates/note/index.html +0 -0
  134. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/note/views.py +0 -0
  135. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/settings.py +0 -0
  136. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/minimal/templates/layout.html +0 -0
  137. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/pyproject.toml +0 -0
  138. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/tests/__init__.py +0 -0
  139. {stkit-17.1.0 → stkit-17.2.0}/examples/minimal/tests/test_app.py +0 -0
  140. {stkit-17.1.0 → stkit-17.2.0}/stk/__main__.py +0 -0
  141. {stkit-17.1.0 → stkit-17.2.0}/stk/agent_login.py +0 -0
  142. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/base.py +0 -0
  143. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/database.py +0 -0
  144. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/users.py +0 -0
  145. {stkit-17.1.0 → stkit-17.2.0}/stk/cli/watch.py +0 -0
  146. {stkit-17.1.0 → stkit-17.2.0}/stk/extensions.py +0 -0
  147. {stkit-17.1.0 → stkit-17.2.0}/stk/migrations/__init__.py +0 -0
  148. {stkit-17.1.0 → stkit-17.2.0}/stk/migrations/env.py +0 -0
  149. {stkit-17.1.0 → stkit-17.2.0}/stk/migrations/script.py.mako +0 -0
  150. {stkit-17.1.0 → stkit-17.2.0}/stk/migrations/versions/stk_0001_initial_schema.py +0 -0
  151. {stkit-17.1.0 → stkit-17.2.0}/stk/portal/views.py +0 -0
  152. {stkit-17.1.0 → stkit-17.2.0}/stk/public/__init__.py +0 -0
  153. {stkit-17.1.0 → stkit-17.2.0}/stk/public/models.py +0 -0
  154. {stkit-17.1.0 → stkit-17.2.0}/stk/public/views.py +0 -0
  155. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/__init__.py +0 -0
  156. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/Dockerfile +0 -0
  157. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/README.md +0 -0
  158. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/__app__/__init__.py +0 -0
  159. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/__app__/app.py +0 -0
  160. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/__app__/settings.py +0 -0
  161. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/docker-compose.yml +0 -0
  162. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/dockerignore +0 -0
  163. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/env-sample +0 -0
  164. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/github/workflows/checks.yml +0 -0
  165. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/gitignore +0 -0
  166. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/nginx/nginx.conf +0 -0
  167. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/nginx/stk.conf +0 -0
  168. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/postgres/init-db.sh +0 -0
  169. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/pyproject.toml +0 -0
  170. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/tests/__init__.py +0 -0
  171. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/app/tests/test_app.py +0 -0
  172. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/generator.py +0 -0
  173. {stkit-17.1.0 → stkit-17.2.0}/stk/scaffold/templates.py +0 -0
  174. {stkit-17.1.0 → stkit-17.2.0}/stk/security.py +0 -0
  175. {stkit-17.1.0 → stkit-17.2.0}/stk/settings.py +0 -0
  176. {stkit-17.1.0 → stkit-17.2.0}/stk/shell.py +0 -0
  177. {stkit-17.1.0 → stkit-17.2.0}/stk/static/css/app.css +0 -0
  178. {stkit-17.1.0 → stkit-17.2.0}/stk/static/img/auth-bg.webp +0 -0
  179. {stkit-17.1.0 → stkit-17.2.0}/stk/static/img/favicon.ico +0 -0
  180. {stkit-17.1.0 → stkit-17.2.0}/stk/static/img/stk.svg +0 -0
  181. {stkit-17.1.0 → stkit-17.2.0}/stk/static/js/components/ThemeSwitcher.js +0 -0
  182. {stkit-17.1.0 → stkit-17.2.0}/stk/static/js/components/TransitionExpand.js +0 -0
  183. {stkit-17.1.0 → stkit-17.2.0}/stk/static/js/components/VerticalNavGroup.js +0 -0
  184. {stkit-17.1.0 → stkit-17.2.0}/stk/static/js/components/VerticalNavLink.js +0 -0
  185. {stkit-17.1.0 → stkit-17.2.0}/stk/static/js/components/VerticalNavSectionTitle.js +0 -0
  186. {stkit-17.1.0 → stkit-17.2.0}/stk/static/js/components/index.js +0 -0
  187. {stkit-17.1.0 → stkit-17.2.0}/stk/static/js/config.js +0 -0
  188. {stkit-17.1.0 → stkit-17.2.0}/stk/static/robots.txt +0 -0
  189. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/401.html +0 -0
  190. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/404.html +0 -0
  191. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/500.html +0 -0
  192. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/_brand.html +0 -0
  193. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/auth_layout.html +0 -0
  194. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/cms/activities.html +0 -0
  195. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/cms/roles.html +0 -0
  196. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/cms/users.html +0 -0
  197. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/login-layout.html +0 -0
  198. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/_macros.html +0 -0
  199. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/_messages.html +0 -0
  200. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/change_password.html +0 -0
  201. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/confirm_email.html +0 -0
  202. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/change_notice.html +0 -0
  203. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/change_notice.txt +0 -0
  204. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/confirmation_instructions.html +0 -0
  205. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/confirmation_instructions.txt +0 -0
  206. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/login_instructions.html +0 -0
  207. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/login_instructions.txt +0 -0
  208. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/reset_instructions.html +0 -0
  209. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/reset_instructions.txt +0 -0
  210. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/reset_notice.html +0 -0
  211. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/reset_notice.txt +0 -0
  212. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/welcome.html +0 -0
  213. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/email/welcome.txt +0 -0
  214. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/forgot_password.html +0 -0
  215. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/login_user.html +0 -0
  216. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/mf_recovery.html +0 -0
  217. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/mf_recovery_codes.html +0 -0
  218. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/register_user.html +0 -0
  219. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/reset_password.html +0 -0
  220. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/send_confirmation.html +0 -0
  221. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/send_login.html +0 -0
  222. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/two_factor_select.html +0 -0
  223. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/two_factor_setup.html +0 -0
  224. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/two_factor_verify_code.html +0 -0
  225. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/wan_register.html +0 -0
  226. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/wan_signin.html +0 -0
  227. {stkit-17.1.0 → stkit-17.2.0}/stk/templates/security/wan_verify.html +0 -0
  228. {stkit-17.1.0 → stkit-17.2.0}/stk/user/__init__.py +0 -0
  229. {stkit-17.1.0 → stkit-17.2.0}/stk/user/forms.py +0 -0
  230. {stkit-17.1.0 → stkit-17.2.0}/stk/user/models.py +0 -0
  231. {stkit-17.1.0 → stkit-17.2.0}/stk/utils/email.py +0 -0
  232. {stkit-17.1.0 → stkit-17.2.0}/stk/utils/ratelimit.py +0 -0
  233. {stkit-17.1.0 → stkit-17.2.0}/stk/websocket.py +0 -0
  234. {stkit-17.1.0 → stkit-17.2.0}/tests/test_branding.py +0 -0
  235. {stkit-17.1.0 → stkit-17.2.0}/tests/test_builder_ux.py +0 -0
  236. {stkit-17.1.0 → stkit-17.2.0}/tests/test_cli.py +0 -0
  237. {stkit-17.1.0 → stkit-17.2.0}/tests/test_composition.py +0 -0
  238. {stkit-17.1.0 → stkit-17.2.0}/tests/test_csrf_exempt.py +0 -0
  239. {stkit-17.1.0 → stkit-17.2.0}/tests/test_error_handler.py +0 -0
  240. {stkit-17.1.0 → stkit-17.2.0}/tests/test_migration_drift.py +0 -0
  241. {stkit-17.1.0 → stkit-17.2.0}/tests/test_revision_imports.py +0 -0
  242. {stkit-17.1.0 → stkit-17.2.0}/tests/test_security_compatibility.py +0 -0
  243. {stkit-17.1.0 → stkit-17.2.0}/tests/test_shell.py +0 -0
  244. {stkit-17.1.0 → stkit-17.2.0}/tests/test_smoke_pages.py +0 -0
  245. {stkit-17.1.0 → stkit-17.2.0}/tests/test_static_versioning.py +0 -0
@@ -1,5 +1,34 @@
1
1
  # Changelog
2
2
 
3
+ ## v17.2.0 (2026-10-31)
4
+
5
+ Run `uv run stk db upgrade`: four new core tables (`stk_job`, `stk_file`, `stk_notification`, `mcp_token`).
6
+
7
+ - Durable jobs that survive a restart. Register an async function with `@job`, queue it with `await enqueue(name, **payload)`, and run `uv run stk worker`. A job's writes commit together with its `done` mark; a failure rolls back, keeps the traceback, and retries after 30 and 60 seconds before staying `failed`. Each claim holds a lease of the worker's `--timeout` plus a minute, so a crashed worker's job is requeued and a worker that lost its claim discards its writes. Admins see jobs at `/jobs/` (Background Work).
8
+ - In-app notifications. `await notify(user_id, title, link=..., kind=..., body=...)` stores one and pushes it over the user's open sockets; the layout's bell shows the unread count and marks items read. `link` must be a same-origin path. JSON endpoints under `/api/notifications` list, count and mark the current user's notifications (Background Work).
9
+ - File uploads, opt-in: add `stk.files` to the app's extensions. `POST /files/` stores bytes once by their sha256 under `STK_UPLOAD_DIR`, detects the type from the bytes, enforces `STK_UPLOAD_MAX_BYTES` and `STK_UPLOAD_TYPES`, and makes WebP thumbnails for images. Downloads go to the uploader or an admin unless the app sets `app.file_access` (JSON APIs).
10
+ - Agent tools over MCP. Register a function with `@tool(name, description, schema, role=...)` from `stk.mcp`, and agents call it at `/mcp` with a personal token created at `/tokens/`. Tokens are stored as a hash, expire after 90 days, are limited to the user's current roles on every call, and stop working when the user's password changes. Every call is logged as an activity without its arguments. No OAuth sign-in yet: clients send the token as a header (JSON APIs).
11
+ - `fetch` from `stk.utils.netguard` fetches a URL a user supplied without reaching internal addresses: it refuses private, loopback, link-local, metadata and other non-public addresses, pins the checked IP against DNS rebinding, re-checks every redirect, and drops `Authorization` and `Cookie` when a redirect changes origin (JSON APIs).
12
+ - `stk smoke` fails on screens that work but read badly: uuids, raw hex ids, snake_case, raw scores, "1 items", `undefined`/`null`/`NaN`/`[object Object]`, and rows repeated three or more times. Allow deliberate text with `STK_SMOKE_COPY_ALLOW` (Build Loop).
13
+ - `stk verify`, `stk doctor` and `stk smoke` keep every failure's reason; `stk verify --json` lists each sanity check with its status and detail (Build Loop).
14
+ - New dependency: `jsonschema`, which validates MCP tool arguments.
15
+
16
+ ### Upgrade considerations
17
+
18
+ - The layout's bell is now backed by stk. `layoutMixin` no longer has `notifications`, `handleNotificationClick`, `markNotificationRead`, `markAllNotificationsRead` or `removeNotification`. A page that used them, or that broadcasts `{"type": "notification", ...}` itself, calls `notify()` instead. Layouts that do not extend `stk/layout.html` are unaffected.
19
+ - stk now has a built-in `worker` command. An app command named `worker` is shadowed by it; rename the app's command.
20
+ - `enqueue()` and `notify()` commit on their own session, so a request that later rolls back still keeps the job or notification. Call them after your own commit.
21
+
22
+ ## v17.1.1 (2026-10-28)
23
+
24
+ No migration required.
25
+
26
+ - The docs move to https://docs.stkit.dev, matching the PyPI name. An app made by an earlier `stk init` points its `CLAUDE.md` and `.claude/skills/` at docs.stk.dev: replace it with docs.stkit.dev.
27
+ - stkit's PyPI page links to the docs, source and changelog.
28
+ - Vendored Vue 3.5.44, Vuetify 4.3.1, axios 1.21.0 (fixes GHSA-m8m8-qj5v-23w3, GHSA-x97p-jq2g-jp4f and ten other axios advisories) and Tabler icons 3.50.0. Tabler now ships its font as unicode-range subsets in `icons/fonts/`, so the browser loads only the groups a page uses; `icons/fonts/tabler-icons.woff2` is gone. An app that preloads that file links `icons/fonts/tabler-icons.core.woff2` instead (Frontend).
29
+ - stkit's dependency minimums no longer allow versions with known vulnerabilities: cryptography 50.0.0, aiosmtplib 5.1.2, orjson 3.11.6, python-dotenv 1.2.2. An app that pins an older one gets a resolver conflict; raise its pin.
30
+ - CI audits the locked dependencies for known vulnerabilities with `uv audit`.
31
+
3
32
  ## v17.1.0 (2026-10-25)
4
33
 
5
34
  No migration required.
@@ -1,28 +1,32 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: stkit
3
- Version: 17.1.0
3
+ Version: 17.2.0
4
4
  Summary: An async Quart framework optimized for AI-assisted development workflows
5
+ Project-URL: Documentation, https://docs.stkit.dev
6
+ Project-URL: Source, https://github.com/level09/stk
7
+ Project-URL: Changelog, https://github.com/level09/stk/blob/master/CHANGELOG.md
5
8
  Author-email: Level09 <hello@level09.com>
6
9
  License: MIT
7
10
  License-File: LICENSE
8
11
  Requires-Python: >=3.11
9
- Requires-Dist: aiosmtplib>=5.0.0
12
+ Requires-Dist: aiosmtplib>=5.1.2
10
13
  Requires-Dist: aiosqlite>=0.20.0
11
14
  Requires-Dist: alembic>=1.16.0
12
15
  Requires-Dist: authlib<2,>=1.9.1
13
16
  Requires-Dist: bcrypt>=4.3.0
14
17
  Requires-Dist: blinker>=1.9.0
15
18
  Requires-Dist: click>=8.3.1
16
- Requires-Dist: cryptography>=45.0.5
19
+ Requires-Dist: cryptography>=50.0.0
17
20
  Requires-Dist: email-validator>=2.2.0
18
21
  Requires-Dist: httpx2>=2.16.0
19
22
  Requires-Dist: jinja2>=3.1.6
20
23
  Requires-Dist: joserfc<2,>=1.7.1
24
+ Requires-Dist: jsonschema>=4.25
21
25
  Requires-Dist: libpass>=1.9.0
22
- Requires-Dist: orjson>=3.10.18
26
+ Requires-Dist: orjson>=3.11.6
23
27
  Requires-Dist: pillow>=13.0.0
24
28
  Requires-Dist: psycopg2-binary>=2.9.10
25
- Requires-Dist: python-dotenv>=1.1.1
29
+ Requires-Dist: python-dotenv>=1.2.2
26
30
  Requires-Dist: qrcode>=8.2
27
31
  Requires-Dist: quart-security<3,>=2.0.3
28
32
  Requires-Dist: quart-session>=3.0.0
@@ -66,8 +70,8 @@ Description-Content-Type: text/markdown
66
70
  </p>
67
71
 
68
72
  <p align="center">
69
- <a href="https://docs.stk.dev">Docs</a> &middot;
70
- <a href="https://docs.stk.dev/llms.txt">llms.txt</a> &middot;
73
+ <a href="https://docs.stkit.dev">Docs</a> &middot;
74
+ <a href="https://docs.stkit.dev/llms.txt">llms.txt</a> &middot;
71
75
  <a href="https://github.com/level09/stk/wiki">Tutorials</a>
72
76
  </p>
73
77
 
@@ -126,8 +130,8 @@ stk ships what actually matters:
126
130
 
127
131
  ## Documentation
128
132
 
129
- Everything else lives at [docs.stk.dev](https://docs.stk.dev), and in this repo at `docs/src/content/docs/`:
130
- [quick start](https://docs.stk.dev/getting-started/), [build loop](https://docs.stk.dev/build-loop/), [models](https://docs.stk.dev/models/), [frontend](https://docs.stk.dev/frontend/), [authentication](https://docs.stk.dev/authentication/), [configuration](https://docs.stk.dev/configuration/), [CLI reference](https://docs.stk.dev/cli/), [deployment](https://docs.stk.dev/deployment/), and [working with agents](https://docs.stk.dev/ai-coding/). Upgrade notes are in `CHANGELOG.md`; the production security contract is `SECURITY.md`.
133
+ Everything else lives at [docs.stkit.dev](https://docs.stkit.dev), and in this repo at `docs/src/content/docs/`:
134
+ [quick start](https://docs.stkit.dev/getting-started/), [build loop](https://docs.stkit.dev/build-loop/), [models](https://docs.stkit.dev/models/), [frontend](https://docs.stkit.dev/frontend/), [authentication](https://docs.stkit.dev/authentication/), [configuration](https://docs.stkit.dev/configuration/), [CLI reference](https://docs.stkit.dev/cli/), [deployment](https://docs.stkit.dev/deployment/), and [working with agents](https://docs.stkit.dev/ai-coding/). Upgrade notes are in `CHANGELOG.md`; the production security contract is `SECURITY.md`.
131
135
 
132
136
  ## License
133
137
 
@@ -20,8 +20,8 @@
20
20
  </p>
21
21
 
22
22
  <p align="center">
23
- <a href="https://docs.stk.dev">Docs</a> &middot;
24
- <a href="https://docs.stk.dev/llms.txt">llms.txt</a> &middot;
23
+ <a href="https://docs.stkit.dev">Docs</a> &middot;
24
+ <a href="https://docs.stkit.dev/llms.txt">llms.txt</a> &middot;
25
25
  <a href="https://github.com/level09/stk/wiki">Tutorials</a>
26
26
  </p>
27
27
 
@@ -80,8 +80,8 @@ stk ships what actually matters:
80
80
 
81
81
  ## Documentation
82
82
 
83
- Everything else lives at [docs.stk.dev](https://docs.stk.dev), and in this repo at `docs/src/content/docs/`:
84
- [quick start](https://docs.stk.dev/getting-started/), [build loop](https://docs.stk.dev/build-loop/), [models](https://docs.stk.dev/models/), [frontend](https://docs.stk.dev/frontend/), [authentication](https://docs.stk.dev/authentication/), [configuration](https://docs.stk.dev/configuration/), [CLI reference](https://docs.stk.dev/cli/), [deployment](https://docs.stk.dev/deployment/), and [working with agents](https://docs.stk.dev/ai-coding/). Upgrade notes are in `CHANGELOG.md`; the production security contract is `SECURITY.md`.
83
+ Everything else lives at [docs.stkit.dev](https://docs.stkit.dev), and in this repo at `docs/src/content/docs/`:
84
+ [quick start](https://docs.stkit.dev/getting-started/), [build loop](https://docs.stkit.dev/build-loop/), [models](https://docs.stkit.dev/models/), [frontend](https://docs.stkit.dev/frontend/), [authentication](https://docs.stkit.dev/authentication/), [configuration](https://docs.stkit.dev/configuration/), [CLI reference](https://docs.stkit.dev/cli/), [deployment](https://docs.stkit.dev/deployment/), and [working with agents](https://docs.stkit.dev/ai-coding/). Upgrade notes are in `CHANGELOG.md`; the production security contract is `SECURITY.md`.
85
85
 
86
86
  ## License
87
87
 
@@ -213,6 +213,15 @@ wheels = [
213
213
  { url = "https://files.pythonhosted.org/packages/38/11/ec5f7f306dd361aa9558f002cbb6acfa1e9ba32fa59b8f53135fbdfa14f1/asyncpg-0.32.0-cp315-cp315t-win_arm64.whl", hash = "sha256:3bbf08c08e31f43be858255614518e78cdfb343571e557e818e9fe736334f4c8", size = 622767, upload-time = "2026-10-06T20:32:24.64Z" },
214
214
  ]
215
215
 
216
+ [[package]]
217
+ name = "attrs"
218
+ version = "26.1.0"
219
+ source = { registry = "https://pypi.org/simple" }
220
+ sdist = { url = "https://files.pythonhosted.org/packages/9a/8e/82a0fe20a541c03148528be8cac2408564a6c9a0cc7e9171802bc1d26985/attrs-26.1.0.tar.gz", hash = "sha256:d03ceb89cb322a8fd706d4fb91940737b6642aa36998fe130a9bc96c985eff32", size = 952055, upload-time = "2026-03-19T14:22:25.026Z" }
221
+ wheels = [
222
+ { url = "https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl", hash = "sha256:c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309", size = 67548, upload-time = "2026-03-19T14:22:23.645Z" },
223
+ ]
224
+
216
225
  [[package]]
217
226
  name = "authlib"
218
227
  version = "1.9.1"
@@ -854,6 +863,33 @@ wheels = [
854
863
  { url = "https://files.pythonhosted.org/packages/df/9f/934db284aa22f37af59708e382903860d4b81329c137b1b0ed2745daeb65/joserfc-1.7.7-py3-none-any.whl", hash = "sha256:06979cfbab78bc802f14c0358f32969826cc26720e13cb38926ffdc86bc0cb2c", size = 71758, upload-time = "2026-10-19T00:30:28.498Z" },
855
864
  ]
856
865
 
866
+ [[package]]
867
+ name = "jsonschema"
868
+ version = "4.26.0"
869
+ source = { registry = "https://pypi.org/simple" }
870
+ dependencies = [
871
+ { name = "attrs" },
872
+ { name = "jsonschema-specifications" },
873
+ { name = "referencing" },
874
+ { name = "rpds-py" },
875
+ ]
876
+ sdist = { url = "https://files.pythonhosted.org/packages/b3/fc/e067678238fa451312d4c62bf6e6cf5ec56375422aee02f9cb5f909b3047/jsonschema-4.26.0.tar.gz", hash = "sha256:0c26707e2efad8aa1bfc5b7ce170f3fccc2e4918ff85989ba9ffa9facb2be326", size = 366583, upload-time = "2026-01-07T13:41:07.246Z" }
877
+ wheels = [
878
+ { url = "https://files.pythonhosted.org/packages/69/90/f63fb5873511e014207a475e2bb4e8b2e570d655b00ac19a9a0ca0a385ee/jsonschema-4.26.0-py3-none-any.whl", hash = "sha256:d489f15263b8d200f8387e64b4c3a75f06629559fb73deb8fdfb525f2dab50ce", size = 90630, upload-time = "2026-01-07T13:41:05.306Z" },
879
+ ]
880
+
881
+ [[package]]
882
+ name = "jsonschema-specifications"
883
+ version = "2025.9.1"
884
+ source = { registry = "https://pypi.org/simple" }
885
+ dependencies = [
886
+ { name = "referencing" },
887
+ ]
888
+ sdist = { url = "https://files.pythonhosted.org/packages/19/74/a633ee74eb36c44aa6d1095e7cc5569bebf04342ee146178e2d36600708b/jsonschema_specifications-2025.9.1.tar.gz", hash = "sha256:b540987f239e745613c7a9176f3edb72b832a4ac465cf02712288397832b5e8d", size = 32855, upload-time = "2025-09-08T01:34:59.186Z" }
889
+ wheels = [
890
+ { url = "https://files.pythonhosted.org/packages/41/45/1a4ed80516f02155c51f51e8cedb3c1902296743db0bbc66608a0db2814f/jsonschema_specifications-2025.9.1-py3-none-any.whl", hash = "sha256:98802fee3a11ee76ecaca44429fda8a41bff98b00a0f2838151b113f210cc6fe", size = 18437, upload-time = "2025-09-08T01:34:57.871Z" },
891
+ ]
892
+
857
893
  [[package]]
858
894
  name = "libpass"
859
895
  version = "1.9.4"
@@ -1664,6 +1700,20 @@ wheels = [
1664
1700
  { url = "https://files.pythonhosted.org/packages/66/9d/c5731f6e3608663d4d3656fd8d3aecee8b509c3082818f5a13eae925baea/redis-8.1.0-py3-none-any.whl", hash = "sha256:a4fe1aac3d3b3cc791d4b3d5931c5a956045dc951ee74d1c913ee3ac4d2ee9fb", size = 560618, upload-time = "2026-07-30T08:50:58.497Z" },
1665
1701
  ]
1666
1702
 
1703
+ [[package]]
1704
+ name = "referencing"
1705
+ version = "0.37.0"
1706
+ source = { registry = "https://pypi.org/simple" }
1707
+ dependencies = [
1708
+ { name = "attrs" },
1709
+ { name = "rpds-py" },
1710
+ { name = "typing-extensions", marker = "python_full_version < '3.13'" },
1711
+ ]
1712
+ sdist = { url = "https://files.pythonhosted.org/packages/22/f5/df4e9027acead3ecc63e50fe1e36aca1523e1719559c499951bb4b53188f/referencing-0.37.0.tar.gz", hash = "sha256:44aefc3142c5b842538163acb373e24cce6632bd54bdb01b21ad5863489f50d8", size = 78036, upload-time = "2025-10-13T15:30:48.871Z" }
1713
+ wheels = [
1714
+ { url = "https://files.pythonhosted.org/packages/2c/58/ca301544e1fa93ed4f80d724bf5b194f6e4b945841c5bfd555878eea9fcb/referencing-0.37.0-py3-none-any.whl", hash = "sha256:381329a9f99628c9069361716891d34ad94af76e461dcb0335825aecc7692231", size = 26766, upload-time = "2025-10-13T15:30:47.625Z" },
1715
+ ]
1716
+
1667
1717
  [[package]]
1668
1718
  name = "rich"
1669
1719
  version = "15.0.0"
@@ -1677,6 +1727,141 @@ wheels = [
1677
1727
  { url = "https://files.pythonhosted.org/packages/82/3b/64d4899d73f91ba49a8c18a8ff3f0ea8f1c1d75481760df8c68ef5235bf5/rich-15.0.0-py3-none-any.whl", hash = "sha256:33bd4ef74232fb73fe9279a257718407f169c09b78a87ad3d296f548e27de0bb", size = 310654, upload-time = "2026-04-12T08:24:02.83Z" },
1678
1728
  ]
1679
1729
 
1730
+ [[package]]
1731
+ name = "rpds-py"
1732
+ version = "2026.9.1"
1733
+ source = { registry = "https://pypi.org/simple" }
1734
+ sdist = { url = "https://files.pythonhosted.org/packages/42/68/3bd46b8a5e01d3c2ebdf9c5e9497912e3fe0cde02bac21a7130ca866e403/rpds_py-2026.9.1.tar.gz", hash = "sha256:4793ef7f78268b124b73fa933440f01d258bbae01de9fa53e9080c9ab0425a12", size = 63948, upload-time = "2026-10-04T16:32:36.469Z" }
1735
+ wheels = [
1736
+ { url = "https://files.pythonhosted.org/packages/f5/6d/ddb8dfcf41892ba9c672d27988592c038d30db61708230313831b6780a1b/rpds_py-2026.9.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:2711d29b653b3bce48a63d18b9c6b53274669e6d6c4094dddeb4d9a0e45128b2", size = 344947, upload-time = "2026-10-04T16:28:55.207Z" },
1737
+ { url = "https://files.pythonhosted.org/packages/9e/b2/632c3d034961149eff606e3e357547620a9ab37b849ae5815f67838753fd/rpds_py-2026.9.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3231c4c0e521dafa5be0c9f114ee2c2ad46650836f2d72caa86801950c3e7044", size = 346770, upload-time = "2026-10-04T16:28:56.884Z" },
1738
+ { url = "https://files.pythonhosted.org/packages/6d/45/4df346410bb873d03ec60c3b891d1fceb8cabde1971d29844bbb625cc296/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e01b3c878c8641913e688edd1b3f08658c6783d29cf6b826bd3c0d1ae7a1ffaa", size = 377795, upload-time = "2026-10-04T16:28:58.193Z" },
1739
+ { url = "https://files.pythonhosted.org/packages/ba/b8/a70f302207e4f29f873c01a986fcac5def49b9c8224328cef1ad7da6b7a9/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e524c7874ac72884d28e16dd5b8d839fd09e0fe76b020d3fbca23212a7b8c52", size = 383137, upload-time = "2026-10-04T16:28:59.411Z" },
1740
+ { url = "https://files.pythonhosted.org/packages/13/e3/3aa28a48a01169d0e20728bf0e5ebbea3ae2774285b40853ae49b3ef332a/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:761fdae6728ceb99ab182fad2f0cc1e262f610834dc891aea1d1a2a2e634776f", size = 496789, upload-time = "2026-10-04T16:29:01.011Z" },
1741
+ { url = "https://files.pythonhosted.org/packages/3e/a7/414e8d088602d66ad6f47c65bf07fe5090992a8574cdd4571c1a83b647ed/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b723eb406dec5bc9ec516c73ab9c3239a3284e017f7eb89ee2b3258bd504fb7", size = 395929, upload-time = "2026-10-04T16:29:02.465Z" },
1742
+ { url = "https://files.pythonhosted.org/packages/2d/5c/aac3b960fd55d37b49f77c0eebbe043eaf36762ebd48e7b46951e59c1c05/rpds_py-2026.9.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:136a1c3fe4402b7008bc81cb62ee538481795b61a7e83df88dff3b3f02b726ff", size = 375426, upload-time = "2026-10-04T16:29:03.944Z" },
1743
+ { url = "https://files.pythonhosted.org/packages/d3/80/77987a41c40be7202a78d9aed4a650bfb05792237cfd3b9e22638d990fe5/rpds_py-2026.9.1-cp311-cp311-manylinux_2_31_riscv64.whl", hash = "sha256:839dde845559254f34885267c6878f60d61d5205180226d976fe488d45fa128e", size = 381497, upload-time = "2026-10-04T16:29:05.308Z" },
1744
+ { url = "https://files.pythonhosted.org/packages/b8/d0/640b02eb1ecd71a913c1178b6235287b31006266bca9a26862e80e497b54/rpds_py-2026.9.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:56cd8b3f77d7b6812f533b662186a1f28316931166ddc00fb893b1b0db7e9888", size = 405740, upload-time = "2026-10-04T16:29:06.578Z" },
1745
+ { url = "https://files.pythonhosted.org/packages/3e/8c/d034195d45d215625a23f2ae85dbbdb86a49a93a51272061c97c80b9d316/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:074a4d198bc34d9a8ea425114fc3ded6d11ec01f6a314a8db67454a5152d8834", size = 555850, upload-time = "2026-10-04T16:29:08.115Z" },
1746
+ { url = "https://files.pythonhosted.org/packages/de/f8/532f1addfc86207bc3cf23749638bb0d457bce891595012ed8a08d0543b8/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:6beb738155fe8ab8091afdfa5a3226b21c2b1593f1e50ebb90eb25b44dbc0391", size = 618661, upload-time = "2026-10-04T16:29:09.554Z" },
1747
+ { url = "https://files.pythonhosted.org/packages/50/5b/b0f2c9833a36a5b1f6ac5cb0e635fabacf713266f46ceefba2102da0bf51/rpds_py-2026.9.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:57492a550a1d88d29d003247e5f78dd8cf04a701fac0e4c8db8745a6d2504e0a", size = 583530, upload-time = "2026-10-04T16:29:11.072Z" },
1748
+ { url = "https://files.pythonhosted.org/packages/bf/20/464ed4b98d3c8c6a334f3b5e24d3886de04b05658a95fc40a37e0e6e4775/rpds_py-2026.9.1-cp311-cp311-win32.whl", hash = "sha256:d95a354e02393eada6d7351184671aced9d4cce109dabf927cb7aa99624352a1", size = 208125, upload-time = "2026-10-04T16:29:12.408Z" },
1749
+ { url = "https://files.pythonhosted.org/packages/df/c9/384a9b62f8cd89c8e3e609b8c9052c140e8c01d807261e0517c904b8bf29/rpds_py-2026.9.1-cp311-cp311-win_amd64.whl", hash = "sha256:ce4d4f52e2a4324396caddbd45a97d8d7be5f42edd25d2355282a9c34f9b2f7f", size = 226045, upload-time = "2026-10-04T16:29:13.751Z" },
1750
+ { url = "https://files.pythonhosted.org/packages/4f/3b/0a691f0dcb2301fa9c736346da2d0d4991778373283301c5c12b8f952f3d/rpds_py-2026.9.1-cp311-cp311-win_arm64.whl", hash = "sha256:fdcd198979b4ecffcc1beba366a7fbcf4eb41243691a82fe52ceb0b902f09c12", size = 222636, upload-time = "2026-10-04T16:29:14.989Z" },
1751
+ { url = "https://files.pythonhosted.org/packages/5d/34/a828586ea3329fbb50895b50e9cf98ca3d924a9f41a0b26d443bff1b3794/rpds_py-2026.9.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:50906f5aea24b5a865cbd0a589698288631d9f3a54c3a937c83aefa95a0d14af", size = 346822, upload-time = "2026-10-04T16:29:16.258Z" },
1752
+ { url = "https://files.pythonhosted.org/packages/90/81/ac6a0d064982251856ce009c9e1dd51a34110b3c055aa7d1aad18b4899a3/rpds_py-2026.9.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e21c1429e205828ea886a2293a4a2c8e01f4c25d9893ca330e97a6cf73f52e7b", size = 341380, upload-time = "2026-10-04T16:29:17.706Z" },
1753
+ { url = "https://files.pythonhosted.org/packages/42/ff/bf7d54f362748fd6a49277b9d6531c394074110fedf50ad791ec59133fbb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693b2728bbcc48d09a981a356954b0c47c53ff25b545856f28a889ea619f69a", size = 373053, upload-time = "2026-10-04T16:29:19.063Z" },
1754
+ { url = "https://files.pythonhosted.org/packages/60/de/74b0ccdbbd28687b9b5fdb34c1cabed88352182facaced9d6f5486b8b9ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8601470267d938bcb7f3ab1a336100af51a4fd5b6ed030ef52461bb3ef5e7e07", size = 377742, upload-time = "2026-10-04T16:29:20.543Z" },
1755
+ { url = "https://files.pythonhosted.org/packages/c2/6d/b979775a3057b2a5c26d75ecbff60a20a24ef081db6dd76836fca3f20247/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3890a6aa36e6baa53d5258a2a25d3ef8b37ad165a6ab27a892d7c3e3a432cd69", size = 487289, upload-time = "2026-10-04T16:29:21.958Z" },
1756
+ { url = "https://files.pythonhosted.org/packages/1d/5d/7c34734ce3ece943d9d6ee0122a74a21bbc75b47acb5b7053c83f6efb1ed/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6b5b393eda5ea42cca1c1a6665f2a4882b4fd5d1777e41ce0545a107fb008c9d", size = 390710, upload-time = "2026-10-04T16:29:23.378Z" },
1757
+ { url = "https://files.pythonhosted.org/packages/1d/6d/b26eb1e75395925b3a142ed351cbed2ec8212f5c9d937aee3df32c701baa/rpds_py-2026.9.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:addeda51556dac7c1a2f14cda62db8b621cd12afba3091d03a96c72932387eab", size = 371261, upload-time = "2026-10-04T16:29:25.1Z" },
1758
+ { url = "https://files.pythonhosted.org/packages/7c/98/b2fdfe10301a9e27af21e634337fbba7baac0bc17fe44619a17c26bba2cb/rpds_py-2026.9.1-cp312-cp312-manylinux_2_31_riscv64.whl", hash = "sha256:d9edf30457d74eebfd76b045535e36f1cd89062566a128a0db2145ca042d787e", size = 376075, upload-time = "2026-10-04T16:29:26.748Z" },
1759
+ { url = "https://files.pythonhosted.org/packages/c5/b1/c4b8d954e49c3c69cf8063c0c9e0919c99f3d2cecc46311606a1cbe835dc/rpds_py-2026.9.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:815d26356930846a40c7bc1366e7b1b0320ab8a063e66c11298a208bed0fd237", size = 399358, upload-time = "2026-10-04T16:29:28.282Z" },
1760
+ { url = "https://files.pythonhosted.org/packages/b3/59/9559a7293c97dff0cbb293efffbd36644103883ecc27741af8ef90c84ca8/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:3b5a6f40f0a1486b4b36c888123afc67acdbd9f33235927acf5ff295429a0ba3", size = 550267, upload-time = "2026-10-04T16:29:29.851Z" },
1761
+ { url = "https://files.pythonhosted.org/packages/6c/9d/6dc60e49511de4c8b00e74f9c1d43aed4d27f712cdb1ade92f2c199cbf64/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b5b8b0753718d258fd454283fbd57e14545d3b40583fa672e27cb4f987626bcc", size = 614018, upload-time = "2026-10-04T16:29:31.54Z" },
1762
+ { url = "https://files.pythonhosted.org/packages/fb/bc/92a4ecf27301b886232a413360f6b348a81d55ffef654f2ebda5970ebc3d/rpds_py-2026.9.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:46d80bc76b51a6c24f9944368c28d38b8bcbcea1da4f2f8d3ebc31a67e8c6ec6", size = 578509, upload-time = "2026-10-04T16:29:33.01Z" },
1763
+ { url = "https://files.pythonhosted.org/packages/08/53/efb97f2e6589b7ab8394385a73870e0b2ab2a195281c117b21fd6d7d4855/rpds_py-2026.9.1-cp312-cp312-win32.whl", hash = "sha256:befc2d6a953e563f8a7bfd87a42c22ebf8a3e980dcb7b6a4d17b70b0e914e8a3", size = 205401, upload-time = "2026-10-04T16:29:34.451Z" },
1764
+ { url = "https://files.pythonhosted.org/packages/1c/84/1700cc748d0eaa747486e4e82882d2575224e6e9a3148df583058850c629/rpds_py-2026.9.1-cp312-cp312-win_amd64.whl", hash = "sha256:5ce8943f79c2210f7abcc28e86367b03b28d95027fd01c46d2472373ae70c86f", size = 222923, upload-time = "2026-10-04T16:29:35.709Z" },
1765
+ { url = "https://files.pythonhosted.org/packages/c3/89/0302215373c2f8b4408b0fdfee955368cc378a98ff59508d47a7e0dc2dbf/rpds_py-2026.9.1-cp312-cp312-win_arm64.whl", hash = "sha256:501909f2e4a1e2dee528ef766fe3c469060ebc17e54a8383d404ba07a81a6f02", size = 218415, upload-time = "2026-10-04T16:29:37.263Z" },
1766
+ { url = "https://files.pythonhosted.org/packages/83/ea/ee88fd9e756ff93fb6b1182a47ec09504a242620e33ce1d20679efefe841/rpds_py-2026.9.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:a36b70596407634ca82d4b989a3729074a008537a0522e4c8046a67c729103e9", size = 346229, upload-time = "2026-10-04T16:29:38.82Z" },
1767
+ { url = "https://files.pythonhosted.org/packages/57/71/a097d6552f837500fc36e6b23d09cfb9890c3cc47531f9ca64e149799615/rpds_py-2026.9.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:eba5d173f7d5708b22a93815017a4611873ed54db9f268077c0dd1ed99cfc858", size = 340514, upload-time = "2026-10-04T16:29:40.405Z" },
1768
+ { url = "https://files.pythonhosted.org/packages/bd/b7/497e85768bf4e0d8ddbaa096a4cac31d1509251dee2728a8490aa367e0b5/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:457866b85daf5034296666168b84a69e0b2e89dc4f1af102b46f6448a60b9063", size = 372611, upload-time = "2026-10-04T16:29:41.778Z" },
1769
+ { url = "https://files.pythonhosted.org/packages/52/4b/74ab4108916250b6e198e0d3af05bc6835eb046315f22f7a0ceb49667c5a/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a3a52a3ba86436ab3aef510fbe21512abc2ddd1993005dfe50514bd2284ef025", size = 377712, upload-time = "2026-10-04T16:29:43.242Z" },
1770
+ { url = "https://files.pythonhosted.org/packages/0c/8e/067e77d9d7b3cc793c9d909b7e97e7aadbbb1fb094093b6876902cc96d38/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d7841166b7fa64c9c56404617ae4341448847482d45933b13135d26c130519e5", size = 488106, upload-time = "2026-10-04T16:29:44.692Z" },
1771
+ { url = "https://files.pythonhosted.org/packages/3c/b4/c5aae6c2dde269bf955f6b7d35065c655a57e47750d9668052ad67e74dda/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:926bdd3e3b5998ddf70cc64bc8cf57209571f9044542913afb673799fec77dd0", size = 390795, upload-time = "2026-10-04T16:29:46.129Z" },
1772
+ { url = "https://files.pythonhosted.org/packages/a0/36/76fab39973ee11e7f9f357c55138197bb01c86f6502cb76487e3b4f42db0/rpds_py-2026.9.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7868b85224291c6cb6759f9b5adb9745f486d226f62b16a614dd5a2a5ab2b35b", size = 370794, upload-time = "2026-10-04T16:29:47.603Z" },
1773
+ { url = "https://files.pythonhosted.org/packages/3d/fe/cd2a80e6d7b871937a60e935c5d507aa390d143f4ff3636f640b9733d5df/rpds_py-2026.9.1-cp313-cp313-manylinux_2_31_riscv64.whl", hash = "sha256:3cd182d7291d29b92c521a0069d9c01ba6193628a9a105531d11b40a6d731a33", size = 375673, upload-time = "2026-10-04T16:29:49.223Z" },
1774
+ { url = "https://files.pythonhosted.org/packages/6c/18/7464a9953724e55a3b3206062fa0ffdeaa519584c6aabf65d3956d94f131/rpds_py-2026.9.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e6ea1cda8d8c688278430e4268a42f5e5da3bdd74578dfadc0820c3f1766ce83", size = 398758, upload-time = "2026-10-04T16:29:50.601Z" },
1775
+ { url = "https://files.pythonhosted.org/packages/c0/86/1534b436700fd49ff411063b7c4d7e938adfabf90895b6cf1622d5a7d1f6/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5943980471829f6de242a20b109de3111ba6b77e3af0ffc587028ac854b05e6c", size = 550370, upload-time = "2026-10-04T16:29:52.002Z" },
1776
+ { url = "https://files.pythonhosted.org/packages/57/1c/e1fa82a8a01e3c5820f3ba98a8b2673f642128eb368fa88871b01dd2c909/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:76d3af9732d2dab69f28179b40ba2d87e2f1d5824b4a694780aa787d685e8f36", size = 613106, upload-time = "2026-10-04T16:29:53.655Z" },
1777
+ { url = "https://files.pythonhosted.org/packages/29/55/b20b8c4c3dde8755bfcd5b08492a02d0cd2e26929aedf6199ca2a377d42a/rpds_py-2026.9.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:78326f4cb4427a56ba4996c0762b63be45f06b85f086526420d2b3a66e40f84d", size = 578235, upload-time = "2026-10-04T16:29:55.157Z" },
1778
+ { url = "https://files.pythonhosted.org/packages/55/42/df3f7bbc3f7ab37a8a9db8d6c2ff2c985422899f1f7926afbf7ec3c0b8b4/rpds_py-2026.9.1-cp313-cp313-win32.whl", hash = "sha256:172e47169583f46ce118cbec68e6795d0da0f4606b488b6434f8276bca0a058c", size = 205293, upload-time = "2026-10-04T16:29:56.669Z" },
1779
+ { url = "https://files.pythonhosted.org/packages/31/9c/ba5a9569d719bfdd6ce863df4133ac6a1658cf1b07cc3534c31db729fbbc/rpds_py-2026.9.1-cp313-cp313-win_amd64.whl", hash = "sha256:3e93b2cd69a9830be33e03945cd7cda940a0a8bfcfbff41d6144f0cb0d3d8bd9", size = 222409, upload-time = "2026-10-04T16:29:58.049Z" },
1780
+ { url = "https://files.pythonhosted.org/packages/35/72/f28ca566f6c23c35bbf7445f65eb0364577b25a026305995e24f78b83d94/rpds_py-2026.9.1-cp313-cp313-win_arm64.whl", hash = "sha256:d151e148117294133bf8af7eeace085e7e87432db15ab6adf640330298a47f6f", size = 217681, upload-time = "2026-10-04T16:29:59.449Z" },
1781
+ { url = "https://files.pythonhosted.org/packages/8a/f2/67b94be1532767803415c1c5a1fd88ea487643d74a673cec1ba140af77bb/rpds_py-2026.9.1-cp314-cp314-macosx_10_12_x86_64.whl", hash = "sha256:c9d1aca01f49170fdcf5c92761b1fafe97f554b721ca4570c5949fff778f0d4b", size = 347178, upload-time = "2026-10-04T16:30:00.865Z" },
1782
+ { url = "https://files.pythonhosted.org/packages/04/37/b751de2b59b0197a1d92a5dd491de88e8a5e928c2e6562581974f1e85263/rpds_py-2026.9.1-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:3f0e9ac28fc067d4d34b88ae43c48e9489455c97fee9633d851f7eeed5a05d35", size = 341878, upload-time = "2026-10-04T16:30:02.564Z" },
1783
+ { url = "https://files.pythonhosted.org/packages/72/e2/5873bc4643c250db9e05d48dc0c93763d4aa68bc3b81164cb1af3b45b284/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:07deecbfce94c78473018bc7d10b337cc651d12df87a1eb2cb3e4024bc9c33d0", size = 373963, upload-time = "2026-10-04T16:30:04.026Z" },
1784
+ { url = "https://files.pythonhosted.org/packages/51/03/5acf7632158247f3f6386ff0af3a1ee48167d575037e8d0920594b76d92b/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:821b2755db9194409254012f429c56643416fb96ef9be090be82ec8826b7f477", size = 377975, upload-time = "2026-10-04T16:30:05.555Z" },
1785
+ { url = "https://files.pythonhosted.org/packages/e6/00/63fda451b8bffa5808fc8bb311ee7c073b340974b09f273c7b2a145d3d62/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c91c210ae7645626c608400e3519b4a642f837cce09ca830db3beb2e9f274d4", size = 490347, upload-time = "2026-10-04T16:30:07.156Z" },
1786
+ { url = "https://files.pythonhosted.org/packages/a1/ae/c093ffd070ba0fb02f76c565d06fecc65ad6e4afdbae78f7031076d3cdac/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:54ac2158a6f96cfbabff0b2eedaf94b90c5ec7ca8317fcadc61e1c2b2e0ff6ef", size = 392962, upload-time = "2026-10-04T16:30:08.77Z" },
1787
+ { url = "https://files.pythonhosted.org/packages/22/9d/d08a1128ab199b2f0cf25bfeb0639bd05119fff4b7c47bec24ef9a8ec23f/rpds_py-2026.9.1-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eac2f5dbafd585dfe31f86a23ebf0d3ba480a9d49ebc87947267b5608d4ea0cd", size = 371623, upload-time = "2026-10-04T16:30:10.501Z" },
1788
+ { url = "https://files.pythonhosted.org/packages/53/c7/4758ddcbb75609414bbccfcb11d612436f9b3ee821bd2f33f0f1604ee648/rpds_py-2026.9.1-cp314-cp314-manylinux_2_31_riscv64.whl", hash = "sha256:8aa5dda18d39b6143eb24809d158f9252c88f402749b6f1b62a506cc7d96cc35", size = 376997, upload-time = "2026-10-04T16:30:12.124Z" },
1789
+ { url = "https://files.pythonhosted.org/packages/87/e4/947bd7f608ff60faf46dc9d389c3dffd0e3d767d78a0be19978448ef0ce7/rpds_py-2026.9.1-cp314-cp314-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:5c90e7fa02e8f5de0d10c17595c568ada48c5302e749462c0ea1a4c362111a86", size = 400169, upload-time = "2026-10-04T16:30:13.804Z" },
1790
+ { url = "https://files.pythonhosted.org/packages/4b/35/fe93e020a0543b5670472c18d7e6af3197c08da571240ce1965c84f85c0f/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e6d198bad4e49dd6732fbd636e2fc5c082f45c8cad0b4acb756b00c82c76072e", size = 551615, upload-time = "2026-10-04T16:30:15.332Z" },
1791
+ { url = "https://files.pythonhosted.org/packages/0d/4f/5d2a0136bb03b2a56a39dc6ff92d58a6e3e53a2e17079238b86228882f16/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_i686.whl", hash = "sha256:96beca19ec79de272e8668585380ff9092c47077c1d7a1e098e00bbd921f4785", size = 614655, upload-time = "2026-10-04T16:30:16.92Z" },
1792
+ { url = "https://files.pythonhosted.org/packages/09/1c/3f1025aaf70d9bf7272cc41f8b64ee76b48bf01726248138430e16f23b38/rpds_py-2026.9.1-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:a5cf77eb04f20b720be95265a3e00eb2a14814074255cc27069c551b2db53118", size = 579602, upload-time = "2026-10-04T16:30:18.555Z" },
1793
+ { url = "https://files.pythonhosted.org/packages/53/0d/5c72e6204f76610608706da32b6b7e11ef7e10317558a7bb15a122e008dc/rpds_py-2026.9.1-cp314-cp314-win32.whl", hash = "sha256:a03d57b86d2a51d0a66c92177e2be154ad015f357791d306e714569999cdb4cc", size = 206315, upload-time = "2026-10-04T16:30:20.05Z" },
1794
+ { url = "https://files.pythonhosted.org/packages/a4/0b/489d48abbcc7d70cf3fbf662d9d22abf1f4650761c0a9ae05260800800d3/rpds_py-2026.9.1-cp314-cp314-win_amd64.whl", hash = "sha256:837c6b305e26fe0f75b15c92cf3b2ba29e0ae19dc40b1c557b026cb426347d0c", size = 222852, upload-time = "2026-10-04T16:30:21.604Z" },
1795
+ { url = "https://files.pythonhosted.org/packages/91/16/bbb05a7e6a10cf79ba639be7f799d770ee15f64175cc61d081b218dd402a/rpds_py-2026.9.1-cp314-cp314-win_arm64.whl", hash = "sha256:fce4b85234a0cbad67bf8e6e1201ee815d172c9aebad75f25645bc4d834f8e31", size = 218709, upload-time = "2026-10-04T16:30:23.036Z" },
1796
+ { url = "https://files.pythonhosted.org/packages/22/ac/ac507a0a4ec478ca470440a09583db4be5259ba7670aeba0620822f1e57a/rpds_py-2026.9.1-cp314-cp314t-macosx_10_12_x86_64.whl", hash = "sha256:3a72c11530d71abfb66c8d7696a2f86c43e63fca8b948f1a784ac490f4ec688e", size = 349596, upload-time = "2026-10-04T16:30:24.558Z" },
1797
+ { url = "https://files.pythonhosted.org/packages/e9/f2/817a46b658d5070f477f722c298ee9a24525b0e4017347964146ef5fdd0e/rpds_py-2026.9.1-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:068c37bba854ec2fe42f7365c640af11dd9895890ccbf2df5070d0c059bd7f96", size = 343114, upload-time = "2026-10-04T16:30:26.048Z" },
1798
+ { url = "https://files.pythonhosted.org/packages/6c/42/6ade976b13ac1b4cb3bf2eb603f1be2fe74df19a29988d4c2b386be59d6f/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7fca4eb6df565e2a928f1c7dad92d27db8f9df0f449e76423ed5d7e713ed445", size = 374197, upload-time = "2026-10-04T16:30:27.699Z" },
1799
+ { url = "https://files.pythonhosted.org/packages/d9/70/77cdf1d3f1a07faabe936016ae623aec7981f73108a8fe7a203ed2e21998/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c933c6678c6f116ff8af47a4c6db0868b8ace74af0343016c0ef00f00272ea69", size = 378025, upload-time = "2026-10-04T16:30:29.451Z" },
1800
+ { url = "https://files.pythonhosted.org/packages/3f/6b/18a44a3beaa9b7931acb04af7bd9539836477c630a794452d4826d6185d4/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:028ad274ea951dac64491b5d1e65712a4aeabfdbdb9fccf797b57bd899b0c495", size = 491969, upload-time = "2026-10-04T16:30:30.995Z" },
1801
+ { url = "https://files.pythonhosted.org/packages/73/27/fb39cfd6bddaf741b024f813890374578ff8ac1f1adc473659c048b03b05/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:740d0a99cf9de0b17a3943388e9294a59becf75e7c43421f387bd3c7a9901f7c", size = 393905, upload-time = "2026-10-04T16:30:32.628Z" },
1802
+ { url = "https://files.pythonhosted.org/packages/ed/71/0fa7bb77b57af0d710273964180d11b503f62b8a5c358eb2d8c3f62feff6/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0da298fb372dc192610a4b9ecbc68a0cd8b675bbbd1fc519d01b41cfd658333e", size = 374569, upload-time = "2026-10-04T16:30:34.257Z" },
1803
+ { url = "https://files.pythonhosted.org/packages/54/22/f41cfac269af3b449513ef1bc3d7f32fde52abbbd2d01c7e76b47743acd9/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_31_riscv64.whl", hash = "sha256:eb61be926bb81567c1f48bdc8aa22b9855048dc2efd53871f9f7e6e9a5632346", size = 377482, upload-time = "2026-10-04T16:30:35.997Z" },
1804
+ { url = "https://files.pythonhosted.org/packages/b4/fc/312b49006e7f8f9ca5f96647577b8aa6f3df30519c46bd448f5c425af0b2/rpds_py-2026.9.1-cp314-cp314t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:42e75466f83cd43f6026c81eab74246efb2bdadafb307b85700632d06c68f299", size = 400040, upload-time = "2026-10-04T16:30:37.76Z" },
1805
+ { url = "https://files.pythonhosted.org/packages/cf/a6/18cca7a878dc7fa95165a83343fd4d7b65643fd22e54e47340a451121d5c/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:617f59cde379b4f648a09797b7f683d04b90a46344cddab85639da5aff0f5531", size = 551849, upload-time = "2026-10-04T16:30:39.443Z" },
1806
+ { url = "https://files.pythonhosted.org/packages/e4/6d/1f5685e20f39604691bdc3c05aaa6b8bd2f954e9e996477adf2376768e33/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_i686.whl", hash = "sha256:3edae8c5ddfdb6985d49ae9d150516e5076888879022f91a26c2de9276ce0bdb", size = 614842, upload-time = "2026-10-04T16:30:41.231Z" },
1807
+ { url = "https://files.pythonhosted.org/packages/c6/25/98652109fd9f7e10268dd4571aa52b81987001b806f37ef1a18260de714a/rpds_py-2026.9.1-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:0f045bb053c9057720d72c56dffe30dffdc05997b2897a827b9325f0ab6623fa", size = 582606, upload-time = "2026-10-04T16:30:43.345Z" },
1808
+ { url = "https://files.pythonhosted.org/packages/19/03/11ca09099bab5f53373a80a334c424ec917c13d050760a59499d2af5171e/rpds_py-2026.9.1-cp314-cp314t-win32.whl", hash = "sha256:bf35d0568abda97233239ce32896d3ad53fccc537832c104e30c94aa5fb93569", size = 203341, upload-time = "2026-10-04T16:30:44.954Z" },
1809
+ { url = "https://files.pythonhosted.org/packages/6f/8a/88909e3ffd9f47f5b58211473875d8c3c09079f0058c46fb72c55a702a26/rpds_py-2026.9.1-cp314-cp314t-win_amd64.whl", hash = "sha256:1e8d4d79d828299bf44a55db22a9388ab967b49d17132c88eab0f4360b48da8e", size = 222843, upload-time = "2026-10-04T16:30:46.486Z" },
1810
+ { url = "https://files.pythonhosted.org/packages/f6/b7/a662f367d4896dd0a10cef2fc91f10b7f08af1c10858e287e019563f338d/rpds_py-2026.9.1-cp315-cp315-macosx_10_12_x86_64.whl", hash = "sha256:1d77b649e6f7cdf12ca5c2a98dad0ad37f9ea9b6f960408a92f0cb12bb3d04d9", size = 347463, upload-time = "2026-10-04T16:30:48.203Z" },
1811
+ { url = "https://files.pythonhosted.org/packages/ae/3f/ad45d03df4f84ebae5439577ee81f3999d182711e82235c8037b6528890e/rpds_py-2026.9.1-cp315-cp315-macosx_11_0_arm64.whl", hash = "sha256:00ba2d8c7dd4ee537978ddf4b3fbd712bef2d8751603f7f3146b3f4287768e25", size = 342051, upload-time = "2026-10-04T16:30:49.872Z" },
1812
+ { url = "https://files.pythonhosted.org/packages/7e/31/3dcd68c13d4bcc59c1f7eb33ac8e80698f06f3eb0d8a1e06419836071c20/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec450527cbf485e13c8d3602a54f428ab0432fdade0ede75efd74b735421c871", size = 374143, upload-time = "2026-10-04T16:30:51.508Z" },
1813
+ { url = "https://files.pythonhosted.org/packages/cf/0d/68c1f058a250fbd1380ebda9fc227cbf50117adf8ffe8161ef383ea79f68/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:306ee1850d8105b5baf977e78d45fcadd12c1a54678d614c9baf217708446e91", size = 378604, upload-time = "2026-10-04T16:30:53.206Z" },
1814
+ { url = "https://files.pythonhosted.org/packages/d7/d6/2d4c59b85397cb4800594fadf692688ccf5ce556adc930e7a5bf21061a5e/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ef6b65b03247c54692ad4fd9ee97cb772781927db72e3cb05e70b3db6d1ff14f", size = 490790, upload-time = "2026-10-04T16:30:54.925Z" },
1815
+ { url = "https://files.pythonhosted.org/packages/da/04/7e05dc3aebaf52f4e026766bd668fdd09a9d0e23f64a14686b36b3501892/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a575404ebc9cf2e91edd32eaf570ec1430eb900d4f56724ba7dd4bc1fc9c176d", size = 393146, upload-time = "2026-10-04T16:30:56.625Z" },
1816
+ { url = "https://files.pythonhosted.org/packages/57/ca/e2e9a0a46a74ed51a0498ba1fe10f4ea6b2d9a155f372a2f91e51f18cf10/rpds_py-2026.9.1-cp315-cp315-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2c16ab111bc27c646ba8aa005d0527754edc538ebb636f0b1bf8e244b48d1945", size = 372022, upload-time = "2026-10-04T16:30:58.295Z" },
1817
+ { url = "https://files.pythonhosted.org/packages/ba/cb/8f8774df5134e23424372838bcc5c7ed4127d723e1ff52f7bebd4dcb2563/rpds_py-2026.9.1-cp315-cp315-manylinux_2_31_riscv64.whl", hash = "sha256:7664419f27db41d4f1c43a78dccda7dd6e8ef2428df3ee01d0c2a07a6b071297", size = 377092, upload-time = "2026-10-04T16:30:59.984Z" },
1818
+ { url = "https://files.pythonhosted.org/packages/90/02/8d7095d73bf9114219be40230baa5df00611e0a82ed9517779ff9c19f82b/rpds_py-2026.9.1-cp315-cp315-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4b26b03d9d2658ee2fa234f8f4f19f38a09773fe5261028025032e26d4d35af0", size = 400830, upload-time = "2026-10-04T16:31:01.721Z" },
1819
+ { url = "https://files.pythonhosted.org/packages/ec/02/8206856f8f363cd042a8315dc86b3912f5dcb6d3c66bbb24b69c2bfb0775/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_aarch64.whl", hash = "sha256:be3e47e2d91aa3942ff9bf4077a505226005abfc39b6f7554a91c1b9393986b9", size = 551478, upload-time = "2026-10-04T16:31:03.472Z" },
1820
+ { url = "https://files.pythonhosted.org/packages/41/6b/36211f1bb1f0b0313f496d92f5905b74ea107f27cb16fa3355a82f04575e/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_i686.whl", hash = "sha256:6307a0da524939decb8ca4a3933b8ab62525794411d6984fca6726e732804af6", size = 615173, upload-time = "2026-10-04T16:31:05.281Z" },
1821
+ { url = "https://files.pythonhosted.org/packages/35/77/cda0c4a6f055446b692f0ed5692f73707cafd3dff82672ede31b1a9b59de/rpds_py-2026.9.1-cp315-cp315-musllinux_1_2_x86_64.whl", hash = "sha256:159a7aab5c5e8b112c8830f54717ce56da1252ebdbb526f5be2df2309280b9e7", size = 579653, upload-time = "2026-10-04T16:31:07.065Z" },
1822
+ { url = "https://files.pythonhosted.org/packages/74/ec/d8385f446240aed643b9e92a5055cff3015cc04a13c61f73b2883c478ed5/rpds_py-2026.9.1-cp315-cp315-win32.whl", hash = "sha256:dbc2673f9223d420c91145599b3ba45a8a50c207d1976908e5fb5ddb0c9b9429", size = 206498, upload-time = "2026-10-04T16:31:08.989Z" },
1823
+ { url = "https://files.pythonhosted.org/packages/6d/a5/71b5cd00e0521e3b6b81828baea368c62b6b700ebdd9554cd7d41ddf12fa/rpds_py-2026.9.1-cp315-cp315-win_amd64.whl", hash = "sha256:75c38c50ab9aca840225d9a9a3810bf11d04bd5c1f186cabbb8aee56db3e9b15", size = 223121, upload-time = "2026-10-04T16:31:10.84Z" },
1824
+ { url = "https://files.pythonhosted.org/packages/33/58/dba857c3bc8221b31b62eb170a3080f4f191de79f047200389b7ed1b06a7/rpds_py-2026.9.1-cp315-cp315-win_arm64.whl", hash = "sha256:a431156bb41865fc14cd5d79bb9d7bbed83110b0159e34e62ae30951f96c0009", size = 218741, upload-time = "2026-10-04T16:31:12.592Z" },
1825
+ { url = "https://files.pythonhosted.org/packages/5b/d0/320ab28ccc1415eeb509d68682b0014fb74690cd49f1c2d29a232475af50/rpds_py-2026.9.1-cp315-cp315t-macosx_10_12_x86_64.whl", hash = "sha256:ef0d8c843e2827d6c120ab4687e9423fb1d893db1df27b7c1506615bcb9734a0", size = 349719, upload-time = "2026-10-04T16:31:14.48Z" },
1826
+ { url = "https://files.pythonhosted.org/packages/56/88/f5b12f1358f443c08b7ce3cc8391d82d335f4872580e2e097847fd36087a/rpds_py-2026.9.1-cp315-cp315t-macosx_11_0_arm64.whl", hash = "sha256:45bc6bccf78b20fd834237d18db64965d7ee68ba7f60440a26c7ab71e7b8d51a", size = 343267, upload-time = "2026-10-04T16:31:16.827Z" },
1827
+ { url = "https://files.pythonhosted.org/packages/f7/0c/c765b0059d532acb3b9c45d781ccc22f15a96dbe443d00903f643ba9df10/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d55198263bb51f557550c6ed2e6d1cb6a6fed6eb5c9120b741c5926bef8a45d", size = 374555, upload-time = "2026-10-04T16:31:18.931Z" },
1828
+ { url = "https://files.pythonhosted.org/packages/6b/8a/cafddfda77564a10cd21184640c3bffda6a2b8d20972fb5dedd5e0166328/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a8763f20692da7df39b0afdd1ba3042b004c50a45994f76c2d9a25641f7673db", size = 378346, upload-time = "2026-10-04T16:31:20.75Z" },
1829
+ { url = "https://files.pythonhosted.org/packages/b9/01/5e626016eff72c183bf6c96539240cace15d402468647a453ec08415b2fc/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e43d4a1f673e8a1cbd8533e809e02b4bf9d4f2280269bb640436556312121250", size = 492373, upload-time = "2026-10-04T16:31:22.614Z" },
1830
+ { url = "https://files.pythonhosted.org/packages/3b/9c/15a2469e9389242f46896b3f0a01d68caea8a5a35c011fcb05ef333aae73/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea394a937f17a54c51239348bdbe2e3518124c8d4a8951ba04a311d3095bd18f", size = 394371, upload-time = "2026-10-04T16:31:24.768Z" },
1831
+ { url = "https://files.pythonhosted.org/packages/63/f5/c100ff77e1e6366e947c75969c258fdfc4b7bc5bbfe7351e62ffbf2a1228/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdeaa99ce822dca76cfb1b993e9120c5ea212f2eb66d48950ad63c349668a018", size = 375132, upload-time = "2026-10-04T16:31:26.588Z" },
1832
+ { url = "https://files.pythonhosted.org/packages/dd/f4/fe0269c9de253e99c81cabc12b8971a5feaa083debdaff1221e06264d9e3/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_31_riscv64.whl", hash = "sha256:b4f062343e7ad3fa94f2c66e5ae667dee47ee74dd41a9057c4fbe163236a123d", size = 377642, upload-time = "2026-10-04T16:31:28.677Z" },
1833
+ { url = "https://files.pythonhosted.org/packages/05/65/b34a7b257baccff8f4a24a722933166d4941d5ebdc9c3f4bc4ffcd5ce4f4/rpds_py-2026.9.1-cp315-cp315t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:22ffd29a63d71fb1b81552c21f2c2b734949b7ac751a9be70675a939a900839b", size = 400855, upload-time = "2026-10-04T16:31:30.802Z" },
1834
+ { url = "https://files.pythonhosted.org/packages/98/32/844e54176b6071b90b38a564e6940bc6eb8f97b2890dc709c19db9dec0f4/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_aarch64.whl", hash = "sha256:08dae4a4095150a7c4545a1fb40b98e1ab1744fbc2770d92c977b9dadaa49ab6", size = 552573, upload-time = "2026-10-04T16:31:32.709Z" },
1835
+ { url = "https://files.pythonhosted.org/packages/17/73/6041d20729dffbfdf155c02d65be58bc225a1c1fb548fd87c23ef306138f/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_i686.whl", hash = "sha256:9a0460d43603d1fd9ef59c30278531e15d78581721ddb538fa560aa7817ea4ad", size = 615840, upload-time = "2026-10-04T16:31:34.565Z" },
1836
+ { url = "https://files.pythonhosted.org/packages/af/9e/418094adaee6b056ce199051b255448ed872829051e341b2294c80da0977/rpds_py-2026.9.1-cp315-cp315t-musllinux_1_2_x86_64.whl", hash = "sha256:1c2d1f6da5128eabf34e963d7163a818846075a52568250d006c4c953b40f903", size = 582764, upload-time = "2026-10-04T16:31:36.665Z" },
1837
+ { url = "https://files.pythonhosted.org/packages/3d/9b/1698ebf6b840ddfe8b472198abbed6ace35c6e398faeecd6c47dae742a4e/rpds_py-2026.9.1-cp315-cp315t-win32.whl", hash = "sha256:5c6ee90dee3e85e055ddfd502d611643d9b0fd94c818220bda84ec3dacd9b27b", size = 203795, upload-time = "2026-10-04T16:31:38.53Z" },
1838
+ { url = "https://files.pythonhosted.org/packages/8a/e2/91f70d804c61f8eac39a417e82aa1024f655ab9e8bdd7393b196242bc41b/rpds_py-2026.9.1-cp315-cp315t-win_amd64.whl", hash = "sha256:fe5ad0664ec772b02c45859041aa17655709cced7a31005817fbbbd988c25567", size = 223037, upload-time = "2026-10-04T16:31:40.468Z" },
1839
+ { url = "https://files.pythonhosted.org/packages/f3/ad/f0eba548e297987964ef8088403db875b333963bf8189f3f563b6936b20e/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c0d2cb595a420b34d5086db0add011e26e2c09d6a024afbac4228bf8f863a30", size = 384112, upload-time = "2026-10-04T16:31:42.643Z" },
1840
+ { url = "https://files.pythonhosted.org/packages/33/89/891fa4d81f1eae7fe262ecd0aba2c51de94a116c7f3ccfb034fa75f4c537/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f3d6ed6a98cfd19155996605474982cc470d7601746a6439078f1a5a3fa8b050", size = 389662, upload-time = "2026-10-04T16:31:44.642Z" },
1841
+ { url = "https://files.pythonhosted.org/packages/4f/46/912cf623b2263f9c9c2d04e8508fc38dbe89983faeba5fb36ca4558ae550/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8171b44a054e5c67fd748ada04187f1250bf35b95f85e52ab64bcf3331a923bb", size = 504637, upload-time = "2026-10-04T16:31:46.667Z" },
1842
+ { url = "https://files.pythonhosted.org/packages/9b/5c/7f3cfa7c5f01765c9f47c8398210ed0c1eb686c0e99c223cb1c6776d3fb9/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fda1d96e542c37b6c804547dbf489c129fe7c97183a76a5ec275909ba1a063df", size = 402607, upload-time = "2026-10-04T16:31:49.068Z" },
1843
+ { url = "https://files.pythonhosted.org/packages/f0/76/2e915d4115ee453c33e6af17bc1df7e22ddc52974e178eeeb92a78c09983/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:270bdcdaac5d5b6f73c5e22e7e135c7f2a50e789f71d9e241d5be8d90026e19a", size = 382762, upload-time = "2026-10-04T16:31:51.24Z" },
1844
+ { url = "https://files.pythonhosted.org/packages/0d/e5/844382925d7b84a4074ad79fc2b9d05eb6231ea243b34f247e68e519b606/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:84a6ecc0c940169190d2c23bd969debd48c94dbc855acd60188a68d71d421608", size = 389563, upload-time = "2026-10-04T16:31:53.549Z" },
1845
+ { url = "https://files.pythonhosted.org/packages/81/82/d6e3951602dc2e24790ef9d299aa24bf5e2493df5043f2c6da00480cc447/rpds_py-2026.9.1-pp311-pypy311_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab4b2fda7c2b542f7f9d886cc6a838c5079d2b76f72e6081411faba11adde2c9", size = 416842, upload-time = "2026-10-04T16:31:55.76Z" },
1846
+ { url = "https://files.pythonhosted.org/packages/ea/1c/8d248e4ea671d525ab7daa0703ad81cc2175076fa0ccd7ef088facbd2b01/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:44b32a7c4f0da3d28af31c259e38ddcff096f855e205ed0671d02fcf44f1ea1c", size = 562434, upload-time = "2026-10-04T16:31:57.874Z" },
1847
+ { url = "https://files.pythonhosted.org/packages/ad/38/e7ac0db898120d15dea25e3661b1242a40cb3b23d1f4db86c15a01fe0ba1/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_i686.whl", hash = "sha256:a3dbc5ed9514908d5046107d7b1346bde71eea61de6e0e4919c19354f97e769f", size = 627909, upload-time = "2026-10-04T16:31:59.977Z" },
1848
+ { url = "https://files.pythonhosted.org/packages/03/c8/37e555514932cb1ee36c75349187aa882a98dee5d5654c761699ed8a0d27/rpds_py-2026.9.1-pp311-pypy311_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6eae33003518fd4cb4f83a218d5371469dd3001aa3b87128c005b07762f7fe5e", size = 593658, upload-time = "2026-10-04T16:32:02.14Z" },
1849
+ { url = "https://files.pythonhosted.org/packages/12/5c/5f69a91add94a8a33acea68a2b034a464946a654ff7296af9d957ef0d6a5/rpds_py-2026.9.1-pp311-pypy311_pp80-macosx_10_12_x86_64.whl", hash = "sha256:0483515261947e4e8b8e1375bf7463e7eb6ccfb3d86e7b554d90cd5285f20f32", size = 351769, upload-time = "2026-10-04T16:32:04.675Z" },
1850
+ { url = "https://files.pythonhosted.org/packages/41/22/35ea8bf3b2682b90ab687c74e4828418ff12298a5b0b0a0c033f61c86a30/rpds_py-2026.9.1-pp311-pypy311_pp80-macosx_11_0_arm64.whl", hash = "sha256:4cfaf02209061880210819934de2f4f6aa83dc04dafe6770276acc240a56da31", size = 351719, upload-time = "2026-10-04T16:32:06.834Z" },
1851
+ { url = "https://files.pythonhosted.org/packages/a3/90/a9ba81408369d34c1aca73319c15adc91ed45c1d21e9e8ee4832ffb7fe0b/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdc537c8633d7fd92a82e2e0d2ab74320a3f63d5e59fb9cf08711e08fe151c4", size = 381109, upload-time = "2026-10-04T16:32:08.994Z" },
1852
+ { url = "https://files.pythonhosted.org/packages/b3/44/5192a0bed94cec86bd2a5e1cc5a1bb8f7eec3aec907eacd2deb13e87e326/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:10e208f2425d973938afcd56e28a7c4be32e27b6a60b5d381f49fb9d8acf9759", size = 388222, upload-time = "2026-10-04T16:32:11.321Z" },
1853
+ { url = "https://files.pythonhosted.org/packages/92/cd/5356549711448f18b52f7a11ffbe90f1228774996fbf3c6cd1b18d22abaf/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6c0dbbcc19735fe5f8b0a54c07659d154a9e69f47e15d0a6ab7299215daf62cb", size = 500384, upload-time = "2026-10-04T16:32:13.478Z" },
1854
+ { url = "https://files.pythonhosted.org/packages/7a/88/ddda9d28adfe33119c75b2e733d4ba7e326f41d7e1b1093951771768ca48/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:684fd492fff4fead00587544e059be2bbcb6f93454f21fa2a91b66fc7508be82", size = 401661, upload-time = "2026-10-04T16:32:15.653Z" },
1855
+ { url = "https://files.pythonhosted.org/packages/32/c3/bb59ba16a6b4a57995d15b8c04c00f28df3b938c4dcdde48fbe0f73edb0c/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1028417bb44037eb3069c1009bd7b7277212876cda22fbe565b0bca9fab6d2c", size = 380748, upload-time = "2026-10-04T16:32:17.727Z" },
1856
+ { url = "https://files.pythonhosted.org/packages/f5/b8/0580faa1c5a32ddc160130dd7ae54d2d007272a89a40a6b5db3e50f9f585/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_31_riscv64.whl", hash = "sha256:492e5e428cbe126221611f47e068f01660352feec4ad18bc0f5ea9b2ae88fb14", size = 385731, upload-time = "2026-10-04T16:32:19.855Z" },
1857
+ { url = "https://files.pythonhosted.org/packages/bf/70/f73564642bbe3322c7eeef2c2f258cf040b71c41a430b532e59d04a1b838/rpds_py-2026.9.1-pp312-pypy312_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:88b5268892fde430d5531f95bc560b6efbbd67c929662c586afd729a96e7461c", size = 412131, upload-time = "2026-10-04T16:32:22.285Z" },
1858
+ { url = "https://files.pythonhosted.org/packages/8c/5d/17fff2e1f8f68721a2afb5cb48f7e442c751bb6b4883157c5abaf618cd08/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:01445c8d194aa032a08e944f16567672da1c62dbdbefd8b6d0693032e290cf68", size = 558193, upload-time = "2026-10-04T16:32:24.4Z" },
1859
+ { url = "https://files.pythonhosted.org/packages/2a/d0/869ab6fb08531f97aae4a780b4d61b4190d8aef48fe054ee28bcf7114466/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_i686.whl", hash = "sha256:eef6a03b0b6d08d0835ccfa8ec8d1bc70525e3801387567137b50c557695e6da", size = 622448, upload-time = "2026-10-04T16:32:26.844Z" },
1860
+ { url = "https://files.pythonhosted.org/packages/ba/a5/9672e532fe02cd3b92c78cfd8743abca939d96853006c63835009a1ecb6f/rpds_py-2026.9.1-pp312-pypy312_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:6b9bf3135b4ad5981df9a73d71a35272d650a2985ae9c2746357b24d59de2448", size = 591126, upload-time = "2026-10-04T16:32:29.274Z" },
1861
+ { url = "https://files.pythonhosted.org/packages/80/ef/3a9f8e4279c7920af561deed4cb7ebebed2794a8f608cf404d5eef14a105/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_10_12_x86_64.whl", hash = "sha256:56c6952a9b15047466d0c2347c446a761d4527f89976156341e68f0ce5cc08b0", size = 357108, upload-time = "2026-10-04T16:32:31.641Z" },
1862
+ { url = "https://files.pythonhosted.org/packages/b7/55/4b2fa381a583760aea5c92841e4e928a358e1c6511b129219e9c2826a226/rpds_py-2026.9.1-pp312-pypy312_pp80-macosx_11_0_arm64.whl", hash = "sha256:b242c27c8f836305a4a72df9cdd564386ac57b807bd252a063223331c9316b37", size = 346877, upload-time = "2026-10-04T16:32:34.061Z" },
1863
+ ]
1864
+
1680
1865
  [[package]]
1681
1866
  name = "ruff"
1682
1867
  version = "0.17.2"
@@ -1791,7 +1976,7 @@ asyncio = [
1791
1976
 
1792
1977
  [[package]]
1793
1978
  name = "stkit"
1794
- version = "17.0.1"
1979
+ version = "17.1.1"
1795
1980
  source = { editable = "../../" }
1796
1981
  dependencies = [
1797
1982
  { name = "aiosmtplib" },
@@ -1806,6 +1991,7 @@ dependencies = [
1806
1991
  { name = "httpx2" },
1807
1992
  { name = "jinja2" },
1808
1993
  { name = "joserfc" },
1994
+ { name = "jsonschema" },
1809
1995
  { name = "libpass" },
1810
1996
  { name = "orjson" },
1811
1997
  { name = "pillow" },
@@ -1837,7 +2023,7 @@ full = [
1837
2023
 
1838
2024
  [package.metadata]
1839
2025
  requires-dist = [
1840
- { name = "aiosmtplib", specifier = ">=5.0.0" },
2026
+ { name = "aiosmtplib", specifier = ">=5.1.2" },
1841
2027
  { name = "aiosqlite", specifier = ">=0.20.0" },
1842
2028
  { name = "alembic", specifier = ">=1.16.0" },
1843
2029
  { name = "asyncpg", marker = "extra == 'full'", specifier = ">=0.30.0" },
@@ -1845,20 +2031,21 @@ requires-dist = [
1845
2031
  { name = "bcrypt", specifier = ">=4.3.0" },
1846
2032
  { name = "blinker", specifier = ">=1.9.0" },
1847
2033
  { name = "click", specifier = ">=8.3.1" },
1848
- { name = "cryptography", specifier = ">=45.0.5" },
2034
+ { name = "cryptography", specifier = ">=50.0.0" },
1849
2035
  { name = "email-validator", specifier = ">=2.2.0" },
1850
2036
  { name = "httpx2", specifier = ">=2.16.0" },
1851
2037
  { name = "hypercorn", marker = "extra == 'asgi'", specifier = ">=0.17.0" },
1852
2038
  { name = "jinja2", specifier = ">=3.1.6" },
1853
2039
  { name = "joserfc", specifier = ">=1.7.1,<2" },
2040
+ { name = "jsonschema", specifier = ">=4.25" },
1854
2041
  { name = "libpass", specifier = ">=1.9.0" },
1855
- { name = "orjson", specifier = ">=3.10.18" },
2042
+ { name = "orjson", specifier = ">=3.11.6" },
1856
2043
  { name = "pillow", specifier = ">=13.0.0" },
1857
2044
  { name = "playwright", marker = "extra == 'dev'" },
1858
2045
  { name = "pre-commit", marker = "extra == 'dev'" },
1859
2046
  { name = "psycopg2-binary", specifier = ">=2.9.10" },
1860
2047
  { name = "ptpython", marker = "extra == 'dev'", specifier = ">=3.0.30" },
1861
- { name = "python-dotenv", specifier = ">=1.1.1" },
2048
+ { name = "python-dotenv", specifier = ">=1.2.2" },
1862
2049
  { name = "qrcode", specifier = ">=8.2" },
1863
2050
  { name = "quart", specifier = ">=0.20.0" },
1864
2051
  { name = "quart-security", specifier = ">=2.0.3,<3" },
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "stkit"
3
- version = "17.1.0"
3
+ version = "17.2.0"
4
4
  description = "An async Quart framework optimized for AI-assisted development workflows"
5
5
  authors = [
6
6
  {name = "Level09", email = "hello@level09.com"}
@@ -11,22 +11,23 @@ requires-python = ">=3.11"
11
11
 
12
12
  dependencies = [
13
13
  "alembic>=1.16.0",
14
- "aiosmtplib>=5.0.0",
14
+ "aiosmtplib>=5.1.2",
15
15
  "aiosqlite>=0.20.0",
16
16
  "authlib>=1.9.1,<2",
17
17
  "bcrypt>=4.3.0",
18
18
  "blinker>=1.9.0",
19
19
  "click>=8.3.1",
20
- "cryptography>=45.0.5",
20
+ "cryptography>=50.0.0",
21
21
  "email-validator>=2.2.0",
22
22
  "httpx2>=2.16.0",
23
23
  "jinja2>=3.1.6",
24
24
  "joserfc>=1.7.1,<2",
25
+ "jsonschema>=4.25",
25
26
  "libpass>=1.9.0",
26
- "orjson>=3.10.18",
27
+ "orjson>=3.11.6",
27
28
  "pillow>=13.0.0",
28
29
  "psycopg2-binary>=2.9.10",
29
- "python-dotenv>=1.1.1",
30
+ "python-dotenv>=1.2.2",
30
31
  "qrcode>=8.2",
31
32
  "quart>=0.20.0",
32
33
  "quart-security>=2.0.3,<3",
@@ -39,6 +40,11 @@ dependencies = [
39
40
  ]
40
41
 
41
42
 
43
+ [project.urls]
44
+ Documentation = "https://docs.stkit.dev"
45
+ Source = "https://github.com/level09/stk"
46
+ Changelog = "https://github.com/level09/stk/blob/master/CHANGELOG.md"
47
+
42
48
  [project.scripts]
43
49
  stk = "stk.cli.main:main"
44
50
 
@@ -3,7 +3,7 @@ stk Framework
3
3
  A modern Python web framework optimized for AI-assisted development.
4
4
  """
5
5
 
6
- __version__ = "17.1.0"
6
+ __version__ = "17.2.0"
7
7
 
8
8
 
9
9
  def __getattr__(name):
@@ -27,6 +27,8 @@ from werkzeug.security import safe_join
27
27
  import stk.extensions as ext
28
28
  from stk.agent_login import agent_login_enabled, bp_agent_login
29
29
  from stk.extensions import session
30
+ from stk.mcp.views import bp_mcp
31
+ from stk.notification.views import bp_notification
30
32
  from stk.portal.views import portal
31
33
  from stk.public.views import public
32
34
  from stk.settings import Config
@@ -205,7 +207,9 @@ def register_blueprints(app):
205
207
  app.register_blueprint(bp_user)
206
208
  app.register_blueprint(public)
207
209
  app.register_blueprint(portal)
210
+ app.register_blueprint(bp_notification)
208
211
  app.register_blueprint(ws_bp)
212
+ app.register_blueprint(bp_mcp)
209
213
  if agent_login_enabled(app):
210
214
  app.register_blueprint(bp_agent_login)
211
215
  return None
@@ -271,6 +275,7 @@ CORE_NAVIGATION_END = [
271
275
  {"title": "Change Password", "icon": "ti ti-key", "to": "/change"},
272
276
  {"title": "Two-Factor Auth", "icon": "ti ti-shield-lock", "to": "/tf-setup"},
273
277
  {"title": "Recovery Codes", "icon": "ti ti-lifebuoy", "to": "/mf-recovery-codes"},
278
+ {"title": "Agent Tokens", "icon": "ti ti-robot", "to": "/tokens/"},
274
279
  {"heading": "Administration"},
275
280
  {
276
281
  "title": "User Management",
@@ -287,6 +292,7 @@ CORE_NAVIGATION_END = [
287
292
  "to": "/activities",
288
293
  "role": "admin",
289
294
  },
295
+ {"title": "Jobs", "icon": "ti ti-list-check", "to": "/jobs", "role": "admin"},
290
296
  ]
291
297
 
292
298