aria-code 0.110.0__tar.gz → 0.111.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 (794) hide show
  1. {aria_code-0.110.0/src/aria_code.egg-info → aria_code-0.111.0}/PKG-INFO +8 -3
  2. {aria_code-0.110.0 → aria_code-0.111.0}/README.md +7 -2
  3. {aria_code-0.110.0 → aria_code-0.111.0}/pyproject.toml +1 -1
  4. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/_version.py +1 -1
  5. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +28 -3
  6. aria_code-0.111.0/src/aria_code/apps/cli/model_probe.py +166 -0
  7. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/base.py +27 -19
  8. aria_code-0.111.0/src/aria_code/apps/cli/release_download.py +159 -0
  9. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/update_check.py +15 -1
  10. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/updater.py +132 -20
  11. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/aria_cli.py +6 -3
  12. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/provider_health.py +42 -6
  13. {aria_code-0.110.0 → aria_code-0.111.0/src/aria_code.egg-info}/PKG-INFO +8 -3
  14. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code.egg-info/SOURCES.txt +7 -0
  15. aria_code-0.111.0/tests/test_callback_provider_cleanup.py +45 -0
  16. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_cli_updater.py +89 -0
  17. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_dispatcher_pins_match_the_release.py +4 -1
  18. aria_code-0.111.0/tests/test_model_probe.py +101 -0
  19. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_output_rendering.py +14 -0
  20. aria_code-0.111.0/tests/test_provider_error_classification.py +42 -0
  21. aria_code-0.111.0/tests/test_release_badges.py +89 -0
  22. aria_code-0.111.0/tests/test_release_download.py +110 -0
  23. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_release_push_is_atomic.py +2 -0
  24. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_startup_latency.py +12 -0
  25. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_update_health_routes.py +19 -0
  26. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_wheel_is_installable.py +8 -0
  27. {aria_code-0.110.0 → aria_code-0.111.0}/LICENSE +0 -0
  28. {aria_code-0.110.0 → aria_code-0.111.0}/NOTICE +0 -0
  29. {aria_code-0.110.0 → aria_code-0.111.0}/setup.cfg +0 -0
  30. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/__init__.py +0 -0
  31. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/adk_apps/__init__.py +0 -0
  32. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
  33. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
  34. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
  35. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
  36. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/__init__.py +0 -0
  37. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/base.py +0 -0
  38. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/code_review.py +0 -0
  39. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/__init__.py +0 -0
  40. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
  41. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/critic.py +0 -0
  42. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/deepen.py +0 -0
  43. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/models.py +0 -0
  44. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/pipeline.py +0 -0
  45. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
  46. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/themes.py +0 -0
  47. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/deep/tiers.py +0 -0
  48. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/engineering/__init__.py +0 -0
  49. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/engineering/coder.py +0 -0
  50. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/engineering/tester.py +0 -0
  51. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/__init__.py +0 -0
  52. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
  53. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/catalyst.py +0 -0
  54. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
  55. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/debate.py +0 -0
  56. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/earnings.py +0 -0
  57. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/fundamental.py +0 -0
  58. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/macro.py +0 -0
  59. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/news.py +0 -0
  60. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/risk.py +0 -0
  61. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/sector.py +0 -0
  62. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/strategist.py +0 -0
  63. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
  64. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/synthesis.py +0 -0
  65. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/financial/technical.py +0 -0
  66. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/orchestrator.py +0 -0
  67. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/portfolio_agent.py +0 -0
  68. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/__init__.py +0 -0
  69. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
  70. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/business_match.py +0 -0
  71. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
  72. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
  73. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
  74. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
  75. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
  76. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
  77. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
  78. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/registry.py +0 -0
  79. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/signal_scheme.py +0 -0
  80. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/sports/__init__.py +0 -0
  81. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/sports/football_agent.py +0 -0
  82. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/supervisor.py +0 -0
  83. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/team.py +0 -0
  84. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
  85. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
  86. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
  87. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
  88. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
  89. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
  90. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
  91. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
  92. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
  93. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
  94. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
  95. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/aliyun_data_client.py +0 -0
  96. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/README.md +0 -0
  97. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/__init__.py +0 -0
  98. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/channels/README.md +0 -0
  99. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/channels/__init__.py +0 -0
  100. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/channels/approvals.py +0 -0
  101. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/channels/conversation.py +0 -0
  102. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/channels/digest.py +0 -0
  103. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/channels/intake.py +0 -0
  104. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/channels/registry.py +0 -0
  105. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/channels/tradingview.py +0 -0
  106. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/README.md +0 -0
  107. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/__init__.py +0 -0
  108. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/_optional.py +0 -0
  109. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
  110. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/broker_render.py +0 -0
  111. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/chat_turn.py +0 -0
  112. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
  113. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
  114. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
  115. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
  116. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
  117. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
  118. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
  119. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
  120. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
  121. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
  122. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
  123. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
  124. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/core_cmds.py +0 -0
  125. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
  126. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
  127. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
  128. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
  129. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
  130. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/market.py +0 -0
  131. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
  132. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
  133. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
  134. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
  135. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
  136. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
  137. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
  138. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +0 -0
  139. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/report.py +0 -0
  140. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
  141. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
  142. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
  143. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/team.py +0 -0
  144. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
  145. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
  146. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
  147. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
  148. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
  149. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/config_paths.py +0 -0
  150. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/config_store.py +0 -0
  151. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/constants.py +0 -0
  152. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/context.py +0 -0
  153. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/deterministic.py +0 -0
  154. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/direct.py +0 -0
  155. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/earnings_view.py +0 -0
  156. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/exec_events.py +0 -0
  157. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
  158. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/football_reports.py +0 -0
  159. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
  160. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/google_login.py +0 -0
  161. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
  162. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
  163. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
  164. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
  165. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
  166. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
  167. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
  168. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/headless.py +0 -0
  169. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/helpers.py +0 -0
  170. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/hooks.py +0 -0
  171. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/i18n.py +0 -0
  172. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/intent.py +0 -0
  173. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/intent_router.py +0 -0
  174. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
  175. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
  176. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
  177. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/main.py +0 -0
  178. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/market_hours.py +0 -0
  179. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
  180. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/market_universe.py +0 -0
  181. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/message_processing.py +0 -0
  182. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/mixin_binding.py +0 -0
  183. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
  184. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
  185. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
  186. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
  187. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
  188. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/preflight.py +0 -0
  189. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/project_aria.py +0 -0
  190. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
  191. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
  192. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
  193. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
  194. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
  195. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
  196. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
  197. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
  198. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
  199. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
  200. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
  201. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
  202. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
  203. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
  204. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
  205. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
  206. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +0 -0
  207. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
  208. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/review_runner.py +0 -0
  209. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
  210. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/sandbox.py +0 -0
  211. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/session_export.py +0 -0
  212. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
  213. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/session_store.py +0 -0
  214. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
  215. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/terminal_chrome.py +0 -0
  216. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
  217. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
  218. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
  219. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
  220. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
  221. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tools/context.py +0 -0
  222. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
  223. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
  224. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
  225. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
  226. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
  227. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
  228. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
  229. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
  230. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
  231. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/cli/workspace_route.py +0 -0
  232. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/daemon/README.md +0 -0
  233. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/vscode/README.md +0 -0
  234. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/apps/vscode/package.json +0 -0
  235. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/aria_daemon.py +0 -0
  236. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/aria_feishu_bot.py +0 -0
  237. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/aria_mcp_server.py +0 -0
  238. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/aria_relay_client.py +0 -0
  239. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/aria_relay_server.py +0 -0
  240. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/aria_telegram_bot.py +0 -0
  241. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ariarc.py +0 -0
  242. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/artifacts.py +0 -0
  243. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/backtest_engine.py +0 -0
  244. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/backtest_report.py +0 -0
  245. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/__init__.py +0 -0
  246. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/automation.py +0 -0
  247. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/base.py +0 -0
  248. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/capabilities.py +0 -0
  249. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/cn/__init__.py +0 -0
  250. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
  251. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
  252. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
  253. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
  254. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
  255. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/config.py +0 -0
  256. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/intl/__init__.py +0 -0
  257. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
  258. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
  259. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
  260. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
  261. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/paper_broker.py +0 -0
  262. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/planning.py +0 -0
  263. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/registry.py +0 -0
  264. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/brokers/trading.py +0 -0
  265. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/canva_client.py +0 -0
  266. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/change_store.py +0 -0
  267. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/__init__.py +0 -0
  268. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
  269. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/aria_relay_client.py +0 -0
  270. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/canva_client.py +0 -0
  271. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/figma_client.py +0 -0
  272. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/football_data_client.py +0 -0
  273. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/kling_video_client.py +0 -0
  274. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/market_data_client.py +0 -0
  275. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/openai_image_client.py +0 -0
  276. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/runway_video_client.py +0 -0
  277. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
  278. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/cloud_memory.py +0 -0
  279. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/command_safety.py +0 -0
  280. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/computer_use_tools.py +0 -0
  281. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/dashboard_generator.py +0 -0
  282. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/data_analysis_tools.py +0 -0
  283. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/data_cleaner.py +0 -0
  284. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/data_service.py +0 -0
  285. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/__init__.py +0 -0
  286. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/base.py +0 -0
  287. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/router.py +0 -0
  288. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/__init__.py +0 -0
  289. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
  290. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
  291. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
  292. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
  293. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
  294. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
  295. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
  296. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
  297. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
  298. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/demo_player.py +0 -0
  299. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/doctor.py +0 -0
  300. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/domain/__init__.py +0 -0
  301. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/domain/backtest_engine.py +0 -0
  302. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/domain/backtest_report.py +0 -0
  303. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/domain/finance_formulas.py +0 -0
  304. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
  305. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/domain/strategy_vault.py +0 -0
  306. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/evals/__init__.py +0 -0
  307. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/evals/harness.py +0 -0
  308. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/evals/runner.py +0 -0
  309. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/evals/summary.py +0 -0
  310. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/external_agent_runner.py +0 -0
  311. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/figma_client.py +0 -0
  312. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/file_analysis_tools.py +0 -0
  313. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/finance_formulas.py +0 -0
  314. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/football_data_client.py +0 -0
  315. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/image_gen_tools.py +0 -0
  316. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/intent_classifier.py +0 -0
  317. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/kling_video_client.py +0 -0
  318. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/licensing.py +0 -0
  319. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/local_finance_tools.py +0 -0
  320. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/local_image_provider.py +0 -0
  321. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/local_llm_provider.py +0 -0
  322. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/macro_tools.py +0 -0
  323. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/markdown_pdf.py +0 -0
  324. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/market_data_client.py +0 -0
  325. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/mcp_client.py +0 -0
  326. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/memory_manager.py +0 -0
  327. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/model_capability.py +0 -0
  328. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/notification_tools.py +0 -0
  329. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/openai_image_client.py +0 -0
  330. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/__init__.py +0 -0
  331. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
  332. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
  333. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
  334. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
  335. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
  336. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
  337. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
  338. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_core/export.py +0 -0
  339. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
  340. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_core/paths.py +0 -0
  341. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
  342. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
  343. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
  344. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
  345. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_infra/product.py +0 -0
  346. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
  347. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
  348. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
  349. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
  350. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
  351. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
  352. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
  353. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
  354. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
  355. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
  356. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
  357. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
  358. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
  359. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/cache.py +0 -0
  360. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/context.py +0 -0
  361. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
  362. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/data.py +0 -0
  363. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/references.py +0 -0
  364. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/registry.py +0 -0
  365. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
  366. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
  367. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/settings.py +0 -0
  368. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_services/usage.py +0 -0
  369. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
  370. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
  371. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
  372. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
  373. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
  374. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
  375. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
  376. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
  377. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
  378. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
  379. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
  380. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
  381. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
  382. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
  383. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
  384. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
  385. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
  386. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
  387. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
  388. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
  389. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
  390. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
  391. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
  392. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
  393. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
  394. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
  395. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
  396. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
  397. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
  398. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
  399. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
  400. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
  401. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
  402. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
  403. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
  404. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packs/__init__.py +0 -0
  405. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packs/base.py +0 -0
  406. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packs/finance/__init__.py +0 -0
  407. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packs/logistics/__init__.py +0 -0
  408. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packs/payments/__init__.py +0 -0
  409. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packs/realty/__init__.py +0 -0
  410. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packs/registry.py +0 -0
  411. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/packs/rules.py +0 -0
  412. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/plan_utils.py +0 -0
  413. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/plugin_loader.py +0 -0
  414. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/portfolio_ledger.py +0 -0
  415. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/preview_server.py +0 -0
  416. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/privacy/__init__.py +0 -0
  417. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/privacy/feedback.py +0 -0
  418. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/project_review.py +0 -0
  419. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/project_review_api.py +0 -0
  420. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/project_review_server.py +0 -0
  421. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/project_tools.py +0 -0
  422. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/__init__.py +0 -0
  423. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/llm/__init__.py +0 -0
  424. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/llm/anthropic.py +0 -0
  425. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
  426. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/llm/base.py +0 -0
  427. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/llm/custom.py +0 -0
  428. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/llm/ollama.py +0 -0
  429. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
  430. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/llm/registry.py +0 -0
  431. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/local_image_provider.py +0 -0
  432. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/local_llm_provider.py +0 -0
  433. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/providers/tool_messages.py +0 -0
  434. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/realty_data_tools.py +0 -0
  435. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/relay_store.py +0 -0
  436. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/report_exporters.py +0 -0
  437. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/report_generator.py +0 -0
  438. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/review_service.py +0 -0
  439. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/__init__.py +0 -0
  440. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/acceptance.py +0 -0
  441. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/agent_loop.py +0 -0
  442. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/approval.py +0 -0
  443. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/budget.py +0 -0
  444. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/checkpoints.py +0 -0
  445. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/crash_report.py +0 -0
  446. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/events.py +0 -0
  447. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/gateway.py +0 -0
  448. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/lsp.py +0 -0
  449. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/orchestrator.py +0 -0
  450. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/processes.py +0 -0
  451. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/repo_map.py +0 -0
  452. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/run_state.py +0 -0
  453. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/run_store.py +0 -0
  454. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/self_healing.py +0 -0
  455. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/subagent.py +0 -0
  456. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/task_ledger.py +0 -0
  457. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
  458. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/tool_executor.py +0 -0
  459. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/tool_policy.py +0 -0
  460. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runtime/worktrees.py +0 -0
  461. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/runway_video_client.py +0 -0
  462. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/safety/__init__.py +0 -0
  463. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/safety/permissions.py +0 -0
  464. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/safety/sandbox.py +0 -0
  465. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/safety/service.py +0 -0
  466. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/setup_wizard.py +0 -0
  467. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/spreadsheet_tools.py +0 -0
  468. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/strategy_vault.py +0 -0
  469. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/__init__.py +0 -0
  470. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/artifact_tools.py +0 -0
  471. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/broker_tools.py +0 -0
  472. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/build_quant_engine.py +0 -0
  473. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/code_audit_tools.py +0 -0
  474. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/computer_use_tools.py +0 -0
  475. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
  476. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
  477. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/extended_tools.py +0 -0
  478. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
  479. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/image_gen_tools.py +0 -0
  480. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/local_finance_tools.py +0 -0
  481. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/logistics_carriers.py +0 -0
  482. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/logistics_inventory.py +0 -0
  483. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/logistics_io.py +0 -0
  484. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
  485. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/logistics_tools.py +0 -0
  486. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/macro_tools.py +0 -0
  487. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/notification_tools.py +0 -0
  488. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/project_tools.py +0 -0
  489. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/realty_data_tools.py +0 -0
  490. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
  491. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/tools/stripe_tools.py +0 -0
  492. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/__init__.py +0 -0
  493. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/banner.py +0 -0
  494. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/completer.py +0 -0
  495. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/console.py +0 -0
  496. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/image_render.py +0 -0
  497. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/input_box.py +0 -0
  498. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/mentions.py +0 -0
  499. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/picker.py +0 -0
  500. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/render/__init__.py +0 -0
  501. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/render/finance.py +0 -0
  502. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/render/market.py +0 -0
  503. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/render/output.py +0 -0
  504. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/render/responsive.py +0 -0
  505. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/render/team.py +0 -0
  506. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/robot.py +0 -0
  507. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/ui/startup_dashboard.py +0 -0
  508. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/utils/vscode_uri.py +0 -0
  509. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/video_analysis.py +0 -0
  510. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/video_editor.py +0 -0
  511. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/workspace/__init__.py +0 -0
  512. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/workspace/files.py +0 -0
  513. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/workspace/verify.py +0 -0
  514. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/workspace_changes.py +0 -0
  515. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/workspace_context.py +0 -0
  516. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/workspace_service.py +0 -0
  517. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code/workspace_tools.py +0 -0
  518. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
  519. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code.egg-info/entry_points.txt +0 -0
  520. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code.egg-info/requires.txt +0 -0
  521. {aria_code-0.110.0 → aria_code-0.111.0}/src/aria_code.egg-info/top_level.txt +0 -0
  522. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_adk_market_tools.py +0 -0
  523. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_agent_key_points_language.py +0 -0
  524. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_agent_team_fallback.py +0 -0
  525. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_analyze_file_tool.py +0 -0
  526. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_architecture_ledger_is_true.py +0 -0
  527. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_architecture_report.py +0 -0
  528. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_aria_cli_core.py +0 -0
  529. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_aria_mcp_server.py +0 -0
  530. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_aria_sdk.py +0 -0
  531. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_artifact_publishing.py +0 -0
  532. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_artifacts_and_reports.py +0 -0
  533. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ashare_prediction_cmds.py +0 -0
  534. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_background_processes.py +0 -0
  535. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_backtest_cmds.py +0 -0
  536. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_backtest_engine.py +0 -0
  537. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_backtest_report.py +0 -0
  538. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_backtest_runs_what_it_names.py +0 -0
  539. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
  540. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_broken_akshare_is_optional.py +0 -0
  541. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_broker_automation.py +0 -0
  542. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_broker_chat_confirm_gate.py +0 -0
  543. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_broker_planning.py +0 -0
  544. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_broker_safety.py +0 -0
  545. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_broker_tools.py +0 -0
  546. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_budget.py +0 -0
  547. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_business_workflow_cmds.py +0 -0
  548. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_canva_client.py +0 -0
  549. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_canvas_cmds.py +0 -0
  550. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_card_approvals.py +0 -0
  551. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_channel_intake.py +0 -0
  552. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_channels.py +0 -0
  553. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_chart_handlers.py +0 -0
  554. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_chat_bots_fail_closed.py +0 -0
  555. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_chat_routing.py +0 -0
  556. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ci_security_workflow.py +0 -0
  557. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_cli_app_split.py +0 -0
  558. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_cli_bootstrap.py +0 -0
  559. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_cli_config_store.py +0 -0
  560. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_cli_lifecycle_hooks.py +0 -0
  561. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_cli_runtime_consumer.py +0 -0
  562. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_cli_tool_executor_module.py +0 -0
  563. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_cloud_memory.py +0 -0
  564. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_code_audit_tools.py +0 -0
  565. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_code_review_agent.py +0 -0
  566. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_codegen_output.py +0 -0
  567. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_coder_tester_self_healing.py +0 -0
  568. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_coder_tool_safety.py +0 -0
  569. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_collaboration.py +0 -0
  570. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_command_loggers.py +0 -0
  571. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_command_safety.py +0 -0
  572. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_compare_strategies.py +0 -0
  573. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_completions_builder.py +0 -0
  574. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_config_paths.py +0 -0
  575. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_configured_provider.py +0 -0
  576. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_container_entrypoint.py +0 -0
  577. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_container_entrypoints.py +0 -0
  578. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_context_checkpoints.py +0 -0
  579. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_context_references.py +0 -0
  580. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_context_service.py +0 -0
  581. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_conversation_core.py +0 -0
  582. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_crash_report.py +0 -0
  583. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_credential_file_permissions.py +0 -0
  584. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_custom_providers.py +0 -0
  585. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_daemon_gateway_config.py +0 -0
  586. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_dashboard_generator.py +0 -0
  587. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_data_service.py +0 -0
  588. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_data_service_imports.py +0 -0
  589. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_data_without_model.py +0 -0
  590. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_datasource_routing.py +0 -0
  591. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_deep_analysis.py +0 -0
  592. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_degrades_without_quant_engine.py +0 -0
  593. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_doctor.py +0 -0
  594. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_doctor_describes_the_current_install.py +0 -0
  595. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_doctor_npm_scope.py +0 -0
  596. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_edit_and_command_safety.py +0 -0
  597. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_engine_boundary.py +0 -0
  598. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_english_output_group.py +0 -0
  599. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_enterprise_tool_honesty.py +0 -0
  600. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_env_switch_docs.py +0 -0
  601. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_eval_summary.py +0 -0
  602. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_eval_task_bank.py +0 -0
  603. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_eval_trajectories.py +0 -0
  604. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_evals_harness.py +0 -0
  605. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_event_import_roots.py +0 -0
  606. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_exec_events.py +0 -0
  607. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_extended_tools.py +0 -0
  608. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_feishu_swarm_config.py +0 -0
  609. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_file_links.py +0 -0
  610. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_finalize_release.py +0 -0
  611. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_finance_renderers.py +0 -0
  612. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_finance_service_catalog.py +0 -0
  613. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_first_run_output.py +0 -0
  614. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_first_run_works.py +0 -0
  615. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_football_agent.py +0 -0
  616. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_football_prediction_output.py +0 -0
  617. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_google_cloud_models.py +0 -0
  618. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_google_cloud_routing.py +0 -0
  619. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_google_login.py +0 -0
  620. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_google_search_provider.py +0 -0
  621. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_headless_command_approval.py +0 -0
  622. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_headless_is_agentic.py +0 -0
  623. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_honest_surfaces.py +0 -0
  624. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_image_gen_tools.py +0 -0
  625. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_image_inputs.py +0 -0
  626. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_import_graph_budget.py +0 -0
  627. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_intent_router.py +0 -0
  628. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_intent_signals.py +0 -0
  629. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_kling_video_client.py +0 -0
  630. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_lazy_rebind.py +0 -0
  631. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_legacy_module_imports.py +0 -0
  632. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_license_consistency.py +0 -0
  633. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_licensing.py +0 -0
  634. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_local_image_provider.py +0 -0
  635. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_local_workspace_execution.py +0 -0
  636. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_logistics_3pl.py +0 -0
  637. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_logistics_and_finance_agents.py +0 -0
  638. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_lsp.py +0 -0
  639. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_markdown_pdf.py +0 -0
  640. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_market_answers_in_english.py +0 -0
  641. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_market_data_client.py +0 -0
  642. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_market_history_inheritance.py +0 -0
  643. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_market_history_tool.py +0 -0
  644. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_market_hours.py +0 -0
  645. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_market_questions_on_backend.py +0 -0
  646. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_market_symbol_extraction.py +0 -0
  647. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_market_universe.py +0 -0
  648. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_mcp_circuit.py +0 -0
  649. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_mcp_client.py +0 -0
  650. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_mentions.py +0 -0
  651. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_model_capability_registry.py +0 -0
  652. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_model_choice_is_the_users.py +0 -0
  653. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_model_selection_state.py +0 -0
  654. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_narrow_chinese_output.py +0 -0
  655. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_native_binary_entrypoints.py +0 -0
  656. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_native_installer.py +0 -0
  657. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_natural_language_routing.py +0 -0
  658. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_new_modules.py +0 -0
  659. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
  660. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_no_tools_route.py +0 -0
  661. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_no_uncommitted_imports.py +0 -0
  662. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_numeric_listings.py +0 -0
  663. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ollama_stream_imports.py +0 -0
  664. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ollama_stream_tools.py +0 -0
  665. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_openai_image_client.py +0 -0
  666. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_operations_suite.py +0 -0
  667. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_os_sandbox.py +0 -0
  668. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_output_discipline_prompt.py +0 -0
  669. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_packages_facade.py +0 -0
  670. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_packaging_constraints.py +0 -0
  671. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_packaging_manifest.py +0 -0
  672. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_packs_domains.py +0 -0
  673. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_pdf_report.py +0 -0
  674. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_pick_best_installed_model.py +0 -0
  675. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_plan_mode.py +0 -0
  676. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_platform_package_assembly.py +0 -0
  677. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_platform_packages.py +0 -0
  678. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_platform_publish.py +0 -0
  679. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_plotly_html_output.py +0 -0
  680. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_portfolio_language.py +0 -0
  681. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_portfolio_ledger.py +0 -0
  682. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_post_turn_context_decision.py +0 -0
  683. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_preflight.py +0 -0
  684. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_preview_server.py +0 -0
  685. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_privacy_feedback.py +0 -0
  686. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_project_aria.py +0 -0
  687. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_project_context_files.py +0 -0
  688. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_project_review.py +0 -0
  689. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_project_review_api.py +0 -0
  690. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_prompt_assembly.py +0 -0
  691. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_prompt_selection.py +0 -0
  692. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_provider_autoconfig.py +0 -0
  693. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_provider_error_messages.py +0 -0
  694. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_provider_integration.py +0 -0
  695. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_provider_registry.py +0 -0
  696. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_public_service_status.py +0 -0
  697. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_quant_engine_namespace.py +0 -0
  698. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_rebind_contract.py +0 -0
  699. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_rebind_namespace_contract.py +0 -0
  700. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_relay_client_credentials.py +0 -0
  701. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_relay_event_verification.py +0 -0
  702. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_relay_sends_for_clients.py +0 -0
  703. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_relay_store.py +0 -0
  704. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_relay_url.py +0 -0
  705. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_release_chain.py +0 -0
  706. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_release_commit_identity.py +0 -0
  707. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_release_reaches_the_registries.py +0 -0
  708. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_release_verification_waits.py +0 -0
  709. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_release_workflow_permissions.py +0 -0
  710. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_report_charts.py +0 -0
  711. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_report_generator.py +0 -0
  712. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_report_prompt_language.py +0 -0
  713. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_research_protocol.py +0 -0
  714. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_research_quality.py +0 -0
  715. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_responsive_rendering.py +0 -0
  716. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_review_service.py +0 -0
  717. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_risk_earnings_ops.py +0 -0
  718. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_root_module_budget.py +0 -0
  719. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_rsi_without_pandas_ta.py +0 -0
  720. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_acceptance.py +0 -0
  721. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_agent_loop.py +0 -0
  722. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_approval.py +0 -0
  723. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_bridge.py +0 -0
  724. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_bridge_fallback.py +0 -0
  725. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_checkpoints.py +0 -0
  726. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_event_identity.py +0 -0
  727. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_gateway.py +0 -0
  728. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_repo_map.py +0 -0
  729. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_run_store.py +0 -0
  730. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_tool_executor.py +0 -0
  731. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runtime_worktrees.py +0 -0
  732. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_runway_video_client.py +0 -0
  733. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_safety_permissions.py +0 -0
  734. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_safety_service.py +0 -0
  735. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_safety_service_adoption.py +0 -0
  736. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_service_diagnostics_security.py +0 -0
  737. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_session_search.py +0 -0
  738. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_settings_service.py +0 -0
  739. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_shell_commands_as_written.py +0 -0
  740. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_shipper_digest.py +0 -0
  741. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_single_import_root.py +0 -0
  742. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_skill_agent_binding.py +0 -0
  743. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_skill_catalog.py +0 -0
  744. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_skill_loader.py +0 -0
  745. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_slash_popup.py +0 -0
  746. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_spreadsheet_tools.py +0 -0
  747. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_sse_stream_contract.py +0 -0
  748. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_startup_dashboard.py +0 -0
  749. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_startup_keeps_cloud_model.py +0 -0
  750. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_status_language.py +0 -0
  751. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_streaming_pipeline.py +0 -0
  752. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_stripe_agent.py +0 -0
  753. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_subagent.py +0 -0
  754. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_supervisor_routing.py +0 -0
  755. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_system_prompts.py +0 -0
  756. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_system_tools_output.py +0 -0
  757. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_task_orchestrator.py +0 -0
  758. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_team_analysts.py +0 -0
  759. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_team_synthesis.py +0 -0
  760. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_terminal_mixins.py +0 -0
  761. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_terminal_snapshots.py +0 -0
  762. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_tls_trust_store.py +0 -0
  763. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_tool_policy.py +0 -0
  764. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
  765. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_tool_scope.py +0 -0
  766. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_tool_step_output.py +0 -0
  767. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_trading_service.py +0 -0
  768. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_tradingview_bridge.py +0 -0
  769. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_turn_planning.py +0 -0
  770. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ui_completer_references.py +0 -0
  771. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ui_console_theme.py +0 -0
  772. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ui_input_box.py +0 -0
  773. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ui_language_and_model.py +0 -0
  774. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_ui_robot_banner.py +0 -0
  775. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_verification_hint.py +0 -0
  776. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_verification_policy.py +0 -0
  777. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_version_consistency.py +0 -0
  778. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_version_counter.py +0 -0
  779. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_vertex_empty_rounds.py +0 -0
  780. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_vertex_models.py +0 -0
  781. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_video_analysis.py +0 -0
  782. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_video_editor.py +0 -0
  783. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_vscode_mcp.py +0 -0
  784. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_warehouse_agents.py +0 -0
  785. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_warehouse_cli_registration.py +0 -0
  786. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_warehouse_erp_client.py +0 -0
  787. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_warehouse_workflow.py +0 -0
  788. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_workspace_changes.py +0 -0
  789. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_workspace_context.py +0 -0
  790. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_workspace_files.py +0 -0
  791. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_workspace_scope.py +0 -0
  792. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_workspace_service.py +0 -0
  793. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_workspace_verify.py +0 -0
  794. {aria_code-0.110.0 → aria_code-0.111.0}/tests/test_wrapped_indent.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.110.0
3
+ Version: 0.111.0
4
4
  Summary: Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/artheras/aria-code
@@ -169,8 +169,9 @@ Numbers you can check, client data kept apart, actions a person approves.</p>
169
169
  <p align="center"><a href="README_CN.md">简体中文</a> · English</p>
170
170
 
171
171
  <p align="center">
172
- <a href="https://www.npmjs.com/package/@artheras/aria-code"><img src="https://img.shields.io/npm/v/@artheras/aria-code?style=flat-square&logo=npm&label=npm" alt="npm version"></a>
173
- <a href="https://pypi.org/project/aria-code/"><img src="https://img.shields.io/pypi/v/aria-code?style=flat-square&logo=pypi&label=PyPI" alt="PyPI version"></a>
172
+ <a href="https://www.npmjs.com/package/@artheras/aria-code"><img src="https://img.shields.io/npm/v/@artheras/aria-code/latest?style=flat-square&logo=npm&label=npm" alt="npm version"></a>
173
+ <!-- Release automation pins PyPI: the default endpoint still selects legacy 4.x. -->
174
+ <a href="https://pypi.org/project/aria-code/0.111.0/"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Faria-code%2F0.111.0%2Fjson&amp;query=%24.info.version&amp;prefix=v&amp;style=flat-square&amp;logo=pypi&amp;label=PyPI&amp;color=blue&amp;cacheSeconds=300" alt="PyPI version"></a>
174
175
  <a href="https://github.com/artheras/aria-code/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/artheras/aria-code/ci.yml?branch=main&style=flat-square&logo=githubactions&label=CI" alt="CI status"></a>
175
176
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-64748b?style=flat-square" alt="Apache License 2.0"></a>
176
177
  </p>
@@ -230,12 +231,16 @@ Aria checks for a newer stable version in the background at startup, at most onc
230
231
  ```bash
231
232
  aria update --check # check without installing
232
233
  aria update # install the newest stable version for this install channel
234
+ aria update --to 0.110.0 # choose a specific stable release
235
+ aria update --rollback # native macOS/Linux: restore the previous managed release offline
233
236
  ```
234
237
 
235
238
  In an interactive session, use `/update --check` or `/update`, then restart Aria. Native updates verify SHA-256 and the downloaded binary's version before switching the command; a failed download or verification leaves the existing command in place. Startup checks only notify. To disable them, set `check_for_update_on_startup` to `false` in `~/.aria-code/config.json`.
236
239
 
237
240
  For GitHub notifications, open [this repository](https://github.com/artheras/aria-code), select **Watch → Custom → Releases**, and save. Notifications follow your GitHub notification settings. Published stable releases appear on the [release page](https://github.com/artheras/aria-code/releases/latest) once the platform assets and package publishing have completed.
238
241
 
242
+ Native macOS/Linux updates retain interrupted transfers and can use the verified official npm platform artifact when GitHub downloads fail. For recovery and a model generation check (`aria health --model --tools --json`), see [updates and model diagnostics](docs/update-and-model-diagnostics.md).
243
+
239
244
  To use a local model, install [Ollama](https://ollama.com/download), pull a coding model, and start Aria in local-only mode:
240
245
 
241
246
  ```bash
@@ -13,8 +13,9 @@ Numbers you can check, client data kept apart, actions a person approves.</p>
13
13
  <p align="center"><a href="README_CN.md">简体中文</a> · English</p>
14
14
 
15
15
  <p align="center">
16
- <a href="https://www.npmjs.com/package/@artheras/aria-code"><img src="https://img.shields.io/npm/v/@artheras/aria-code?style=flat-square&logo=npm&label=npm" alt="npm version"></a>
17
- <a href="https://pypi.org/project/aria-code/"><img src="https://img.shields.io/pypi/v/aria-code?style=flat-square&logo=pypi&label=PyPI" alt="PyPI version"></a>
16
+ <a href="https://www.npmjs.com/package/@artheras/aria-code"><img src="https://img.shields.io/npm/v/@artheras/aria-code/latest?style=flat-square&logo=npm&label=npm" alt="npm version"></a>
17
+ <!-- Release automation pins PyPI: the default endpoint still selects legacy 4.x. -->
18
+ <a href="https://pypi.org/project/aria-code/0.111.0/"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Faria-code%2F0.111.0%2Fjson&amp;query=%24.info.version&amp;prefix=v&amp;style=flat-square&amp;logo=pypi&amp;label=PyPI&amp;color=blue&amp;cacheSeconds=300" alt="PyPI version"></a>
18
19
  <a href="https://github.com/artheras/aria-code/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/artheras/aria-code/ci.yml?branch=main&style=flat-square&logo=githubactions&label=CI" alt="CI status"></a>
19
20
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-64748b?style=flat-square" alt="Apache License 2.0"></a>
20
21
  </p>
@@ -74,12 +75,16 @@ Aria checks for a newer stable version in the background at startup, at most onc
74
75
  ```bash
75
76
  aria update --check # check without installing
76
77
  aria update # install the newest stable version for this install channel
78
+ aria update --to 0.110.0 # choose a specific stable release
79
+ aria update --rollback # native macOS/Linux: restore the previous managed release offline
77
80
  ```
78
81
 
79
82
  In an interactive session, use `/update --check` or `/update`, then restart Aria. Native updates verify SHA-256 and the downloaded binary's version before switching the command; a failed download or verification leaves the existing command in place. Startup checks only notify. To disable them, set `check_for_update_on_startup` to `false` in `~/.aria-code/config.json`.
80
83
 
81
84
  For GitHub notifications, open [this repository](https://github.com/artheras/aria-code), select **Watch → Custom → Releases**, and save. Notifications follow your GitHub notification settings. Published stable releases appear on the [release page](https://github.com/artheras/aria-code/releases/latest) once the platform assets and package publishing have completed.
82
85
 
86
+ Native macOS/Linux updates retain interrupted transfers and can use the verified official npm platform artifact when GitHub downloads fail. For recovery and a model generation check (`aria health --model --tools --json`), see [updates and model diagnostics](docs/update-and-model-diagnostics.md).
87
+
83
88
  To use a local model, install [Ollama](https://ollama.com/download), pull a coding model, and start Aria in local-only mode:
84
89
 
85
90
  ```bash
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "aria-code"
7
- version = "0.110.0"
7
+ version = "0.111.0"
8
8
  description = "Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
@@ -17,4 +17,4 @@ from __future__ import annotations
17
17
 
18
18
  __all__ = ["__version__"]
19
19
 
20
- __version__ = "0.110.0"
20
+ __version__ = "0.111.0"
@@ -227,6 +227,29 @@ class DiagnosticCommandsMixin:
227
227
  print()
228
228
 
229
229
  async def cmd_health(self, args: str):
230
+ try:
231
+ parts = shlex.split(args)
232
+ except ValueError:
233
+ message = "Usage: /health [--model] [--tools] [--json]"
234
+ self.context.console.print(message) if self.context.has_rich else print(message)
235
+ return
236
+ if parts:
237
+ if any(part not in {"--model", "--tools", "--json"} for part in parts):
238
+ message = "Usage: /health [--model] [--tools] [--json]"
239
+ self.context.console.print(message) if self.context.has_rich else print(message)
240
+ return
241
+ if not any(part in {"--model", "--tools"} for part in parts):
242
+ message = "Run /health --model --json to explicitly test model generation."
243
+ self.context.console.print(message) if self.context.has_rich else print(message)
244
+ return
245
+ from aria_code.apps.cli.model_probe import probe_model
246
+ report = await probe_model(self.terminal.config, self.terminal.api_url, tools="--tools" in parts)
247
+ message = json.dumps(report.to_dict(), ensure_ascii=False) if "--json" in parts else (
248
+ f"{report.model} · {report.route} · {report.category}: {report.message}"
249
+ + (f"\n{report.suggestion}" if report.suggestion else "")
250
+ )
251
+ self.context.console.print(message, markup=False) if self.context.has_rich else print(message)
252
+ return
230
253
  import aiohttp
231
254
  if self.context.has_rich:
232
255
  self.context.console.print()
@@ -251,10 +274,12 @@ class DiagnosticCommandsMixin:
251
274
  self.context.console.print(f" [green]●[/green] [dim]{label}[/dim] {detail}")
252
275
  else:
253
276
  print(f" + {label} {detail}")
254
- except Exception:
277
+ except Exception as exc:
278
+ from aria_code.packages.aria_services.provider_health import classify_provider_error
279
+ category = classify_provider_error(label, exc).category
255
280
  if self.context.has_rich:
256
- self.context.console.print(f" [red]●[/red] [dim]{label}[/dim] offline")
281
+ self.context.console.print(f" [red]●[/red] [dim]{label}[/dim] {category}")
257
282
  else:
258
- print(f" - {label} offline")
283
+ print(f" - {label} {category}")
259
284
  if self.context.has_rich:
260
285
  self.context.console.print()
@@ -0,0 +1,166 @@
1
+ """Explicit model diagnostics using the selected transport, without file tools."""
2
+ from __future__ import annotations
3
+
4
+ import argparse
5
+ import asyncio
6
+ from dataclasses import asdict, dataclass
7
+ import json
8
+ import time
9
+
10
+ from aria_code.apps.cli.providers.chat_routing import first_round_route
11
+ from aria_code.packages.aria_services.provider_health import classify_provider_error
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class ModelProbe:
16
+ model: str
17
+ route: str
18
+ success: bool
19
+ category: str
20
+ message: str
21
+ duration_ms: int
22
+ text_verified: bool = False
23
+ tools_verified: bool = False
24
+ provider: str = ""
25
+ first_token_ms: int | None = None
26
+ suggestion: str = ""
27
+ schema: str = "aria.model_probe.v1"
28
+
29
+ def to_dict(self) -> dict:
30
+ return asdict(self)
31
+
32
+
33
+ _PROBE_TOOL = {"type": "function", "function": {
34
+ "name": "aria_probe_ping",
35
+ "description": "A diagnostic echo with no file access or side effects.",
36
+ "parameters": {"type": "object", "properties": {"echo": {"type": "string"}}, "required": ["echo"]},
37
+ }}
38
+
39
+
40
+ async def probe_model(config: dict, api_url: str = "", *, tools: bool = False,
41
+ timeout: float = 30) -> ModelProbe:
42
+ """One text request, optionally one inert tool call and its round trip.
43
+
44
+ Do not use the agent gateway: its provider fallback and project tools can
45
+ hide a broken primary route or perform work. Never change saved settings.
46
+ """
47
+ from aria_code.apps.cli.providers.base import AriaSSEProvider, ConfiguredProvider, OllamaProvider
48
+ from aria_code.packages.aria_sdk.streaming import stream_provider_result
49
+
50
+ cfg = dict(config)
51
+ model = str(cfg.get("model") or "")
52
+ route = first_round_route(model, cfg, api_url)
53
+ started = time.monotonic()
54
+ cancel = asyncio.Event()
55
+ text_ok = tool_ok = False
56
+ provider_name = ""
57
+ first_token = None
58
+
59
+ def token(_text):
60
+ nonlocal first_token
61
+ if _text.strip() and first_token is None:
62
+ first_token = round((time.monotonic() - started) * 1000)
63
+
64
+ def result(ok, category, message, suggestion=""):
65
+ return ModelProbe(model, route, ok, category, message,
66
+ round((time.monotonic() - started) * 1000),
67
+ text_ok, tool_ok, provider_name, first_token, suggestion)
68
+
69
+ def failed(error):
70
+ raw = str(error or "empty_response")
71
+ if "backend_local_tools_unsupported" in raw or "tool_protocol" in raw:
72
+ return result(False, "protocol_unsupported", "Backend does not support the local tool protocol.",
73
+ "Update the backend protocol or use a direct provider for local project tasks.")
74
+ issue = classify_provider_error(provider_name or route, error)
75
+ suggestions = {
76
+ "auth": "Check credentials and project permissions; for Google Cloud, verify gcloud/ADC authorization.",
77
+ "configuration": "Set your Google Cloud project: /config set gcp_project=<project-id> or GOOGLE_CLOUD_PROJECT.",
78
+ "model_unavailable": "Check the selected model ID, project and serving region with /model.",
79
+ "rate_limited": "Wait for the quota cooldown or check the provider quota.",
80
+ "timeout": "Check network and provider latency; increase --timeout if needed.",
81
+ "no_data": "The selected route returned no visible text; check its streaming/model configuration.",
82
+ }
83
+ return result(False, issue.category, issue.message,
84
+ suggestions.get(issue.category, "Check the selected provider and connection settings."))
85
+
86
+ def provider(local_tools=False):
87
+ if route == "cloud":
88
+ return AriaSSEProvider(api_url, model, auth_token=cfg.get("auth_token"),
89
+ use_react_gateway=bool(cfg.get("arthera_react_gateway")),
90
+ local_tools=local_tools)
91
+ if route == "ollama":
92
+ return OllamaProvider(str(cfg.get("ollama_url") or "http://localhost:11434"), model,
93
+ system_override="Only perform the requested diagnostic.",
94
+ show_market_prefetch_status=False)
95
+ return ConfiguredProvider(cfg, model)
96
+
97
+ async def run():
98
+ nonlocal text_ok, tool_ok, provider_name
99
+ reply = await stream_provider_result(provider(), "Reply with the single word READY.", [],
100
+ tools=[], cancel_event=cancel, on_token=token)
101
+ provider_name = str(reply.get("provider") or route)
102
+ if not reply.get("success") or not str(reply.get("response") or "").strip():
103
+ return failed(reply.get("error") or "empty_response")
104
+ text_ok = True
105
+ if not tools:
106
+ return result(True, "ok", "Selected model returned visible text.")
107
+ diagnostic = provider(local_tools=True)
108
+ request = "Call aria_probe_ping exactly once with echo='READY'. Do not answer in text before calling it."
109
+ call = await stream_provider_result(diagnostic, request, [], tools=[_PROBE_TOOL], cancel_event=cancel)
110
+ if not call.get("success"):
111
+ return failed(call.get("error"))
112
+ calls = list(call.get("tool_calls_pending") or [])
113
+ if len(calls) != 1 or calls[0].get("tool") != "aria_probe_ping" or calls[0].get("params") != {"echo": "READY"}:
114
+ return result(False, "tool_protocol", "Model did not return the requested diagnostic tool call.",
115
+ "Check that this model and transport support function calling.")
116
+ history = [{"role": "user", "content": request},
117
+ {"role": "assistant", "content": "", "tool_calls": [{"id": "aria-probe-1", "type": "function",
118
+ "function": {"name": "aria_probe_ping", "arguments": '{"echo":"READY"}'}}]},
119
+ {"role": "tool", "name": "aria_probe_ping", "tool_call_id": "aria-probe-1", "content": '{"echo":"READY"}'}]
120
+ reply = await stream_provider_result(diagnostic, "The diagnostic tool returned READY. Reply READY.", history,
121
+ tools=[], cancel_event=cancel)
122
+ if not reply.get("success") or not str(reply.get("response") or "").strip():
123
+ return failed(reply.get("error") or "empty_response")
124
+ tool_ok = True
125
+ return result(True, "ok", "Selected model returned text and completed the diagnostic tool round trip.")
126
+
127
+ try:
128
+ return await asyncio.wait_for(run(), timeout=timeout)
129
+ except asyncio.TimeoutError:
130
+ return failed("model probe timed out")
131
+ except Exception as exc:
132
+ return failed(exc)
133
+ finally:
134
+ cancel.set()
135
+
136
+
137
+ def main(argv=None) -> int:
138
+ """Fast standalone equivalent of /health --model; no REPL or agent import."""
139
+ parser = argparse.ArgumentParser(prog="aria health", description="Probe the selected model without accessing project files")
140
+ parser.add_argument("--model", action="store_true", help="Send a short text generation request")
141
+ parser.add_argument("--tools", action="store_true", help="Also verify an inert tool call and its result")
142
+ parser.add_argument("--model-id", help="Probe this model without changing your saved selection")
143
+ parser.add_argument("--timeout", type=float, default=30, help="Total probe deadline in seconds (1–60)")
144
+ parser.add_argument("--json", action="store_true")
145
+ args = parser.parse_args(argv)
146
+ if not 1 <= args.timeout <= 60:
147
+ parser.error("--timeout must be between 1 and 60 seconds")
148
+ from aria_code.apps.cli.bootstrap import initialize_cli_environment, default_config, runtime_paths
149
+ from aria_code.apps.cli.config_store import load_cli_config
150
+
151
+ initialize_cli_environment()
152
+ cfg = load_cli_config(runtime_paths(), default_config())
153
+ if args.model_id:
154
+ cfg["model"] = args.model_id
155
+ if not (args.model or args.tools):
156
+ report = ModelProbe(str(cfg.get("model") or ""), first_round_route(str(cfg.get("model") or ""), cfg, cfg.get("api_url")),
157
+ False, "not_probed", "Run aria health --model to test generation; add --tools to test function calling.", 0)
158
+ else:
159
+ report = asyncio.run(probe_model(cfg, str(cfg.get("api_url") or ""), tools=args.tools, timeout=args.timeout))
160
+ if args.json:
161
+ print(json.dumps(report.to_dict(), ensure_ascii=False))
162
+ else:
163
+ print(f"{report.model} · {report.route} · {report.category}: {report.message}")
164
+ if report.suggestion:
165
+ print(report.suggestion)
166
+ return 0 if report.success else (2 if report.category == "not_probed" else 1)
@@ -12,6 +12,7 @@ Implement the protocol on any class or pass a coroutine that matches
12
12
  from __future__ import annotations
13
13
 
14
14
  import asyncio
15
+ from contextlib import suppress
15
16
  from dataclasses import dataclass, field
16
17
  from typing import AsyncGenerator, Optional, Protocol, runtime_checkable
17
18
 
@@ -129,27 +130,34 @@ async def _stream_callback_provider(invoke, *, done_provider: str) -> AsyncGener
129
130
  task = asyncio.create_task(
130
131
  invoke(_on_token, _on_thinking, _on_tool_call, _on_tool_result, _on_status)
131
132
  )
132
- while not task.done() or not queue.empty():
133
+ try:
134
+ while not task.done() or not queue.empty():
135
+ try:
136
+ yield await asyncio.wait_for(queue.get(), timeout=0.05)
137
+ except asyncio.TimeoutError:
138
+ continue
133
139
  try:
134
- yield await asyncio.wait_for(queue.get(), timeout=0.05)
135
- except asyncio.TimeoutError:
136
- continue
140
+ result = await task
141
+ except Exception as exc:
142
+ yield LLMDone(response="", provider=done_provider, success=False, error=str(exc))
143
+ return
137
144
 
138
- try:
139
- result = await task
140
- except Exception as exc:
141
- yield LLMDone(response="", provider=done_provider, success=False, error=str(exc))
142
- return
143
-
144
- yield LLMDone(
145
- response=result.get("response", ""),
146
- tool_calls_pending=result.get("tool_calls_pending", []),
147
- usage=result.get("usage", {}),
148
- provider=result.get("provider", done_provider),
149
- success=result.get("success", False),
150
- cancelled=result.get("cancelled", False),
151
- error=result.get("error", ""),
152
- )
145
+ yield LLMDone(
146
+ response=result.get("response", ""),
147
+ tool_calls_pending=result.get("tool_calls_pending", []),
148
+ usage=result.get("usage", {}),
149
+ provider=result.get("provider", done_provider),
150
+ success=result.get("success", False),
151
+ cancelled=result.get("cancelled", False),
152
+ error=result.get("error", ""),
153
+ )
154
+ finally:
155
+ # A deadline or an early-closing consumer must also stop the request
156
+ # behind this callback adapter, rather than leave it running invisibly.
157
+ if not task.done():
158
+ task.cancel()
159
+ with suppress(asyncio.CancelledError, Exception):
160
+ await task
153
161
 
154
162
 
155
163
  # ── Protocol ─────────────────────────────────────────────────────────────────
@@ -0,0 +1,159 @@
1
+ """Bounded, resumable release transfers. Activation still verifies the digest."""
2
+ from __future__ import annotations
3
+
4
+ from contextlib import contextmanager
5
+ import http.client
6
+ import json
7
+ import os
8
+ from pathlib import Path
9
+ import re
10
+ import sys
11
+ import time
12
+ import urllib.error
13
+ import urllib.request
14
+
15
+
16
+ class DownloadTimeout(TimeoutError):
17
+ pass
18
+
19
+
20
+ @contextmanager
21
+ def _lock(path: Path):
22
+ # Native downloads run on macOS/Linux; flock releases on process exit,
23
+ # including Ctrl+C. Do not let two updates append to the same partial file.
24
+ path.parent.mkdir(parents=True, exist_ok=True)
25
+ fd = os.open(str(path), os.O_CREAT | os.O_RDWR | getattr(os, "O_NOFOLLOW", 0), 0o600)
26
+ try:
27
+ try:
28
+ if os.name == "nt":
29
+ import msvcrt
30
+
31
+ if not os.fstat(fd).st_size:
32
+ os.write(fd, b"0")
33
+ os.lseek(fd, 0, os.SEEK_SET)
34
+ msvcrt.locking(fd, msvcrt.LK_NBLCK, 1)
35
+ else:
36
+ import fcntl
37
+
38
+ fcntl.flock(fd, fcntl.LOCK_EX | fcntl.LOCK_NB)
39
+ except OSError as exc:
40
+ raise RuntimeError("Another update is downloading this release; wait for it to finish") from exc
41
+ yield
42
+ finally:
43
+ os.close(fd)
44
+
45
+
46
+ def download(url: str, target: Path, *, deadline_seconds: float = 300,
47
+ attempts: int = 3, progress=None) -> None:
48
+ """Keep a partial across attempts/runs; resume only a validated byte range.
49
+
50
+ A server ignoring Range starts a fresh file. Invalid Content-Range, changed
51
+ total size or contradictory validators are never appended. Read in single
52
+ socket-buffer chunks so a trickle cannot evade the total deadline.
53
+ """
54
+ target = Path(target)
55
+ part = target.with_name(target.name + ".part")
56
+ state = target.with_name(target.name + ".part.json")
57
+ limit = time.monotonic() + deadline_seconds
58
+ last_progress = 0.0
59
+
60
+ def report(received, total, complete=False):
61
+ nonlocal last_progress
62
+ now = time.monotonic()
63
+ if not complete and now - last_progress < 1:
64
+ return
65
+ last_progress = now
66
+ if progress:
67
+ progress(received, total)
68
+ elif sys.stderr.isatty():
69
+ size = f"{received / 1048576:.1f} MiB"
70
+ if total:
71
+ size += f" / {total / 1048576:.1f} MiB ({min(100, received * 100 // total)}%)"
72
+ print(f"\rDownloading {target.name}: {size}", end="\n" if complete else "", file=sys.stderr, flush=True)
73
+
74
+ with _lock(target.with_name(target.name + ".lock")):
75
+ try:
76
+ metadata = json.loads(state.read_text())
77
+ except (OSError, ValueError):
78
+ metadata = {}
79
+ if metadata.get("url") != url:
80
+ part.unlink(missing_ok=True)
81
+ metadata = {"url": url}
82
+ for attempt in range(attempts):
83
+ left = limit - time.monotonic()
84
+ if left <= 0:
85
+ raise DownloadTimeout("Download exceeded its total deadline; partial retained for the next update")
86
+ offset = part.stat().st_size if part.is_file() else 0
87
+ headers = {"User-Agent": "aria-code-updater", "Accept": "*/*", "Accept-Encoding": "identity"}
88
+ if offset:
89
+ headers["Range"] = f"bytes={offset}-"
90
+ if metadata.get("validator"):
91
+ headers["If-Range"] = metadata["validator"]
92
+ try:
93
+ request = urllib.request.Request(url, headers=headers)
94
+ with urllib.request.urlopen(request, timeout=min(15, left)) as response:
95
+ response_headers = getattr(response, "headers", {})
96
+ status = getattr(response, "status", 200)
97
+ etag = response_headers.get("ETag", "")
98
+ validator = (etag if etag and not etag.startswith("W/") else response_headers.get("Last-Modified"))
99
+ total = None
100
+ mode = "wb"
101
+ if status == 206:
102
+ match = re.fullmatch(r"bytes (\d+)-(\d+)/(\d+)", response_headers.get("Content-Range", ""))
103
+ if not match or int(match[1]) != offset or int(match[2]) < offset:
104
+ raise ValueError("Release server returned an invalid resume range")
105
+ total = int(match[3])
106
+ if int(match[2]) >= total or (metadata.get("total") and metadata["total"] != total):
107
+ raise ValueError("Release size changed during a resumed download")
108
+ if metadata.get("validator") and validator and metadata["validator"] != validator:
109
+ raise ValueError("Release changed during a resumed download")
110
+ mode = "ab"
111
+ else:
112
+ offset = 0
113
+ length = response_headers.get("Content-Length")
114
+ total = int(length) if length else None
115
+ metadata = {"url": url, "validator": validator, "total": total}
116
+ state.write_text(json.dumps(metadata))
117
+ received = offset
118
+ with part.open(mode) as output:
119
+ reader = getattr(response, "read1", response.read)
120
+ while True:
121
+ if time.monotonic() >= limit:
122
+ raise DownloadTimeout("Download exceeded its total deadline; partial retained")
123
+ chunk = reader(65536)
124
+ if time.monotonic() >= limit:
125
+ raise DownloadTimeout("Download exceeded its total deadline; partial retained")
126
+ if not chunk:
127
+ break
128
+ output.write(chunk)
129
+ received += len(chunk)
130
+ report(received, total)
131
+ if total is not None and received != total:
132
+ raise OSError("Incomplete release transfer")
133
+ os.replace(part, target)
134
+ state.unlink(missing_ok=True)
135
+ report(received, total, True)
136
+ return
137
+ except urllib.error.HTTPError as exc:
138
+ if exc.code == 416:
139
+ # A stale/complete partial is not trusted as a completed
140
+ # response. Re-fetch it; the outer installer checks its hash.
141
+ part.unlink(missing_ok=True)
142
+ state.unlink(missing_ok=True)
143
+ metadata = {"url": url}
144
+ elif exc.code not in {408, 429, 500, 502, 503, 504}:
145
+ raise
146
+ if attempt + 1 == attempts:
147
+ raise
148
+ except DownloadTimeout:
149
+ raise
150
+ except ValueError:
151
+ part.unlink(missing_ok=True)
152
+ state.unlink(missing_ok=True)
153
+ raise
154
+ except (OSError, urllib.error.URLError, http.client.HTTPException):
155
+ if attempt + 1 == attempts:
156
+ raise
157
+ delay = min(2 ** attempt, max(0, limit - time.monotonic()))
158
+ time.sleep(delay)
159
+ raise OSError("Release download did not complete")
@@ -31,6 +31,14 @@ _CACHE_FILE = aria_home() / "update_check.json"
31
31
  _CACHE_TTL_S = 86_400 # 24 hours
32
32
  _FETCH_TIMEOUT = 4 # seconds — fail cleanly on slow networks
33
33
 
34
+ # These are the project's historical PyPI releases (June–August 2026),
35
+ # published before the current 0.x line. Do not treat arbitrary future 4.x
36
+ # versions as legacy, or recommend these old artifacts to a current install.
37
+ _LEGACY_VERSIONS = frozenset({
38
+ (4, 1, 3), (4, 1, 4), (4, 1, 7), (4, 2, 0),
39
+ (4, 3, 0), (4, 4, 0), (4, 4, 1), (4, 4, 2),
40
+ })
41
+
34
42
  _notice: Optional[str] = None
35
43
  _lock = threading.Lock()
36
44
 
@@ -46,7 +54,13 @@ def _parse(v: str) -> tuple[int, int, int] | None:
46
54
 
47
55
  def _newer(latest: str, current: str) -> bool:
48
56
  parsed_latest, parsed_current = _parse(latest), _parse(current)
49
- return parsed_latest is not None and parsed_current is not None and parsed_latest > parsed_current
57
+ if parsed_latest is None or parsed_current is None:
58
+ return False
59
+ if parsed_current in _LEGACY_VERSIONS and parsed_latest[0] == 0:
60
+ return True
61
+ if parsed_latest in _LEGACY_VERSIONS and parsed_current[0] == 0:
62
+ return False
63
+ return parsed_latest > parsed_current
50
64
 
51
65
 
52
66
  # ── Cache helpers ─────────────────────────────────────────────────────────────