aria-code 0.74.0__tar.gz → 0.76.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 (723) hide show
  1. {aria_code-0.74.0/src/aria_code.egg-info → aria_code-0.76.0}/PKG-INFO +5 -5
  2. {aria_code-0.74.0 → aria_code-0.76.0}/README.md +4 -4
  3. {aria_code-0.74.0 → aria_code-0.76.0}/pyproject.toml +1 -1
  4. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/_version.py +1 -1
  5. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +72 -23
  6. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/update_check.py +19 -15
  7. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/aria_cli.py +3 -0
  8. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/doctor.py +3 -3
  9. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/logistics_carriers.py +7 -2
  10. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/logistics_inventory.py +1 -1
  11. {aria_code-0.74.0 → aria_code-0.76.0/src/aria_code.egg-info}/PKG-INFO +5 -5
  12. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_logistics_3pl.py +21 -1
  13. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_update_health_routes.py +19 -1
  14. {aria_code-0.74.0 → aria_code-0.76.0}/LICENSE +0 -0
  15. {aria_code-0.74.0 → aria_code-0.76.0}/NOTICE +0 -0
  16. {aria_code-0.74.0 → aria_code-0.76.0}/setup.cfg +0 -0
  17. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/__init__.py +0 -0
  18. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/adk_apps/__init__.py +0 -0
  19. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
  20. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
  21. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
  22. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
  23. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/__init__.py +0 -0
  24. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/base.py +0 -0
  25. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/code_review.py +0 -0
  26. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/__init__.py +0 -0
  27. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
  28. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/critic.py +0 -0
  29. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/deepen.py +0 -0
  30. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/models.py +0 -0
  31. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/pipeline.py +0 -0
  32. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
  33. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/themes.py +0 -0
  34. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/deep/tiers.py +0 -0
  35. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/engineering/__init__.py +0 -0
  36. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/engineering/coder.py +0 -0
  37. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/engineering/tester.py +0 -0
  38. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/__init__.py +0 -0
  39. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
  40. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/catalyst.py +0 -0
  41. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
  42. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/debate.py +0 -0
  43. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/earnings.py +0 -0
  44. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/fundamental.py +0 -0
  45. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/macro.py +0 -0
  46. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/news.py +0 -0
  47. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/risk.py +0 -0
  48. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/sector.py +0 -0
  49. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/strategist.py +0 -0
  50. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
  51. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/synthesis.py +0 -0
  52. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/financial/technical.py +0 -0
  53. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/orchestrator.py +0 -0
  54. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/portfolio_agent.py +0 -0
  55. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/__init__.py +0 -0
  56. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
  57. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/business_match.py +0 -0
  58. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
  59. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
  60. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
  61. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
  62. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
  63. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
  64. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
  65. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/registry.py +0 -0
  66. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/signal_scheme.py +0 -0
  67. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/sports/__init__.py +0 -0
  68. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/sports/football_agent.py +0 -0
  69. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/supervisor.py +0 -0
  70. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/team.py +0 -0
  71. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
  72. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
  73. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
  74. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
  75. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
  76. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
  77. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
  78. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
  79. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
  80. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
  81. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
  82. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/aliyun_data_client.py +0 -0
  83. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/README.md +0 -0
  84. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/__init__.py +0 -0
  85. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/channels/README.md +0 -0
  86. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/channels/__init__.py +0 -0
  87. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/channels/approvals.py +0 -0
  88. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/channels/conversation.py +0 -0
  89. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/channels/digest.py +0 -0
  90. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/channels/intake.py +0 -0
  91. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/channels/registry.py +0 -0
  92. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/channels/tradingview.py +0 -0
  93. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/README.md +0 -0
  94. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/__init__.py +0 -0
  95. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/_optional.py +0 -0
  96. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
  97. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/broker_render.py +0 -0
  98. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
  99. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
  100. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
  101. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
  102. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
  103. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
  104. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
  105. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
  106. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
  107. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
  108. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
  109. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
  110. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/core_cmds.py +0 -0
  111. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
  112. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
  113. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
  114. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
  115. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
  116. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
  117. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/market.py +0 -0
  118. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
  119. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
  120. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
  121. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
  122. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
  123. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
  124. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
  125. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +0 -0
  126. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/report.py +0 -0
  127. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
  128. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
  129. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
  130. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/team.py +0 -0
  131. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
  132. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
  133. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
  134. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
  135. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/config_paths.py +0 -0
  136. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/config_store.py +0 -0
  137. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/constants.py +0 -0
  138. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/context.py +0 -0
  139. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/deterministic.py +0 -0
  140. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/direct.py +0 -0
  141. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
  142. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/football_reports.py +0 -0
  143. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
  144. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/google_login.py +0 -0
  145. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
  146. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
  147. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
  148. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
  149. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
  150. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
  151. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
  152. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/helpers.py +0 -0
  153. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/hooks.py +0 -0
  154. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/i18n.py +0 -0
  155. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/intent.py +0 -0
  156. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/intent_router.py +0 -0
  157. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
  158. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
  159. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
  160. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/main.py +0 -0
  161. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
  162. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/market_universe.py +0 -0
  163. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/message_processing.py +0 -0
  164. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
  165. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
  166. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
  167. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
  168. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
  169. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/preflight.py +0 -0
  170. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/project_aria.py +0 -0
  171. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
  172. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
  173. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
  174. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
  175. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
  176. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
  177. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
  178. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
  179. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
  180. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/base.py +0 -0
  181. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
  182. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
  183. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
  184. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
  185. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
  186. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
  187. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
  188. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +0 -0
  189. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
  190. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
  191. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/sandbox.py +0 -0
  192. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/session_export.py +0 -0
  193. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
  194. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/session_store.py +0 -0
  195. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
  196. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
  197. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
  198. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
  199. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
  200. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
  201. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tools/context.py +0 -0
  202. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
  203. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
  204. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
  205. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
  206. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
  207. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
  208. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
  209. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
  210. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
  211. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/daemon/README.md +0 -0
  212. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/vscode/README.md +0 -0
  213. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/apps/vscode/package.json +0 -0
  214. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/aria_daemon.py +0 -0
  215. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/aria_feishu_bot.py +0 -0
  216. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/aria_mcp_server.py +0 -0
  217. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/aria_relay_client.py +0 -0
  218. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/aria_relay_server.py +0 -0
  219. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/aria_telegram_bot.py +0 -0
  220. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ariarc.py +0 -0
  221. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/artifacts.py +0 -0
  222. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/backtest_engine.py +0 -0
  223. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/backtest_report.py +0 -0
  224. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/__init__.py +0 -0
  225. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/automation.py +0 -0
  226. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/base.py +0 -0
  227. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/capabilities.py +0 -0
  228. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/cn/__init__.py +0 -0
  229. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
  230. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
  231. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
  232. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
  233. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
  234. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/config.py +0 -0
  235. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/intl/__init__.py +0 -0
  236. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
  237. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
  238. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
  239. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
  240. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/paper_broker.py +0 -0
  241. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/planning.py +0 -0
  242. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/registry.py +0 -0
  243. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/brokers/trading.py +0 -0
  244. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/canva_client.py +0 -0
  245. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/change_store.py +0 -0
  246. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/__init__.py +0 -0
  247. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
  248. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/aria_relay_client.py +0 -0
  249. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/canva_client.py +0 -0
  250. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/figma_client.py +0 -0
  251. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/football_data_client.py +0 -0
  252. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/kling_video_client.py +0 -0
  253. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/market_data_client.py +0 -0
  254. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/openai_image_client.py +0 -0
  255. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/runway_video_client.py +0 -0
  256. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
  257. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/cloud_memory.py +0 -0
  258. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/command_safety.py +0 -0
  259. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/computer_use_tools.py +0 -0
  260. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/dashboard_generator.py +0 -0
  261. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/data_analysis_tools.py +0 -0
  262. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/data_cleaner.py +0 -0
  263. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/data_service.py +0 -0
  264. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/__init__.py +0 -0
  265. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/base.py +0 -0
  266. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/router.py +0 -0
  267. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/__init__.py +0 -0
  268. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
  269. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
  270. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
  271. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
  272. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
  273. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
  274. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
  275. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
  276. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
  277. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/demo_player.py +0 -0
  278. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/domain/__init__.py +0 -0
  279. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/domain/backtest_engine.py +0 -0
  280. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/domain/backtest_report.py +0 -0
  281. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/domain/finance_formulas.py +0 -0
  282. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
  283. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/domain/strategy_vault.py +0 -0
  284. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/evals/__init__.py +0 -0
  285. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/evals/harness.py +0 -0
  286. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/evals/runner.py +0 -0
  287. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/external_agent_runner.py +0 -0
  288. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/figma_client.py +0 -0
  289. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/file_analysis_tools.py +0 -0
  290. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/finance_formulas.py +0 -0
  291. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/football_data_client.py +0 -0
  292. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/image_gen_tools.py +0 -0
  293. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/intent_classifier.py +0 -0
  294. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/kling_video_client.py +0 -0
  295. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/licensing.py +0 -0
  296. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/local_finance_tools.py +0 -0
  297. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/local_image_provider.py +0 -0
  298. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/local_llm_provider.py +0 -0
  299. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/macro_tools.py +0 -0
  300. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/markdown_pdf.py +0 -0
  301. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/market_data_client.py +0 -0
  302. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/mcp_client.py +0 -0
  303. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/memory_manager.py +0 -0
  304. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/model_capability.py +0 -0
  305. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/notification_tools.py +0 -0
  306. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/openai_image_client.py +0 -0
  307. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/__init__.py +0 -0
  308. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
  309. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
  310. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
  311. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
  312. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
  313. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
  314. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
  315. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_core/export.py +0 -0
  316. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
  317. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_core/paths.py +0 -0
  318. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
  319. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
  320. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
  321. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
  322. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_infra/product.py +0 -0
  323. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
  324. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
  325. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
  326. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
  327. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
  328. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
  329. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
  330. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
  331. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
  332. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
  333. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
  334. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
  335. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
  336. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/cache.py +0 -0
  337. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/context.py +0 -0
  338. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
  339. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/data.py +0 -0
  340. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
  341. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/references.py +0 -0
  342. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/registry.py +0 -0
  343. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
  344. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
  345. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/settings.py +0 -0
  346. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_services/usage.py +0 -0
  347. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
  348. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
  349. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
  350. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
  351. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
  352. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
  353. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
  354. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
  355. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
  356. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
  357. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
  358. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
  359. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
  360. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
  361. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
  362. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
  363. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
  364. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
  365. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
  366. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
  367. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
  368. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
  369. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
  370. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
  371. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
  372. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
  373. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
  374. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
  375. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
  376. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
  377. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
  378. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
  379. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
  380. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
  381. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
  382. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packs/__init__.py +0 -0
  383. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packs/base.py +0 -0
  384. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packs/finance/__init__.py +0 -0
  385. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packs/logistics/__init__.py +0 -0
  386. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packs/payments/__init__.py +0 -0
  387. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packs/realty/__init__.py +0 -0
  388. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packs/registry.py +0 -0
  389. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/packs/rules.py +0 -0
  390. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/plan_utils.py +0 -0
  391. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/plugin_loader.py +0 -0
  392. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/portfolio_ledger.py +0 -0
  393. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/preview_server.py +0 -0
  394. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/privacy/__init__.py +0 -0
  395. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/privacy/feedback.py +0 -0
  396. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/project_review.py +0 -0
  397. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/project_review_api.py +0 -0
  398. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/project_review_server.py +0 -0
  399. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/project_tools.py +0 -0
  400. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/__init__.py +0 -0
  401. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/llm/__init__.py +0 -0
  402. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/llm/anthropic.py +0 -0
  403. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
  404. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/llm/base.py +0 -0
  405. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/llm/custom.py +0 -0
  406. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/llm/ollama.py +0 -0
  407. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
  408. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/llm/registry.py +0 -0
  409. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/local_image_provider.py +0 -0
  410. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/providers/local_llm_provider.py +0 -0
  411. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/realty_data_tools.py +0 -0
  412. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/relay_store.py +0 -0
  413. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/report_exporters.py +0 -0
  414. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/report_generator.py +0 -0
  415. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/__init__.py +0 -0
  416. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/acceptance.py +0 -0
  417. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/agent_loop.py +0 -0
  418. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/approval.py +0 -0
  419. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/budget.py +0 -0
  420. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/checkpoints.py +0 -0
  421. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/crash_report.py +0 -0
  422. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/events.py +0 -0
  423. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/gateway.py +0 -0
  424. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/lsp.py +0 -0
  425. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/orchestrator.py +0 -0
  426. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/repo_map.py +0 -0
  427. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/run_state.py +0 -0
  428. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/run_store.py +0 -0
  429. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/self_healing.py +0 -0
  430. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/subagent.py +0 -0
  431. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/task_ledger.py +0 -0
  432. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
  433. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/tool_executor.py +0 -0
  434. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/tool_policy.py +0 -0
  435. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runtime/worktrees.py +0 -0
  436. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/runway_video_client.py +0 -0
  437. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/safety/__init__.py +0 -0
  438. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/safety/permissions.py +0 -0
  439. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/safety/service.py +0 -0
  440. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/setup_wizard.py +0 -0
  441. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/spreadsheet_tools.py +0 -0
  442. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/strategy_vault.py +0 -0
  443. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/__init__.py +0 -0
  444. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/artifact_tools.py +0 -0
  445. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/broker_tools.py +0 -0
  446. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/build_quant_engine.py +0 -0
  447. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/code_audit_tools.py +0 -0
  448. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/computer_use_tools.py +0 -0
  449. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
  450. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
  451. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/extended_tools.py +0 -0
  452. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
  453. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/image_gen_tools.py +0 -0
  454. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/local_finance_tools.py +0 -0
  455. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/logistics_io.py +0 -0
  456. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
  457. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/logistics_tools.py +0 -0
  458. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/macro_tools.py +0 -0
  459. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/notification_tools.py +0 -0
  460. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/project_tools.py +0 -0
  461. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/realty_data_tools.py +0 -0
  462. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
  463. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/tools/stripe_tools.py +0 -0
  464. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/__init__.py +0 -0
  465. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/banner.py +0 -0
  466. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/completer.py +0 -0
  467. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/console.py +0 -0
  468. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/image_render.py +0 -0
  469. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/input_box.py +0 -0
  470. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/picker.py +0 -0
  471. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/render/__init__.py +0 -0
  472. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/render/finance.py +0 -0
  473. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/render/market.py +0 -0
  474. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/render/output.py +0 -0
  475. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/render/responsive.py +0 -0
  476. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/render/team.py +0 -0
  477. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/robot.py +0 -0
  478. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/ui/startup_dashboard.py +0 -0
  479. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/utils/vscode_uri.py +0 -0
  480. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/video_analysis.py +0 -0
  481. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/video_editor.py +0 -0
  482. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/workspace/__init__.py +0 -0
  483. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/workspace/files.py +0 -0
  484. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/workspace/verify.py +0 -0
  485. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/workspace_changes.py +0 -0
  486. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/workspace_context.py +0 -0
  487. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/workspace_service.py +0 -0
  488. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code/workspace_tools.py +0 -0
  489. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code.egg-info/SOURCES.txt +0 -0
  490. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
  491. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code.egg-info/entry_points.txt +0 -0
  492. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code.egg-info/requires.txt +0 -0
  493. {aria_code-0.74.0 → aria_code-0.76.0}/src/aria_code.egg-info/top_level.txt +0 -0
  494. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_adk_market_tools.py +0 -0
  495. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_agent_team_fallback.py +0 -0
  496. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_analyze_file_tool.py +0 -0
  497. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_architecture_ledger_is_true.py +0 -0
  498. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_architecture_report.py +0 -0
  499. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_aria_cli_core.py +0 -0
  500. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_aria_mcp_server.py +0 -0
  501. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_aria_sdk.py +0 -0
  502. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_artifact_publishing.py +0 -0
  503. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_artifacts_and_reports.py +0 -0
  504. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_ashare_prediction_cmds.py +0 -0
  505. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_backtest_cmds.py +0 -0
  506. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_backtest_engine.py +0 -0
  507. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_backtest_report.py +0 -0
  508. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
  509. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_broken_akshare_is_optional.py +0 -0
  510. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_broker_automation.py +0 -0
  511. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_broker_chat_confirm_gate.py +0 -0
  512. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_broker_planning.py +0 -0
  513. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_broker_safety.py +0 -0
  514. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_broker_tools.py +0 -0
  515. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_budget.py +0 -0
  516. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_business_workflow_cmds.py +0 -0
  517. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_canva_client.py +0 -0
  518. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_canvas_cmds.py +0 -0
  519. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_card_approvals.py +0 -0
  520. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_channel_intake.py +0 -0
  521. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_channels.py +0 -0
  522. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_chart_handlers.py +0 -0
  523. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_chat_bots_fail_closed.py +0 -0
  524. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_chat_routing.py +0 -0
  525. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_ci_security_workflow.py +0 -0
  526. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_cli_app_split.py +0 -0
  527. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_cli_bootstrap.py +0 -0
  528. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_cli_config_store.py +0 -0
  529. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_cli_lifecycle_hooks.py +0 -0
  530. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_cli_runtime_consumer.py +0 -0
  531. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_cli_tool_executor_module.py +0 -0
  532. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_cloud_memory.py +0 -0
  533. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_code_audit_tools.py +0 -0
  534. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_code_review_agent.py +0 -0
  535. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_codegen_output.py +0 -0
  536. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_coder_tester_self_healing.py +0 -0
  537. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_coder_tool_safety.py +0 -0
  538. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_collaboration.py +0 -0
  539. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_command_loggers.py +0 -0
  540. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_command_safety.py +0 -0
  541. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_completions_builder.py +0 -0
  542. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_config_paths.py +0 -0
  543. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_configured_provider.py +0 -0
  544. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_container_entrypoint.py +0 -0
  545. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_container_entrypoints.py +0 -0
  546. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_context_checkpoints.py +0 -0
  547. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_context_references.py +0 -0
  548. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_context_service.py +0 -0
  549. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_conversation_core.py +0 -0
  550. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_crash_report.py +0 -0
  551. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_credential_file_permissions.py +0 -0
  552. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_custom_providers.py +0 -0
  553. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_daemon_gateway_config.py +0 -0
  554. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_dashboard_generator.py +0 -0
  555. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_data_service.py +0 -0
  556. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_data_service_imports.py +0 -0
  557. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_datasource_routing.py +0 -0
  558. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_deep_analysis.py +0 -0
  559. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_degrades_without_quant_engine.py +0 -0
  560. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
  561. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_doctor.py +0 -0
  562. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_doctor_describes_the_current_install.py +0 -0
  563. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_doctor_npm_scope.py +0 -0
  564. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_engine_boundary.py +0 -0
  565. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_enterprise_tool_honesty.py +0 -0
  566. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_env_switch_docs.py +0 -0
  567. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_evals_harness.py +0 -0
  568. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_extended_tools.py +0 -0
  569. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_feishu_swarm_config.py +0 -0
  570. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_finalize_release.py +0 -0
  571. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_finance_renderers.py +0 -0
  572. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_finance_service_catalog.py +0 -0
  573. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_first_run_works.py +0 -0
  574. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_football_agent.py +0 -0
  575. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_football_prediction_output.py +0 -0
  576. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_google_cloud_routing.py +0 -0
  577. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_google_login.py +0 -0
  578. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_google_search_provider.py +0 -0
  579. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_headless_is_agentic.py +0 -0
  580. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_honest_surfaces.py +0 -0
  581. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_image_gen_tools.py +0 -0
  582. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_image_inputs.py +0 -0
  583. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_import_graph_budget.py +0 -0
  584. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_intent_router.py +0 -0
  585. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_intent_signals.py +0 -0
  586. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_kling_video_client.py +0 -0
  587. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_lazy_rebind.py +0 -0
  588. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_legacy_module_imports.py +0 -0
  589. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_license_consistency.py +0 -0
  590. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_licensing.py +0 -0
  591. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_local_image_provider.py +0 -0
  592. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_logistics_and_finance_agents.py +0 -0
  593. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_lsp.py +0 -0
  594. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_markdown_pdf.py +0 -0
  595. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_market_data_client.py +0 -0
  596. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_market_history_inheritance.py +0 -0
  597. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_market_history_tool.py +0 -0
  598. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_market_symbol_extraction.py +0 -0
  599. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_market_universe.py +0 -0
  600. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_mcp_circuit.py +0 -0
  601. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_mcp_client.py +0 -0
  602. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_model_capability_registry.py +0 -0
  603. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_model_choice_is_the_users.py +0 -0
  604. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_model_selection_state.py +0 -0
  605. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_native_binary_entrypoints.py +0 -0
  606. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_native_installer.py +0 -0
  607. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_new_modules.py +0 -0
  608. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
  609. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_no_uncommitted_imports.py +0 -0
  610. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_ollama_stream_imports.py +0 -0
  611. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_ollama_stream_tools.py +0 -0
  612. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_openai_image_client.py +0 -0
  613. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_operations_suite.py +0 -0
  614. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_output_rendering.py +0 -0
  615. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_packages_facade.py +0 -0
  616. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_packaging_constraints.py +0 -0
  617. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_packaging_manifest.py +0 -0
  618. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_packs_domains.py +0 -0
  619. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_pdf_report.py +0 -0
  620. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_pick_best_installed_model.py +0 -0
  621. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_plan_mode.py +0 -0
  622. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_platform_package_assembly.py +0 -0
  623. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_platform_packages.py +0 -0
  624. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_plotly_html_output.py +0 -0
  625. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_portfolio_ledger.py +0 -0
  626. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_post_turn_context_decision.py +0 -0
  627. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_preflight.py +0 -0
  628. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_preview_server.py +0 -0
  629. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_privacy_feedback.py +0 -0
  630. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_project_aria.py +0 -0
  631. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_project_review.py +0 -0
  632. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_project_review_api.py +0 -0
  633. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_prompt_assembly.py +0 -0
  634. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_prompt_selection.py +0 -0
  635. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_provider_autoconfig.py +0 -0
  636. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_provider_error_messages.py +0 -0
  637. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_provider_integration.py +0 -0
  638. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_provider_registry.py +0 -0
  639. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_public_service_status.py +0 -0
  640. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_quant_engine_namespace.py +0 -0
  641. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_rebind_contract.py +0 -0
  642. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_rebind_namespace_contract.py +0 -0
  643. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_relay_client_credentials.py +0 -0
  644. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_relay_event_verification.py +0 -0
  645. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_relay_sends_for_clients.py +0 -0
  646. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_relay_store.py +0 -0
  647. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_relay_url.py +0 -0
  648. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_release_chain.py +0 -0
  649. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_release_commit_identity.py +0 -0
  650. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_release_push_is_atomic.py +0 -0
  651. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_release_reaches_the_registries.py +0 -0
  652. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_release_verification_waits.py +0 -0
  653. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_release_workflow_permissions.py +0 -0
  654. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_report_charts.py +0 -0
  655. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_report_generator.py +0 -0
  656. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_research_protocol.py +0 -0
  657. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_research_quality.py +0 -0
  658. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_responsive_rendering.py +0 -0
  659. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_root_module_budget.py +0 -0
  660. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_rsi_without_pandas_ta.py +0 -0
  661. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_acceptance.py +0 -0
  662. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_agent_loop.py +0 -0
  663. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_approval.py +0 -0
  664. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_bridge.py +0 -0
  665. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_bridge_fallback.py +0 -0
  666. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_checkpoints.py +0 -0
  667. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_gateway.py +0 -0
  668. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_repo_map.py +0 -0
  669. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_run_store.py +0 -0
  670. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_tool_executor.py +0 -0
  671. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runtime_worktrees.py +0 -0
  672. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_runway_video_client.py +0 -0
  673. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_safety_permissions.py +0 -0
  674. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_safety_service.py +0 -0
  675. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_safety_service_adoption.py +0 -0
  676. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_service_diagnostics_security.py +0 -0
  677. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_session_search.py +0 -0
  678. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_settings_service.py +0 -0
  679. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_shipper_digest.py +0 -0
  680. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_single_import_root.py +0 -0
  681. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_skill_agent_binding.py +0 -0
  682. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_skill_catalog.py +0 -0
  683. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_skill_loader.py +0 -0
  684. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_spreadsheet_tools.py +0 -0
  685. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_sse_stream_contract.py +0 -0
  686. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_startup_dashboard.py +0 -0
  687. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_startup_latency.py +0 -0
  688. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_streaming_pipeline.py +0 -0
  689. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_stripe_agent.py +0 -0
  690. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_subagent.py +0 -0
  691. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_supervisor_routing.py +0 -0
  692. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_system_prompts.py +0 -0
  693. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_system_tools_output.py +0 -0
  694. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_task_orchestrator.py +0 -0
  695. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_team_synthesis.py +0 -0
  696. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_tls_trust_store.py +0 -0
  697. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_tool_policy.py +0 -0
  698. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_tool_scope.py +0 -0
  699. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_trading_service.py +0 -0
  700. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_tradingview_bridge.py +0 -0
  701. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_turn_planning.py +0 -0
  702. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_ui_completer_references.py +0 -0
  703. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_ui_console_theme.py +0 -0
  704. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_ui_input_box.py +0 -0
  705. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_ui_robot_banner.py +0 -0
  706. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_verification_hint.py +0 -0
  707. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_verification_policy.py +0 -0
  708. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_version_consistency.py +0 -0
  709. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_version_counter.py +0 -0
  710. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_video_analysis.py +0 -0
  711. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_video_editor.py +0 -0
  712. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_vscode_mcp.py +0 -0
  713. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_warehouse_agents.py +0 -0
  714. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_warehouse_cli_registration.py +0 -0
  715. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_warehouse_erp_client.py +0 -0
  716. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_warehouse_workflow.py +0 -0
  717. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_wheel_is_installable.py +0 -0
  718. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_workspace_changes.py +0 -0
  719. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_workspace_context.py +0 -0
  720. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_workspace_files.py +0 -0
  721. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_workspace_scope.py +0 -0
  722. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_workspace_service.py +0 -0
  723. {aria_code-0.74.0 → aria_code-0.76.0}/tests/test_workspace_verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.74.0
3
+ Version: 0.76.0
4
4
  Summary: Open-source AI agent for logistics and finance work: 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
@@ -175,8 +175,8 @@ Numbers you can check, client data kept apart, actions a person approves.</p>
175
175
  <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
176
  </p>
177
177
 
178
- <p align="center"><img src="docs/assets/demo-coding-workflow.gif" alt="Real Aria Code terminal recording: failing tests, source inspection, code edit, and passing tests" width="860"></p>
179
- <p align="center"><sub>Recorded from a real Aria Code terminal session on a temporary test fixture; idle time is shortened. This shows direct CLI commands, not an autonomous model edit. <a href="docs/assets/demo-coding-workflow.png">Still screenshot</a> · <a href="scripts/render_terminal_capture.py">Capture renderer</a>.</sub></p>
178
+ <p align="center"><img src="docs/assets/demo-logistics.gif" alt="Real Aria Code terminal recording: reorder points for one shipper, a refusal to mix two shippers' data, and a carrier scorecard with a saving and two anomalies" width="860"></p>
179
+ <p align="center"><sub>Recorded from a real Aria Code session on the sample 3PL data in <code>evals/fixtures</code>. No model is called, so every number on screen comes from the tools; pauses are shortened. <a href="docs/assets/demo-logistics.png">Still screenshot</a> · <a href="scripts/record_logistics_demo.py">Recorder</a> · <a href="scripts/render_logistics_demo.py">Renderer</a>.</sub></p>
180
180
 
181
181
  ## What Aria Code does
182
182
 
@@ -188,7 +188,7 @@ A general-purpose assistant aims for an answer that reads well. In logistics and
188
188
 
189
189
  **Actions a person approves.** In Feishu, each shipper's group gets a daily digest of reorders, dead stock and freight anomalies. `/补货` turns the reorder list into a purchase-order draft card; nothing happens until an authorised approver presses approve, and what runs is exactly what was shown. The draft is a file for your own purchasing system — Aria Code places no orders.
190
190
 
191
- Underneath is a terminal coding agent: it inspects project files, applies edits, runs commands and tests, and explains the changes, with a local Ollama model or a supported cloud provider. A fresh install has no live business data; the logistics tools read your exports (CSV or JSON), and the chat features need a Feishu app or the Aria relay.
191
+ Underneath is a terminal coding agent: it inspects project files, applies edits, runs commands and tests, and explains the changes ([recording](docs/assets/demo-coding-workflow.gif)), with a local Ollama model or a supported cloud provider. A fresh install has no live business data; the logistics tools read your exports (CSV or JSON), and the chat features need a Feishu app or the Aria relay.
192
192
 
193
193
  ## Quick start
194
194
 
@@ -208,7 +208,7 @@ aria
208
208
 
209
209
  The installer downloads the binary for your OS from the latest [GitHub release](https://github.com/artheras/aria-code/releases/latest), checks its SHA-256 digest, and installs it in your user account. Open a new terminal to start the interactive CLI with `aria`, `aria code`, or `aria-code`. Set `ARIA_CODE_VERSION=v0.55.0` to pin a release.
210
210
 
211
- Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade aria-code` (requires Python 3.10+). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).
211
+ Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade "aria-code<4"` (requires Python 3.10+; the `<4` skips an older 4.x numbering that PyPI still lists). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).
212
212
 
213
213
  To use a local model, install [Ollama](https://ollama.com/download), pull a coding model, and start Aria in local-only mode:
214
214
 
@@ -19,8 +19,8 @@ Numbers you can check, client data kept apart, actions a person approves.</p>
19
19
  <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
20
  </p>
21
21
 
22
- <p align="center"><img src="docs/assets/demo-coding-workflow.gif" alt="Real Aria Code terminal recording: failing tests, source inspection, code edit, and passing tests" width="860"></p>
23
- <p align="center"><sub>Recorded from a real Aria Code terminal session on a temporary test fixture; idle time is shortened. This shows direct CLI commands, not an autonomous model edit. <a href="docs/assets/demo-coding-workflow.png">Still screenshot</a> · <a href="scripts/render_terminal_capture.py">Capture renderer</a>.</sub></p>
22
+ <p align="center"><img src="docs/assets/demo-logistics.gif" alt="Real Aria Code terminal recording: reorder points for one shipper, a refusal to mix two shippers' data, and a carrier scorecard with a saving and two anomalies" width="860"></p>
23
+ <p align="center"><sub>Recorded from a real Aria Code session on the sample 3PL data in <code>evals/fixtures</code>. No model is called, so every number on screen comes from the tools; pauses are shortened. <a href="docs/assets/demo-logistics.png">Still screenshot</a> · <a href="scripts/record_logistics_demo.py">Recorder</a> · <a href="scripts/render_logistics_demo.py">Renderer</a>.</sub></p>
24
24
 
25
25
  ## What Aria Code does
26
26
 
@@ -32,7 +32,7 @@ A general-purpose assistant aims for an answer that reads well. In logistics and
32
32
 
33
33
  **Actions a person approves.** In Feishu, each shipper's group gets a daily digest of reorders, dead stock and freight anomalies. `/补货` turns the reorder list into a purchase-order draft card; nothing happens until an authorised approver presses approve, and what runs is exactly what was shown. The draft is a file for your own purchasing system — Aria Code places no orders.
34
34
 
35
- Underneath is a terminal coding agent: it inspects project files, applies edits, runs commands and tests, and explains the changes, with a local Ollama model or a supported cloud provider. A fresh install has no live business data; the logistics tools read your exports (CSV or JSON), and the chat features need a Feishu app or the Aria relay.
35
+ Underneath is a terminal coding agent: it inspects project files, applies edits, runs commands and tests, and explains the changes ([recording](docs/assets/demo-coding-workflow.gif)), with a local Ollama model or a supported cloud provider. A fresh install has no live business data; the logistics tools read your exports (CSV or JSON), and the chat features need a Feishu app or the Aria relay.
36
36
 
37
37
  ## Quick start
38
38
 
@@ -52,7 +52,7 @@ aria
52
52
 
53
53
  The installer downloads the binary for your OS from the latest [GitHub release](https://github.com/artheras/aria-code/releases/latest), checks its SHA-256 digest, and installs it in your user account. Open a new terminal to start the interactive CLI with `aria`, `aria code`, or `aria-code`. Set `ARIA_CODE_VERSION=v0.55.0` to pin a release.
54
54
 
55
- Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade aria-code` (requires Python 3.10+). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).
55
+ Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade "aria-code<4"` (requires Python 3.10+; the `<4` skips an older 4.x numbering that PyPI still lists). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).
56
56
 
57
57
  To use a local model, install [Ollama](https://ollama.com/download), pull a coding model, and start Aria in local-only mode:
58
58
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "aria-code"
7
- version = "0.74.0"
7
+ version = "0.76.0"
8
8
  description = "Open-source AI agent for logistics and finance work: 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.74.0"
20
+ __version__ = "0.76.0"
@@ -118,6 +118,56 @@ def _parse_logistics_args(args: str, usage: str) -> dict | None:
118
118
  return params
119
119
 
120
120
 
121
+ _LABELS = {
122
+ "en": {
123
+ "inventory_usage": "Usage: /inventory <skus.csv|json> [--owner SHIPPER | --all-owners] "
124
+ "[--service-level 0.95] [--review-days 7] [--json]",
125
+ "carriers_usage": "Usage: /carriers <waybills.csv|json> [--owner SHIPPER | --all-owners] "
126
+ "[--min-shipments 20] [--json]",
127
+ "reorder": " Reorder {sku}: order {qty} · reorder point {rop} · safety stock {ss} · {cover} days of cover · {cls}",
128
+ "dead": " Dead stock {sku}: {on_hand:g} on hand",
129
+ "slow": " Slow-moving {sku}: {on_hand:g} on hand",
130
+ "basis": "Basis: ",
131
+ "sep": "; ",
132
+ "too_few": "too few shipments",
133
+ "on_time": "{rate:.0%} (lower bound {low:.0%})",
134
+ "no_on_time": "no on-time data",
135
+ "carrier": " {lane} {rank} {carrier}: {n} shipments · on time {on_time} · {cost}",
136
+ "saving": " Save {amount:,.2f}: {lane}, move {src} → {dst} ({diff:.2f}/kg cheaper)",
137
+ "check": " Check {waybill} ({carrier}): {detail}",
138
+ },
139
+ "zh": {
140
+ "inventory_usage": "用法: /inventory <skus.csv|json> [--owner 货主ID | --all-owners] "
141
+ "[--service-level 0.95] [--review-days 7] [--json]",
142
+ "carriers_usage": "用法: /carriers <waybills.csv|json> [--owner 货主ID | --all-owners] "
143
+ "[--min-shipments 20] [--json]",
144
+ "reorder": " 补货 {sku}: 建议 {qty} 件 · 补货点 {rop} · 安全库存 {ss} · 可用 {cover} 天 · {cls}",
145
+ "dead": " 呆滞 {sku}: 在库 {on_hand:g}",
146
+ "slow": " 慢动 {sku}: 在库 {on_hand:g}",
147
+ "basis": "依据: ",
148
+ "sep": ";",
149
+ "too_few": "样本不足",
150
+ "on_time": "{rate:.0%}(下界 {low:.0%})",
151
+ "no_on_time": "无准时记录",
152
+ "carrier": " {lane} {rank} {carrier}: {n} 单 · 准时 {on_time} · {cost}",
153
+ "saving": " 可节省 {amount:,.2f}: {lane} 由 {src} 转 {dst}(每 kg 低 {diff:.2f})",
154
+ "check": " 核实 {waybill} ({carrier}): {detail}",
155
+ },
156
+ }
157
+
158
+
159
+ def _labels(self) -> dict:
160
+ """Labels in the UI language. The tools' summaries and formulas stay English."""
161
+ config = getattr(getattr(self, "terminal", None), "config", None) or {}
162
+ lang = str(config.get("ui_lang", "en") or "en").lower()
163
+ return _LABELS["zh" if lang.startswith("zh") else "en"]
164
+
165
+
166
+ def _abc_xyz(item: dict) -> str:
167
+ # ABC needs a unit cost; without one it is unknown, which a bare "-X" hid.
168
+ return f"ABC/XYZ {item['abc'] or '–'}/{item['xyz'] or '–'}"
169
+
170
+
121
171
  def _emit(self, text: str, style: str = "") -> None:
122
172
  if self.context.has_rich and style:
123
173
  self.context.console.print(f"[{style}]{text}[/{style}]")
@@ -137,16 +187,12 @@ class LogisticsCommandsMixin:
137
187
  tool; a 3PL operator needs a way in that does not depend on that.
138
188
  """
139
189
 
140
- _INVENTORY_USAGE = ("用法: /inventory <skus.csv|json> [--owner 货主ID | --all-owners] "
141
- "[--service-level 0.95] [--review-days 7] [--json]")
142
- _CARRIERS_USAGE = ("用法: /carriers <waybills.csv|json> [--owner 货主ID | --all-owners] "
143
- "[--min-shipments 20] [--json]")
144
-
145
190
  async def cmd_inventory(self, args: str):
146
191
  """Reorder points, safety stock, ABC/XYZ and dead stock for one shipper."""
147
- params = _parse_logistics_args(args, self._INVENTORY_USAGE)
192
+ text = _labels(self)
193
+ params = _parse_logistics_args(args, text["inventory_usage"])
148
194
  if params is None:
149
- _emit(self, self._INVENTORY_USAGE, "yellow")
195
+ _emit(self, text["inventory_usage"], "yellow")
150
196
  return
151
197
  from aria_code.tools.logistics_inventory import tool_plan_inventory_policy
152
198
 
@@ -165,20 +211,20 @@ class LogisticsCommandsMixin:
165
211
  for item in data["items"]:
166
212
  if item["action"] != "reorder":
167
213
  continue
168
- _emit(self, f" 补货 {item['sku']}: 建议 {item['suggested_order_qty']} 件 · "
169
- f"补货点 {item['reorder_point']} · 安全库存 {item['safety_stock']} · "
170
- f"可用 {item['days_of_cover']} 天 · {item['abc'] or '-'}{item['xyz'] or ''}")
214
+ _emit(self, text["reorder"].format(
215
+ sku=item["sku"], qty=item["suggested_order_qty"], rop=item["reorder_point"],
216
+ ss=item["safety_stock"], cover=item["days_of_cover"], cls=_abc_xyz(item)))
171
217
  for item in data["items"]:
172
218
  if item["movement"] in ("dead", "slow"):
173
- label = "呆滞" if item["movement"] == "dead" else "慢动"
174
- _emit(self, f" {label} {item['sku']}: 在库 {item['on_hand']:g}", "yellow")
175
- _emit(self, "依据: " + ";".join(data["assumptions"]), "dim")
219
+ _emit(self, text[item["movement"]].format(sku=item["sku"], on_hand=item["on_hand"]), "yellow")
220
+ _emit(self, text["basis"] + text["sep"].join(data["assumptions"]), "dim")
176
221
 
177
222
  async def cmd_carriers(self, args: str):
178
223
  """Carrier scorecard by lane, cost anomalies and like-for-like savings."""
179
- params = _parse_logistics_args(args, self._CARRIERS_USAGE)
224
+ text = _labels(self)
225
+ params = _parse_logistics_args(args, text["carriers_usage"])
180
226
  if params is None:
181
- _emit(self, self._CARRIERS_USAGE, "yellow")
227
+ _emit(self, text["carriers_usage"], "yellow")
182
228
  return
183
229
  from aria_code.tools.logistics_carriers import tool_score_carriers
184
230
 
@@ -195,14 +241,17 @@ class LogisticsCommandsMixin:
195
241
  _emit(self, data["scope"]["marker"], "bold red")
196
242
  _emit(self, result["summary"], "bold")
197
243
  for entry in data["scorecard"]:
198
- rank = f"#{entry['rank_in_lane']}" if entry["rank_in_lane"] else "样本不足"
199
- on_time = (f"{entry['on_time_rate']:.0%}(下界 {entry['on_time_lower_bound']:.0%})"
200
- if entry["on_time_rate"] is not None else "无准时记录")
244
+ rank = f"#{entry['rank_in_lane']}" if entry["rank_in_lane"] else text["too_few"]
245
+ on_time = (text["on_time"].format(rate=entry["on_time_rate"], low=entry["on_time_lower_bound"])
246
+ if entry["on_time_rate"] is not None else text["no_on_time"])
201
247
  cost = f"{entry['median_cost_per_kg']:.2f}/kg" if entry["median_cost_per_kg"] is not None else "-"
202
- _emit(self, f" {entry['lane']} {rank} {entry['carrier']}: {entry['shipments']} 单 · 准时 {on_time} · {cost}")
248
+ _emit(self, text["carrier"].format(lane=entry["lane"], rank=rank, carrier=entry["carrier"],
249
+ n=entry["shipments"], on_time=on_time, cost=cost))
203
250
  for saving in data["savings"]:
204
- _emit(self, f" 可节省 {saving['estimated_saving']:,.2f}: {saving['lane']} 由 {saving['from_carrier']} "
205
- f"转 {saving['to_carrier']}(每 kg 低 {saving['rate_difference_per_kg']:.2f})", "green")
251
+ _emit(self, text["saving"].format(amount=saving["estimated_saving"], lane=saving["lane"],
252
+ src=saving["from_carrier"], dst=saving["to_carrier"],
253
+ diff=saving["rate_difference_per_kg"]), "green")
206
254
  for anomaly in data["anomalies"]:
207
- _emit(self, f" 核实 {anomaly['waybill_no']} ({anomaly['carrier']}): {anomaly['detail']}", "yellow")
208
- _emit(self, "依据: " + ";".join(data["assumptions"]), "dim")
255
+ _emit(self, text["check"].format(waybill=anomaly["waybill_no"], carrier=anomaly["carrier"],
256
+ detail=anomaly["detail"]), "yellow")
257
+ _emit(self, text["basis"] + text["sep"].join(data["assumptions"]), "dim")
@@ -1,7 +1,7 @@
1
1
  """Background version checker for the active Aria Code install channel.
2
2
 
3
- Checks GitHub, scoped npm, or PyPI once per 24 hours in a daemon thread so startup is
4
- never blocked. The result is cached to ~/.arthera/update_check.json and read
3
+ Checks GitHub releases or scoped npm once per 24 hours in a daemon thread so
4
+ startup is never blocked. The result is cached to ~/.arthera/update_check.json and read
5
5
  at banner render time.
6
6
 
7
7
  Public API
@@ -26,7 +26,6 @@ from aria_code.packages.aria_core.paths import aria_home
26
26
 
27
27
  _RELEASE_URL = "https://api.github.com/repos/artheras/aria-code/releases/latest"
28
28
  _NPM_URL = "https://registry.npmjs.org/@artheras%2Faria-code/latest"
29
- _PYPI_URL = "https://pypi.org/pypi/aria-code/json"
30
29
  _CACHE_FILE = aria_home() / "update_check.json"
31
30
  _CACHE_TTL_S = 86_400 # 24 hours
32
31
  _FETCH_TIMEOUT = 4 # seconds — fail cleanly on slow networks
@@ -73,14 +72,24 @@ def _install_channel() -> str:
73
72
  executable = str(getattr(sys, "executable", "") or "").lower()
74
73
  if "node_modules" in executable and "aria" in executable:
75
74
  return "npm"
76
- return "native" if getattr(sys, "frozen", False) else "pip"
75
+ if getattr(sys, "frozen", False):
76
+ return "native"
77
+ root = Path(__file__).resolve().parents[4]
78
+ if (root / ".git").exists() and (root / "pyproject.toml").exists():
79
+ return "source"
80
+ return "pip"
77
81
 
78
82
 
79
- def _update_command(channel: str) -> str:
83
+ def _update_command(channel: str, latest: str = "") -> str:
80
84
  if channel == "npm":
81
85
  return "npm install -g @artheras/aria-code@latest"
86
+ if channel == "source":
87
+ return "git pull && python3 -m pip install -e ."
82
88
  if channel == "pip":
83
- return "python3 -m pip install --upgrade aria-code"
89
+ # Pinned: PyPI still lists an older 4.x numbering, so an unpinned
90
+ # --upgrade "updates" 0.73.0 to 4.4.2, which is older code.
91
+ return f'python3 -m pip install --upgrade "aria-code=={latest}"' if latest else \
92
+ 'python3 -m pip install --upgrade "aria-code<4"'
84
93
  if sys.platform == "win32":
85
94
  return "irm https://raw.githubusercontent.com/artheras/aria-code/main/scripts/install.ps1 | iex"
86
95
  return "curl -fsSL https://raw.githubusercontent.com/artheras/aria-code/main/scripts/install.sh | sh"
@@ -89,7 +98,7 @@ def _update_command(channel: str) -> str:
89
98
  def _build_notice(latest: str, current: str, lang: str, channel: str = "native") -> str:
90
99
  latest = latest.removeprefix("v")
91
100
  current = current.removeprefix("v")
92
- cmd = _update_command(channel)
101
+ cmd = _update_command(channel, latest)
93
102
  if lang == "zh":
94
103
  return (
95
104
  f"[yellow]⬆ 新版本可用[/yellow] "
@@ -107,12 +116,9 @@ def _build_notice(latest: str, current: str, lang: str, channel: str = "native")
107
116
 
108
117
  def _worker(current: str, lang: str, channel: str = "native") -> None:
109
118
  global _notice
110
- sources = {
111
- "native": (_RELEASE_URL, "tag_name"),
112
- "npm": (_NPM_URL, "version"),
113
- "pip": (_PYPI_URL, "info"),
114
- }
115
- source_url, version_field = sources[channel]
119
+ # GitHub releases are the version of record for every channel but npm.
120
+ # PyPI's own "latest" is not: it still points at the old 4.x line.
121
+ source_url, version_field = (_NPM_URL, "version") if channel == "npm" else (_RELEASE_URL, "tag_name")
116
122
 
117
123
  # 1. Serve from cache if still fresh
118
124
  cache = _read_cache()
@@ -134,8 +140,6 @@ def _worker(current: str, lang: str, channel: str = "native") -> None:
134
140
  with urllib.request.urlopen(req, timeout=_FETCH_TIMEOUT) as resp:
135
141
  data = json.loads(resp.read())
136
142
  latest = data[version_field]
137
- if channel == "pip":
138
- latest = latest["version"]
139
143
  except Exception:
140
144
  return # network error → silently skip, try again next day
141
145
 
@@ -4326,6 +4326,9 @@ class ArtheraTerminal:
4326
4326
  console.print(
4327
4327
  " [dim]隐私:反馈默认[bold]仅存本地[/bold],不上传。"
4328
4328
  "opt-in 后可用于改进金融模型 · /privacy 查看与开关 · /bug 报告问题[/dim]"
4329
+ if str(_ui_lang).lower().startswith("zh") else
4330
+ " [dim]Privacy: feedback stays [bold]on this machine[/bold] unless you opt in; "
4331
+ "opted-in feedback may improve Aria's finance model · /privacy · /bug[/dim]"
4329
4332
  )
4330
4333
  else:
4331
4334
  if _banner_mode != "off":
@@ -67,7 +67,7 @@ class DoctorReport:
67
67
  # hint only applies to a repo checkout.
68
68
  VENV_REBUILD_HINT = (
69
69
  "Rebuild the venv with your current Python: bash install.sh --rebuild "
70
- "(repo checkout), or reinstall with pip install -U aria-code."
70
+ "(repo checkout), or reinstall with pip install -U \"aria-code<4\"."
71
71
  )
72
72
 
73
73
  # What the npm package is today: a zero-dependency launcher that execs a
@@ -430,7 +430,7 @@ def _platform_package_check(npm: Optional[str]) -> Optional[DoctorCheck]:
430
430
  "npm_runtime:binary",
431
431
  "skip",
432
432
  f"no prebuilt binary for {platform.system()}/{platform.machine()}",
433
- "Install with pip instead: pip install -U aria-code",
433
+ "Install with pip instead: pip install -U \"aria-code<4\"",
434
434
  )
435
435
  pkg = f"@artheras/aria-code-{key}"
436
436
  if not npm:
@@ -736,7 +736,7 @@ def run_doctor(
736
736
  checks.append(_check(f"package:{module}", "ok", purpose))
737
737
  else:
738
738
  checks.append(_check(f"package:{module}", "err", f"{purpose} missing",
739
- "Reinstall: pip install -U aria-code"))
739
+ "Reinstall: pip install -U \"aria-code<4\""))
740
740
 
741
741
  for module, purpose, extra in _iter_optional_modules():
742
742
  if _has_module(module):
@@ -53,6 +53,10 @@ def wilson_lower_bound(successes: int, trials: int, confidence: float = 0.95) ->
53
53
  return (centre - margin) / denominator
54
54
 
55
55
 
56
+ def _count(n: int, one: str, many: str) -> str:
57
+ return f"{n} {one if n == 1 else many}"
58
+
59
+
56
60
  def _lane(record: Dict[str, Any], row: int) -> str:
57
61
  origin = text(record, "origin", row)
58
62
  destination = text(record, "destination", row)
@@ -214,8 +218,9 @@ def tool_score_carriers(params: Dict[str, Any]) -> Dict[str, Any]:
214
218
  total_saving = round(sum(s["estimated_saving"] for s in savings), 2)
215
219
  summary = (
216
220
  f"{len(records)} waybills across {len({c['lane'] for c in scorecard})} lanes and "
217
- f"{len({c['carrier'] for c in scorecard})} carriers ({source}); {len(anomalies)} anomalies "
218
- f"to check; {len(savings)} savings opportunities, estimated {total_saving:,.2f} in total."
221
+ f"{len({c['carrier'] for c in scorecard})} carriers ({source}); {_count(len(anomalies), 'anomaly', 'anomalies')} "
222
+ f"to check; {_count(len(savings), 'savings opportunity', 'savings opportunities')}, "
223
+ f"estimated {total_saving:,.2f} in total."
219
224
  )
220
225
  return {
221
226
  "success": True,
@@ -207,7 +207,7 @@ def tool_plan_inventory_policy(params: Dict[str, Any]) -> Dict[str, Any]:
207
207
  assumptions.insert(0, scope["marker"])
208
208
 
209
209
  summary = (
210
- f"{len(items)} SKUs analysed ({source}): {counts['reorder']} to reorder, "
210
+ f"{len(items)} {'SKU' if len(items) == 1 else 'SKUs'} analysed ({source}): {counts['reorder']} to reorder, "
211
211
  f"{counts['insufficient_history']} with too little history, {counts['no_demand']} "
212
212
  f"with no demand; {dead} dead and {slow} slow-moving."
213
213
  )
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.74.0
3
+ Version: 0.76.0
4
4
  Summary: Open-source AI agent for logistics and finance work: 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
@@ -175,8 +175,8 @@ Numbers you can check, client data kept apart, actions a person approves.</p>
175
175
  <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
176
  </p>
177
177
 
178
- <p align="center"><img src="docs/assets/demo-coding-workflow.gif" alt="Real Aria Code terminal recording: failing tests, source inspection, code edit, and passing tests" width="860"></p>
179
- <p align="center"><sub>Recorded from a real Aria Code terminal session on a temporary test fixture; idle time is shortened. This shows direct CLI commands, not an autonomous model edit. <a href="docs/assets/demo-coding-workflow.png">Still screenshot</a> · <a href="scripts/render_terminal_capture.py">Capture renderer</a>.</sub></p>
178
+ <p align="center"><img src="docs/assets/demo-logistics.gif" alt="Real Aria Code terminal recording: reorder points for one shipper, a refusal to mix two shippers' data, and a carrier scorecard with a saving and two anomalies" width="860"></p>
179
+ <p align="center"><sub>Recorded from a real Aria Code session on the sample 3PL data in <code>evals/fixtures</code>. No model is called, so every number on screen comes from the tools; pauses are shortened. <a href="docs/assets/demo-logistics.png">Still screenshot</a> · <a href="scripts/record_logistics_demo.py">Recorder</a> · <a href="scripts/render_logistics_demo.py">Renderer</a>.</sub></p>
180
180
 
181
181
  ## What Aria Code does
182
182
 
@@ -188,7 +188,7 @@ A general-purpose assistant aims for an answer that reads well. In logistics and
188
188
 
189
189
  **Actions a person approves.** In Feishu, each shipper's group gets a daily digest of reorders, dead stock and freight anomalies. `/补货` turns the reorder list into a purchase-order draft card; nothing happens until an authorised approver presses approve, and what runs is exactly what was shown. The draft is a file for your own purchasing system — Aria Code places no orders.
190
190
 
191
- Underneath is a terminal coding agent: it inspects project files, applies edits, runs commands and tests, and explains the changes, with a local Ollama model or a supported cloud provider. A fresh install has no live business data; the logistics tools read your exports (CSV or JSON), and the chat features need a Feishu app or the Aria relay.
191
+ Underneath is a terminal coding agent: it inspects project files, applies edits, runs commands and tests, and explains the changes ([recording](docs/assets/demo-coding-workflow.gif)), with a local Ollama model or a supported cloud provider. A fresh install has no live business data; the logistics tools read your exports (CSV or JSON), and the chat features need a Feishu app or the Aria relay.
192
192
 
193
193
  ## Quick start
194
194
 
@@ -208,7 +208,7 @@ aria
208
208
 
209
209
  The installer downloads the binary for your OS from the latest [GitHub release](https://github.com/artheras/aria-code/releases/latest), checks its SHA-256 digest, and installs it in your user account. Open a new terminal to start the interactive CLI with `aria`, `aria code`, or `aria-code`. Set `ARIA_CODE_VERSION=v0.55.0` to pin a release.
210
210
 
211
- Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade aria-code` (requires Python 3.10+). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).
211
+ Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade "aria-code<4"` (requires Python 3.10+; the `<4` skips an older 4.x numbering that PyPI still lists). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).
212
212
 
213
213
  To use a local model, install [Ollama](https://ollama.com/download), pull a coding model, and start Aria in local-only mode:
214
214
 
@@ -351,15 +351,17 @@ if __name__ == "__main__":
351
351
  import asyncio # noqa: E402
352
352
  import contextlib # noqa: E402
353
353
  import io # noqa: E402
354
+ import re # noqa: E402
354
355
  from types import SimpleNamespace # noqa: E402
355
356
 
356
357
 
357
358
  class _Cli:
358
- def __init__(self):
359
+ def __init__(self, lang: str = "zh"):
359
360
  from aria_code.apps.cli.commands.warehouse_cmds import LogisticsCommandsMixin
360
361
 
361
362
  class Stub(LogisticsCommandsMixin):
362
363
  context = SimpleNamespace(has_rich=False, console=None)
364
+ terminal = SimpleNamespace(config={"ui_lang": lang})
363
365
 
364
366
  self.stub = Stub()
365
367
 
@@ -417,6 +419,24 @@ class DirectCommands(unittest.TestCase):
417
419
  self.assertIn("可节省 900.00", out)
418
420
  self.assertIn("#1 CHEAP", out)
419
421
 
422
+ def test_english_ui_prints_english_labels(self) -> None:
423
+ """The labels were Chinese whatever ui_lang said, inside an English summary."""
424
+ out = _Cli("en").run("inventory", f'"{self.skus}" --owner ACME')
425
+ self.assertIn("Reorder A: order 133 · reorder point", out)
426
+ self.assertIn("ABC/XYZ –/X", out) # no unit cost, so ABC is unknown — not "-X"
427
+ self.assertIn("Dead stock OLD", out)
428
+ self.assertIn("Basis: service level", out)
429
+ self.assertIsNone(re.search(r"[\u4e00-\u9fff]", out), out)
430
+ self.assertIn("Usage: /carriers", _Cli("en").run("carriers", "--owner"))
431
+
432
+ def test_counts_are_not_pluralised_blindly(self) -> None:
433
+ waybills = pathlib.Path(self.tmp.name) / "waybills.json"
434
+ waybills.write_text(json.dumps(
435
+ _waybills("PRICEY", 30, 27, 8.0) + _waybills("CHEAP", 30, 29, 5.0)), encoding="utf-8")
436
+ out = _Cli("en").run("carriers", str(waybills))
437
+ self.assertIn("1 savings opportunity,", out)
438
+ self.assertIn("Save 900.00: ", out)
439
+
420
440
  def test_both_are_registered_in_the_cli(self) -> None:
421
441
  from aria_code import aria_cli
422
442
 
@@ -35,7 +35,9 @@ class UpdateAndHealthTests(unittest.TestCase):
35
35
 
36
36
  def test_each_install_channel_has_its_own_source_and_command(self):
37
37
  self.assertEqual(update_check._update_command("npm"), "npm install -g @artheras/aria-code@latest")
38
- self.assertIn("pip install --upgrade aria-code", update_check._update_command("pip"))
38
+ self.assertEqual(update_check._update_command("pip", "0.74.0"),
39
+ 'python3 -m pip install --upgrade "aria-code==0.74.0"')
40
+ self.assertTrue(update_check._update_command("source").startswith("git pull"))
39
41
  self.assertIn("%2Faria-code", update_check._NPM_URL)
40
42
  with patch.object(update_check, "_read_cache", return_value={}), \
41
43
  patch.object(update_check, "_write_cache") as save, \
@@ -46,6 +48,22 @@ class UpdateAndHealthTests(unittest.TestCase):
46
48
  self.assertEqual(save.call_args.args[0]["source"], update_check._NPM_URL)
47
49
  self.assertIn("npm install -g @artheras/aria-code@latest", update_check._notice)
48
50
 
51
+ def test_pypi_s_old_4x_line_is_never_offered_as_an_update(self):
52
+ """PyPI's latest is 4.4.2, an older numbering; v0.73.0 users were told to 'upgrade' to it."""
53
+ self.assertFalse(hasattr(update_check, "_PYPI_URL"))
54
+ for channel in ("pip", "source", "native"):
55
+ with self.subTest(channel=channel), \
56
+ patch.object(update_check, "_read_cache", return_value={}), \
57
+ patch.object(update_check, "_write_cache"), \
58
+ patch("urllib.request.urlopen",
59
+ return_value=io.BytesIO(b'{"tag_name":"v0.73.0"}')) as fetch:
60
+ update_check._notice = None
61
+ update_check._worker("0.73.0", "en", channel)
62
+ self.assertEqual(fetch.call_args.args[0].full_url, update_check._RELEASE_URL)
63
+ self.assertIsNone(update_check._notice)
64
+ self.assertNotIn("4.4.2", update_check._update_command("pip"))
65
+ self.assertIn('"aria-code<4"', update_check._update_command("pip"))
66
+
49
67
  def test_health_checks_only_the_active_cloud_backend(self):
50
68
  targets, message = _health_targets({
51
69
  "model": "gemini-3.8-flash", "backend_chat": True,
File without changes
File without changes
File without changes