aria-code 0.99.0__tar.gz → 0.100.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 (777) hide show
  1. {aria_code-0.99.0/src/aria_code.egg-info → aria_code-0.100.0}/PKG-INFO +1 -1
  2. {aria_code-0.99.0 → aria_code-0.100.0}/pyproject.toml +1 -1
  3. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/_version.py +1 -1
  4. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/chat_turn.py +6 -2
  5. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +5 -3
  6. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/market_cmds.py +29 -11
  7. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +9 -4
  8. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +4 -1
  9. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/terminal_chrome.py +11 -1
  10. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/aria_cli.py +5 -5
  11. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/logistics_io.py +6 -0
  12. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/macro_tools.py +52 -12
  13. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/render/finance.py +47 -22
  14. {aria_code-0.99.0 → aria_code-0.100.0/src/aria_code.egg-info}/PKG-INFO +1 -1
  15. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code.egg-info/SOURCES.txt +2 -0
  16. aria_code-0.100.0/tests/test_english_output_group.py +82 -0
  17. aria_code-0.100.0/tests/test_startup_keeps_cloud_model.py +50 -0
  18. {aria_code-0.99.0 → aria_code-0.100.0}/LICENSE +0 -0
  19. {aria_code-0.99.0 → aria_code-0.100.0}/NOTICE +0 -0
  20. {aria_code-0.99.0 → aria_code-0.100.0}/README.md +0 -0
  21. {aria_code-0.99.0 → aria_code-0.100.0}/setup.cfg +0 -0
  22. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/__init__.py +0 -0
  23. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/adk_apps/__init__.py +0 -0
  24. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
  25. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
  26. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
  27. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
  28. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/__init__.py +0 -0
  29. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/base.py +0 -0
  30. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/code_review.py +0 -0
  31. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/__init__.py +0 -0
  32. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
  33. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/critic.py +0 -0
  34. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/deepen.py +0 -0
  35. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/models.py +0 -0
  36. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/pipeline.py +0 -0
  37. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
  38. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/themes.py +0 -0
  39. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/deep/tiers.py +0 -0
  40. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/engineering/__init__.py +0 -0
  41. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/engineering/coder.py +0 -0
  42. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/engineering/tester.py +0 -0
  43. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/__init__.py +0 -0
  44. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
  45. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/catalyst.py +0 -0
  46. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
  47. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/debate.py +0 -0
  48. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/earnings.py +0 -0
  49. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/fundamental.py +0 -0
  50. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/macro.py +0 -0
  51. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/news.py +0 -0
  52. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/risk.py +0 -0
  53. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/sector.py +0 -0
  54. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/strategist.py +0 -0
  55. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
  56. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/synthesis.py +0 -0
  57. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/financial/technical.py +0 -0
  58. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/orchestrator.py +0 -0
  59. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/portfolio_agent.py +0 -0
  60. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/__init__.py +0 -0
  61. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
  62. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/business_match.py +0 -0
  63. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
  64. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
  65. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
  66. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
  67. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
  68. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
  69. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
  70. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/registry.py +0 -0
  71. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/signal_scheme.py +0 -0
  72. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/sports/__init__.py +0 -0
  73. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/sports/football_agent.py +0 -0
  74. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/supervisor.py +0 -0
  75. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/team.py +0 -0
  76. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
  77. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
  78. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
  79. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
  80. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
  81. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
  82. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
  83. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
  84. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
  85. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
  86. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
  87. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/aliyun_data_client.py +0 -0
  88. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/README.md +0 -0
  89. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/__init__.py +0 -0
  90. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/channels/README.md +0 -0
  91. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/channels/__init__.py +0 -0
  92. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/channels/approvals.py +0 -0
  93. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/channels/conversation.py +0 -0
  94. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/channels/digest.py +0 -0
  95. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/channels/intake.py +0 -0
  96. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/channels/registry.py +0 -0
  97. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/channels/tradingview.py +0 -0
  98. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/README.md +0 -0
  99. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/__init__.py +0 -0
  100. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/_optional.py +0 -0
  101. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
  102. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/broker_render.py +0 -0
  103. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
  104. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
  105. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
  106. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
  107. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
  108. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
  109. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
  110. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
  111. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
  112. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
  113. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
  114. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/core_cmds.py +0 -0
  115. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
  116. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
  117. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
  118. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
  119. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
  120. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
  121. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/market.py +0 -0
  122. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
  123. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
  124. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
  125. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
  126. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
  127. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
  128. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/report.py +0 -0
  129. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
  130. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
  131. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
  132. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/team.py +0 -0
  133. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
  134. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
  135. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
  136. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
  137. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/config_paths.py +0 -0
  138. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/config_store.py +0 -0
  139. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/constants.py +0 -0
  140. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/context.py +0 -0
  141. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/deterministic.py +0 -0
  142. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/direct.py +0 -0
  143. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/earnings_view.py +0 -0
  144. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/exec_events.py +0 -0
  145. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
  146. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/football_reports.py +0 -0
  147. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
  148. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/google_login.py +0 -0
  149. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
  150. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
  151. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
  152. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
  153. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
  154. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
  155. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
  156. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/headless.py +0 -0
  157. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/helpers.py +0 -0
  158. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/hooks.py +0 -0
  159. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/i18n.py +0 -0
  160. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/intent.py +0 -0
  161. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/intent_router.py +0 -0
  162. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
  163. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
  164. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
  165. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/main.py +0 -0
  166. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/market_hours.py +0 -0
  167. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
  168. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/market_universe.py +0 -0
  169. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/message_processing.py +0 -0
  170. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/mixin_binding.py +0 -0
  171. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
  172. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
  173. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
  174. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
  175. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
  176. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/preflight.py +0 -0
  177. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/project_aria.py +0 -0
  178. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
  179. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
  180. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
  181. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
  182. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
  183. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
  184. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
  185. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
  186. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
  187. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/base.py +0 -0
  188. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
  189. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
  190. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
  191. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
  192. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
  193. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
  194. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
  195. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +0 -0
  196. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
  197. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/review_runner.py +0 -0
  198. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
  199. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/sandbox.py +0 -0
  200. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/session_export.py +0 -0
  201. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
  202. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/session_store.py +0 -0
  203. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
  204. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
  205. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
  206. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
  207. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
  208. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
  209. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tools/context.py +0 -0
  210. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
  211. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
  212. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
  213. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
  214. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
  215. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
  216. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
  217. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/update_check.py +0 -0
  218. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/updater.py +0 -0
  219. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
  220. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
  221. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/cli/workspace_route.py +0 -0
  222. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/daemon/README.md +0 -0
  223. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/vscode/README.md +0 -0
  224. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/apps/vscode/package.json +0 -0
  225. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/aria_daemon.py +0 -0
  226. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/aria_feishu_bot.py +0 -0
  227. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/aria_mcp_server.py +0 -0
  228. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/aria_relay_client.py +0 -0
  229. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/aria_relay_server.py +0 -0
  230. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/aria_telegram_bot.py +0 -0
  231. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ariarc.py +0 -0
  232. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/artifacts.py +0 -0
  233. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/backtest_engine.py +0 -0
  234. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/backtest_report.py +0 -0
  235. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/__init__.py +0 -0
  236. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/automation.py +0 -0
  237. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/base.py +0 -0
  238. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/capabilities.py +0 -0
  239. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/cn/__init__.py +0 -0
  240. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
  241. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
  242. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
  243. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
  244. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
  245. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/config.py +0 -0
  246. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/intl/__init__.py +0 -0
  247. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
  248. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
  249. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
  250. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
  251. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/paper_broker.py +0 -0
  252. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/planning.py +0 -0
  253. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/registry.py +0 -0
  254. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/brokers/trading.py +0 -0
  255. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/canva_client.py +0 -0
  256. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/change_store.py +0 -0
  257. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/__init__.py +0 -0
  258. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
  259. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/aria_relay_client.py +0 -0
  260. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/canva_client.py +0 -0
  261. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/figma_client.py +0 -0
  262. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/football_data_client.py +0 -0
  263. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/kling_video_client.py +0 -0
  264. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/market_data_client.py +0 -0
  265. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/openai_image_client.py +0 -0
  266. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/runway_video_client.py +0 -0
  267. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
  268. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/cloud_memory.py +0 -0
  269. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/command_safety.py +0 -0
  270. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/computer_use_tools.py +0 -0
  271. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/dashboard_generator.py +0 -0
  272. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/data_analysis_tools.py +0 -0
  273. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/data_cleaner.py +0 -0
  274. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/data_service.py +0 -0
  275. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/__init__.py +0 -0
  276. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/base.py +0 -0
  277. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/router.py +0 -0
  278. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/__init__.py +0 -0
  279. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
  280. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
  281. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
  282. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
  283. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
  284. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
  285. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
  286. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
  287. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
  288. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/demo_player.py +0 -0
  289. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/doctor.py +0 -0
  290. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/domain/__init__.py +0 -0
  291. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/domain/backtest_engine.py +0 -0
  292. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/domain/backtest_report.py +0 -0
  293. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/domain/finance_formulas.py +0 -0
  294. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
  295. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/domain/strategy_vault.py +0 -0
  296. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/evals/__init__.py +0 -0
  297. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/evals/harness.py +0 -0
  298. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/evals/runner.py +0 -0
  299. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/external_agent_runner.py +0 -0
  300. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/figma_client.py +0 -0
  301. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/file_analysis_tools.py +0 -0
  302. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/finance_formulas.py +0 -0
  303. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/football_data_client.py +0 -0
  304. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/image_gen_tools.py +0 -0
  305. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/intent_classifier.py +0 -0
  306. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/kling_video_client.py +0 -0
  307. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/licensing.py +0 -0
  308. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/local_finance_tools.py +0 -0
  309. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/local_image_provider.py +0 -0
  310. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/local_llm_provider.py +0 -0
  311. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/macro_tools.py +0 -0
  312. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/markdown_pdf.py +0 -0
  313. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/market_data_client.py +0 -0
  314. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/mcp_client.py +0 -0
  315. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/memory_manager.py +0 -0
  316. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/model_capability.py +0 -0
  317. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/notification_tools.py +0 -0
  318. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/openai_image_client.py +0 -0
  319. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/__init__.py +0 -0
  320. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
  321. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
  322. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
  323. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
  324. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
  325. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
  326. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
  327. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_core/export.py +0 -0
  328. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
  329. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_core/paths.py +0 -0
  330. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
  331. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
  332. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
  333. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
  334. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_infra/product.py +0 -0
  335. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
  336. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
  337. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
  338. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
  339. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
  340. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
  341. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
  342. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
  343. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
  344. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
  345. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
  346. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
  347. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
  348. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/cache.py +0 -0
  349. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/context.py +0 -0
  350. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
  351. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/data.py +0 -0
  352. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
  353. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/references.py +0 -0
  354. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/registry.py +0 -0
  355. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
  356. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
  357. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/settings.py +0 -0
  358. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_services/usage.py +0 -0
  359. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
  360. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
  361. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
  362. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
  363. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
  364. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
  365. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
  366. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
  367. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
  368. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
  369. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
  370. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
  371. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
  372. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
  373. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
  374. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
  375. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
  376. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
  377. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
  378. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
  379. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
  380. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
  381. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
  382. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
  383. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
  384. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
  385. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
  386. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
  387. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
  388. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
  389. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
  390. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
  391. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
  392. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
  393. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
  394. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packs/__init__.py +0 -0
  395. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packs/base.py +0 -0
  396. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packs/finance/__init__.py +0 -0
  397. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packs/logistics/__init__.py +0 -0
  398. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packs/payments/__init__.py +0 -0
  399. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packs/realty/__init__.py +0 -0
  400. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packs/registry.py +0 -0
  401. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/packs/rules.py +0 -0
  402. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/plan_utils.py +0 -0
  403. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/plugin_loader.py +0 -0
  404. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/portfolio_ledger.py +0 -0
  405. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/preview_server.py +0 -0
  406. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/privacy/__init__.py +0 -0
  407. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/privacy/feedback.py +0 -0
  408. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/project_review.py +0 -0
  409. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/project_review_api.py +0 -0
  410. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/project_review_server.py +0 -0
  411. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/project_tools.py +0 -0
  412. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/__init__.py +0 -0
  413. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/llm/__init__.py +0 -0
  414. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/llm/anthropic.py +0 -0
  415. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
  416. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/llm/base.py +0 -0
  417. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/llm/custom.py +0 -0
  418. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/llm/ollama.py +0 -0
  419. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
  420. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/llm/registry.py +0 -0
  421. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/local_image_provider.py +0 -0
  422. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/local_llm_provider.py +0 -0
  423. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/providers/tool_messages.py +0 -0
  424. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/realty_data_tools.py +0 -0
  425. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/relay_store.py +0 -0
  426. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/report_exporters.py +0 -0
  427. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/report_generator.py +0 -0
  428. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/review_service.py +0 -0
  429. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/__init__.py +0 -0
  430. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/acceptance.py +0 -0
  431. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/agent_loop.py +0 -0
  432. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/approval.py +0 -0
  433. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/budget.py +0 -0
  434. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/checkpoints.py +0 -0
  435. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/crash_report.py +0 -0
  436. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/events.py +0 -0
  437. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/gateway.py +0 -0
  438. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/lsp.py +0 -0
  439. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/orchestrator.py +0 -0
  440. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/processes.py +0 -0
  441. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/repo_map.py +0 -0
  442. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/run_state.py +0 -0
  443. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/run_store.py +0 -0
  444. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/self_healing.py +0 -0
  445. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/subagent.py +0 -0
  446. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/task_ledger.py +0 -0
  447. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
  448. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/tool_executor.py +0 -0
  449. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/tool_policy.py +0 -0
  450. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runtime/worktrees.py +0 -0
  451. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/runway_video_client.py +0 -0
  452. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/safety/__init__.py +0 -0
  453. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/safety/permissions.py +0 -0
  454. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/safety/sandbox.py +0 -0
  455. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/safety/service.py +0 -0
  456. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/setup_wizard.py +0 -0
  457. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/spreadsheet_tools.py +0 -0
  458. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/strategy_vault.py +0 -0
  459. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/__init__.py +0 -0
  460. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/artifact_tools.py +0 -0
  461. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/broker_tools.py +0 -0
  462. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/build_quant_engine.py +0 -0
  463. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/code_audit_tools.py +0 -0
  464. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/computer_use_tools.py +0 -0
  465. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
  466. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
  467. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/extended_tools.py +0 -0
  468. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
  469. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/image_gen_tools.py +0 -0
  470. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/local_finance_tools.py +0 -0
  471. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/logistics_carriers.py +0 -0
  472. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/logistics_inventory.py +0 -0
  473. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
  474. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/logistics_tools.py +0 -0
  475. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/notification_tools.py +0 -0
  476. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/project_tools.py +0 -0
  477. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/realty_data_tools.py +0 -0
  478. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
  479. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/tools/stripe_tools.py +0 -0
  480. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/__init__.py +0 -0
  481. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/banner.py +0 -0
  482. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/completer.py +0 -0
  483. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/console.py +0 -0
  484. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/image_render.py +0 -0
  485. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/input_box.py +0 -0
  486. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/mentions.py +0 -0
  487. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/picker.py +0 -0
  488. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/render/__init__.py +0 -0
  489. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/render/market.py +0 -0
  490. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/render/output.py +0 -0
  491. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/render/responsive.py +0 -0
  492. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/render/team.py +0 -0
  493. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/robot.py +0 -0
  494. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/ui/startup_dashboard.py +0 -0
  495. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/utils/vscode_uri.py +0 -0
  496. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/video_analysis.py +0 -0
  497. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/video_editor.py +0 -0
  498. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/workspace/__init__.py +0 -0
  499. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/workspace/files.py +0 -0
  500. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/workspace/verify.py +0 -0
  501. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/workspace_changes.py +0 -0
  502. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/workspace_context.py +0 -0
  503. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/workspace_service.py +0 -0
  504. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code/workspace_tools.py +0 -0
  505. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
  506. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code.egg-info/entry_points.txt +0 -0
  507. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code.egg-info/requires.txt +0 -0
  508. {aria_code-0.99.0 → aria_code-0.100.0}/src/aria_code.egg-info/top_level.txt +0 -0
  509. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_adk_market_tools.py +0 -0
  510. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_agent_key_points_language.py +0 -0
  511. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_agent_team_fallback.py +0 -0
  512. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_analyze_file_tool.py +0 -0
  513. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_architecture_ledger_is_true.py +0 -0
  514. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_architecture_report.py +0 -0
  515. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_aria_cli_core.py +0 -0
  516. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_aria_mcp_server.py +0 -0
  517. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_aria_sdk.py +0 -0
  518. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_artifact_publishing.py +0 -0
  519. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_artifacts_and_reports.py +0 -0
  520. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ashare_prediction_cmds.py +0 -0
  521. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_background_processes.py +0 -0
  522. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_backtest_cmds.py +0 -0
  523. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_backtest_engine.py +0 -0
  524. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_backtest_report.py +0 -0
  525. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_backtest_runs_what_it_names.py +0 -0
  526. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
  527. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_broken_akshare_is_optional.py +0 -0
  528. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_broker_automation.py +0 -0
  529. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_broker_chat_confirm_gate.py +0 -0
  530. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_broker_planning.py +0 -0
  531. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_broker_safety.py +0 -0
  532. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_broker_tools.py +0 -0
  533. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_budget.py +0 -0
  534. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_business_workflow_cmds.py +0 -0
  535. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_canva_client.py +0 -0
  536. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_canvas_cmds.py +0 -0
  537. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_card_approvals.py +0 -0
  538. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_channel_intake.py +0 -0
  539. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_channels.py +0 -0
  540. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_chart_handlers.py +0 -0
  541. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_chat_bots_fail_closed.py +0 -0
  542. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_chat_routing.py +0 -0
  543. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ci_security_workflow.py +0 -0
  544. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_cli_app_split.py +0 -0
  545. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_cli_bootstrap.py +0 -0
  546. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_cli_config_store.py +0 -0
  547. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_cli_lifecycle_hooks.py +0 -0
  548. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_cli_runtime_consumer.py +0 -0
  549. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_cli_tool_executor_module.py +0 -0
  550. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_cli_updater.py +0 -0
  551. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_cloud_memory.py +0 -0
  552. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_code_audit_tools.py +0 -0
  553. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_code_review_agent.py +0 -0
  554. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_codegen_output.py +0 -0
  555. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_coder_tester_self_healing.py +0 -0
  556. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_coder_tool_safety.py +0 -0
  557. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_collaboration.py +0 -0
  558. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_command_loggers.py +0 -0
  559. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_command_safety.py +0 -0
  560. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_compare_strategies.py +0 -0
  561. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_completions_builder.py +0 -0
  562. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_config_paths.py +0 -0
  563. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_configured_provider.py +0 -0
  564. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_container_entrypoint.py +0 -0
  565. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_container_entrypoints.py +0 -0
  566. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_context_checkpoints.py +0 -0
  567. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_context_references.py +0 -0
  568. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_context_service.py +0 -0
  569. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_conversation_core.py +0 -0
  570. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_crash_report.py +0 -0
  571. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_credential_file_permissions.py +0 -0
  572. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_custom_providers.py +0 -0
  573. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_daemon_gateway_config.py +0 -0
  574. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_dashboard_generator.py +0 -0
  575. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_data_service.py +0 -0
  576. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_data_service_imports.py +0 -0
  577. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_data_without_model.py +0 -0
  578. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_datasource_routing.py +0 -0
  579. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_deep_analysis.py +0 -0
  580. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_degrades_without_quant_engine.py +0 -0
  581. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
  582. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_doctor.py +0 -0
  583. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_doctor_describes_the_current_install.py +0 -0
  584. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_doctor_npm_scope.py +0 -0
  585. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_edit_and_command_safety.py +0 -0
  586. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_engine_boundary.py +0 -0
  587. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_enterprise_tool_honesty.py +0 -0
  588. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_env_switch_docs.py +0 -0
  589. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_evals_harness.py +0 -0
  590. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_event_import_roots.py +0 -0
  591. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_exec_events.py +0 -0
  592. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_extended_tools.py +0 -0
  593. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_feishu_swarm_config.py +0 -0
  594. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_file_links.py +0 -0
  595. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_finalize_release.py +0 -0
  596. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_finance_renderers.py +0 -0
  597. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_finance_service_catalog.py +0 -0
  598. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_first_run_output.py +0 -0
  599. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_first_run_works.py +0 -0
  600. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_football_agent.py +0 -0
  601. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_football_prediction_output.py +0 -0
  602. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_google_cloud_models.py +0 -0
  603. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_google_cloud_routing.py +0 -0
  604. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_google_login.py +0 -0
  605. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_google_search_provider.py +0 -0
  606. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_headless_is_agentic.py +0 -0
  607. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_honest_surfaces.py +0 -0
  608. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_image_gen_tools.py +0 -0
  609. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_image_inputs.py +0 -0
  610. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_import_graph_budget.py +0 -0
  611. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_intent_router.py +0 -0
  612. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_intent_signals.py +0 -0
  613. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_kling_video_client.py +0 -0
  614. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_lazy_rebind.py +0 -0
  615. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_legacy_module_imports.py +0 -0
  616. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_license_consistency.py +0 -0
  617. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_licensing.py +0 -0
  618. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_local_image_provider.py +0 -0
  619. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_logistics_3pl.py +0 -0
  620. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_logistics_and_finance_agents.py +0 -0
  621. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_lsp.py +0 -0
  622. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_markdown_pdf.py +0 -0
  623. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_market_answers_in_english.py +0 -0
  624. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_market_data_client.py +0 -0
  625. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_market_history_inheritance.py +0 -0
  626. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_market_history_tool.py +0 -0
  627. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_market_hours.py +0 -0
  628. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_market_questions_on_backend.py +0 -0
  629. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_market_symbol_extraction.py +0 -0
  630. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_market_universe.py +0 -0
  631. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_mcp_circuit.py +0 -0
  632. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_mcp_client.py +0 -0
  633. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_mentions.py +0 -0
  634. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_model_capability_registry.py +0 -0
  635. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_model_choice_is_the_users.py +0 -0
  636. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_model_selection_state.py +0 -0
  637. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_narrow_chinese_output.py +0 -0
  638. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_native_binary_entrypoints.py +0 -0
  639. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_native_installer.py +0 -0
  640. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_natural_language_routing.py +0 -0
  641. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_new_modules.py +0 -0
  642. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
  643. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_no_tools_route.py +0 -0
  644. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_no_uncommitted_imports.py +0 -0
  645. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_numeric_listings.py +0 -0
  646. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ollama_stream_imports.py +0 -0
  647. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ollama_stream_tools.py +0 -0
  648. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_openai_image_client.py +0 -0
  649. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_operations_suite.py +0 -0
  650. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_os_sandbox.py +0 -0
  651. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_output_rendering.py +0 -0
  652. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_packages_facade.py +0 -0
  653. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_packaging_constraints.py +0 -0
  654. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_packaging_manifest.py +0 -0
  655. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_packs_domains.py +0 -0
  656. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_pdf_report.py +0 -0
  657. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_pick_best_installed_model.py +0 -0
  658. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_plan_mode.py +0 -0
  659. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_platform_package_assembly.py +0 -0
  660. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_platform_packages.py +0 -0
  661. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_platform_publish.py +0 -0
  662. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_plotly_html_output.py +0 -0
  663. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_portfolio_language.py +0 -0
  664. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_portfolio_ledger.py +0 -0
  665. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_post_turn_context_decision.py +0 -0
  666. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_preflight.py +0 -0
  667. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_preview_server.py +0 -0
  668. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_privacy_feedback.py +0 -0
  669. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_project_aria.py +0 -0
  670. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_project_context_files.py +0 -0
  671. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_project_review.py +0 -0
  672. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_project_review_api.py +0 -0
  673. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_prompt_assembly.py +0 -0
  674. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_prompt_selection.py +0 -0
  675. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_provider_autoconfig.py +0 -0
  676. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_provider_error_messages.py +0 -0
  677. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_provider_integration.py +0 -0
  678. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_provider_registry.py +0 -0
  679. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_public_service_status.py +0 -0
  680. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_quant_engine_namespace.py +0 -0
  681. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_rebind_contract.py +0 -0
  682. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_rebind_namespace_contract.py +0 -0
  683. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_relay_client_credentials.py +0 -0
  684. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_relay_event_verification.py +0 -0
  685. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_relay_sends_for_clients.py +0 -0
  686. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_relay_store.py +0 -0
  687. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_relay_url.py +0 -0
  688. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_release_chain.py +0 -0
  689. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_release_commit_identity.py +0 -0
  690. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_release_push_is_atomic.py +0 -0
  691. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_release_reaches_the_registries.py +0 -0
  692. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_release_verification_waits.py +0 -0
  693. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_release_workflow_permissions.py +0 -0
  694. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_report_charts.py +0 -0
  695. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_report_generator.py +0 -0
  696. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_research_protocol.py +0 -0
  697. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_research_quality.py +0 -0
  698. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_responsive_rendering.py +0 -0
  699. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_review_service.py +0 -0
  700. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_risk_earnings_ops.py +0 -0
  701. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_root_module_budget.py +0 -0
  702. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_rsi_without_pandas_ta.py +0 -0
  703. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_acceptance.py +0 -0
  704. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_agent_loop.py +0 -0
  705. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_approval.py +0 -0
  706. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_bridge.py +0 -0
  707. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_bridge_fallback.py +0 -0
  708. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_checkpoints.py +0 -0
  709. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_event_identity.py +0 -0
  710. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_gateway.py +0 -0
  711. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_repo_map.py +0 -0
  712. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_run_store.py +0 -0
  713. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_tool_executor.py +0 -0
  714. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runtime_worktrees.py +0 -0
  715. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_runway_video_client.py +0 -0
  716. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_safety_permissions.py +0 -0
  717. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_safety_service.py +0 -0
  718. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_safety_service_adoption.py +0 -0
  719. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_service_diagnostics_security.py +0 -0
  720. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_session_search.py +0 -0
  721. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_settings_service.py +0 -0
  722. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_shell_commands_as_written.py +0 -0
  723. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_shipper_digest.py +0 -0
  724. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_single_import_root.py +0 -0
  725. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_skill_agent_binding.py +0 -0
  726. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_skill_catalog.py +0 -0
  727. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_skill_loader.py +0 -0
  728. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_slash_popup.py +0 -0
  729. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_spreadsheet_tools.py +0 -0
  730. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_sse_stream_contract.py +0 -0
  731. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_startup_dashboard.py +0 -0
  732. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_startup_latency.py +0 -0
  733. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_status_language.py +0 -0
  734. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_streaming_pipeline.py +0 -0
  735. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_stripe_agent.py +0 -0
  736. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_subagent.py +0 -0
  737. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_supervisor_routing.py +0 -0
  738. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_system_prompts.py +0 -0
  739. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_system_tools_output.py +0 -0
  740. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_task_orchestrator.py +0 -0
  741. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_team_analysts.py +0 -0
  742. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_team_synthesis.py +0 -0
  743. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_terminal_mixins.py +0 -0
  744. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_terminal_snapshots.py +0 -0
  745. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_tls_trust_store.py +0 -0
  746. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_tool_policy.py +0 -0
  747. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
  748. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_tool_scope.py +0 -0
  749. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_tool_step_output.py +0 -0
  750. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_trading_service.py +0 -0
  751. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_tradingview_bridge.py +0 -0
  752. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_turn_planning.py +0 -0
  753. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ui_completer_references.py +0 -0
  754. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ui_console_theme.py +0 -0
  755. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ui_input_box.py +0 -0
  756. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ui_language_and_model.py +0 -0
  757. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_ui_robot_banner.py +0 -0
  758. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_update_health_routes.py +0 -0
  759. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_verification_hint.py +0 -0
  760. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_verification_policy.py +0 -0
  761. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_version_consistency.py +0 -0
  762. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_version_counter.py +0 -0
  763. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_video_analysis.py +0 -0
  764. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_video_editor.py +0 -0
  765. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_vscode_mcp.py +0 -0
  766. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_warehouse_agents.py +0 -0
  767. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_warehouse_cli_registration.py +0 -0
  768. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_warehouse_erp_client.py +0 -0
  769. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_warehouse_workflow.py +0 -0
  770. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_wheel_is_installable.py +0 -0
  771. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_workspace_changes.py +0 -0
  772. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_workspace_context.py +0 -0
  773. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_workspace_files.py +0 -0
  774. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_workspace_scope.py +0 -0
  775. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_workspace_service.py +0 -0
  776. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_workspace_verify.py +0 -0
  777. {aria_code-0.99.0 → aria_code-0.100.0}/tests/test_wrapped_indent.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.99.0
3
+ Version: 0.100.0
4
4
  Summary: Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/artheras/aria-code
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "aria-code"
7
- version = "0.99.0"
7
+ version = "0.100.0"
8
8
  description = "Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
@@ -17,4 +17,4 @@ from __future__ import annotations
17
17
 
18
18
  __all__ = ["__version__"]
19
19
 
20
- __version__ = "0.99.0"
20
+ __version__ = "0.100.0"
@@ -14,7 +14,7 @@ class ChatTurnMixin:
14
14
  """send_message for ArtheraTerminal."""
15
15
 
16
16
  async def send_message(self, message: str, system_override: Optional[str] = None,
17
- evidence_grounded: bool = False):
17
+ evidence_grounded: bool = False, route_text: bool = False):
18
18
  """Send message to Aria AI with agentic tool loop, smart fallback, markdown."""
19
19
  if getattr(self, "_streaming", False):
20
20
  is_zh = str(self.config.get("ui_lang", "en")).lower().startswith("zh")
@@ -103,8 +103,12 @@ class ChatTurnMixin:
103
103
  }
104
104
  _show_market_choices(mention, candidates)
105
105
  return
106
+ # Only what the person typed is routed to a command. A prompt a command
107
+ # built and sent here was routed too: /report's "为 MSFT 生成一份专业
108
+ # Markdown 投研报告" matched the report route and ran /report again.
106
109
  if (
107
- not system_override
110
+ route_text
111
+ and not system_override
108
112
  and self._pending_image is None
109
113
  and not (self._file_session is not None and self._file_session.get_active() is not None)
110
114
  and self._project_session is None
@@ -165,6 +165,7 @@ class AnalysisCommandsMixin:
165
165
  return
166
166
 
167
167
  loop = _asyncio.get_event_loop()
168
+ _lang = "zh" if str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh") else "en"
168
169
 
169
170
  if region in ("us", "all"):
170
171
  if self.context.has_rich:
@@ -172,7 +173,8 @@ class AnalysisCommandsMixin:
172
173
  r = await loop.run_in_executor(None, lambda: get_us_macro(indicator if region == "us" else "all"))
173
174
  else:
174
175
  r = get_us_macro(indicator if region == "us" else "all")
175
- _render_macro_result(r, "🇺🇸 美国宏观")
176
+ # No flag emoji: they measure one cell short and broke the rule line.
177
+ _render_macro_result(r, ui_text(self, "美国宏观", "US macro"), lang=_lang)
176
178
 
177
179
  if region in ("cn", "all"):
178
180
  if self.context.has_rich:
@@ -180,7 +182,7 @@ class AnalysisCommandsMixin:
180
182
  r_cn = await loop.run_in_executor(None, lambda: get_cn_macro(indicator if region == "cn" else "all"))
181
183
  else:
182
184
  r_cn = get_cn_macro(indicator if region == "cn" else "all")
183
- _render_macro_result(r_cn, "🇨🇳 中国宏观")
185
+ _render_macro_result(r_cn, ui_text(self, "中国宏观", "China macro"), lang=_lang)
184
186
 
185
187
  if region in ("rates", "all"):
186
188
  if self.context.has_rich:
@@ -188,7 +190,7 @@ class AnalysisCommandsMixin:
188
190
  r_rates = await loop.run_in_executor(None, get_central_bank_rates)
189
191
  else:
190
192
  r_rates = get_central_bank_rates()
191
- _render_cb_rates(r_rates)
193
+ _render_cb_rates(r_rates, lang=_lang)
192
194
 
193
195
  if region == "calendar":
194
196
  if self.context.has_rich:
@@ -1056,7 +1056,7 @@ class MarketCommandsMixin:
1056
1056
  info = tickers.tickers[sym].fast_info
1057
1057
  price = getattr(info, "last_price", None) or 0
1058
1058
  mktcap = getattr(info, "market_cap", None) or 0
1059
- pe = getattr(info, "pe_ratio", None)
1059
+ pe = None # filled below: fast_info has no P/E
1060
1060
  yr_return = getattr(info, "year_change", None)
1061
1061
  rows.append({
1062
1062
  "symbol": sym, "price": price,
@@ -1065,17 +1065,31 @@ class MarketCommandsMixin:
1065
1065
  })
1066
1066
  except Exception:
1067
1067
  pass
1068
+ # fast_info has no pe_ratio, so P/E was blank for every row and
1069
+ # the "value" screen (P/E 5-20) never matched anything. info has
1070
+ # trailingPE; fetched in parallel, one request per symbol.
1071
+ from concurrent.futures import ThreadPoolExecutor
1072
+
1073
+ def _pe(row):
1074
+ try:
1075
+ value = tickers.tickers[row["symbol"]].info.get("trailingPE")
1076
+ row["pe"] = float(value) if value else None
1077
+ except Exception:
1078
+ row["pe"] = None
1079
+ with ThreadPoolExecutor(max_workers=10) as pool:
1080
+ list(pool.map(_pe, rows))
1068
1081
  return rows
1069
1082
  except Exception as _e:
1070
1083
  logger.debug("screen US fetch error: %s", _e)
1071
1084
  return []
1072
1085
 
1073
1086
  if self.context.has_rich:
1074
- _status_msg = f"[dim]筛选 {len(_US_POOL)} 只美股 ({criteria or 'top market cap'})…[/dim]"
1087
+ _status_msg = "[dim]" + ui_text(self, f"筛选 {len(_US_POOL)} 只美股 ({criteria or '按市值'})…",
1088
+ f"Screening {len(_US_POOL)} US stocks ({criteria or 'by market cap'})…") + "[/dim]"
1075
1089
  with self.context.console.status(_status_msg, spinner="dots"):
1076
1090
  rows = await _loop.run_in_executor(None, _fetch_pool)
1077
1091
  else:
1078
- print(" 筛选美股中…")
1092
+ print(" " + ui_text(self, "筛选美股中…", "Screening US stocks…"))
1079
1093
  rows = await _loop.run_in_executor(None, _fetch_pool)
1080
1094
 
1081
1095
  if not rows:
@@ -1098,19 +1112,21 @@ class MarketCommandsMixin:
1098
1112
  rows = rows[:15]
1099
1113
 
1100
1114
  if not rows:
1101
- msg = f"[yellow]当前条件 '{criteria}' 无匹配标的(池: {len(_US_POOL)} 只)[/yellow]"
1115
+ msg = "[yellow]" + ui_text(self, f"当前条件 '{criteria}' 无匹配标的(池: {len(_US_POOL)} 只)",
1116
+ f"Nothing matches '{criteria}' (pool: {len(_US_POOL)} stocks)") + "[/yellow]"
1102
1117
  self.context.console.print(msg) if self.context.has_rich else print(msg.replace("[yellow]","").replace("[/yellow]",""))
1103
1118
  return
1104
1119
 
1105
1120
  if self.context.has_rich:
1106
1121
  from rich.table import Table as _Tbl
1107
- t = _Tbl(title=f"美股筛选 {criteria or 'large-cap'} 共 {len(rows)} 只",
1122
+ t = _Tbl(title=ui_text(self, f"美股筛选 {criteria or 'large-cap'} 共 {len(rows)} 只",
1123
+ f"US screen {criteria or 'large-cap'} {len(rows)} stocks"),
1108
1124
  show_header=True, box=None, padding=(0, 1))
1109
- t.add_column("代码", style="bold", width=8)
1110
- t.add_column("价格", justify="right")
1111
- t.add_column("市值(B$)", justify="right", style="dim")
1112
- t.add_column("PE", justify="right", style="dim")
1113
- t.add_column("年涨跌%", justify="right")
1125
+ t.add_column(ui_text(self, "代码", "Symbol"), style="bold", width=8)
1126
+ t.add_column(ui_text(self, "价格", "Price"), justify="right")
1127
+ t.add_column(ui_text(self, "市值(B$)", "Mkt cap ($B)"), justify="right", style="dim")
1128
+ t.add_column(ui_text(self, "市盈率", "P/E (ttm)"), justify="right", style="dim")
1129
+ t.add_column(ui_text(self, "年涨跌%", "1y %"), justify="right")
1114
1130
  for r in rows:
1115
1131
  yr = r.get("yr_return")
1116
1132
  yr_s = f"{yr*100:+.1f}%" if yr is not None else "—"
@@ -1124,7 +1140,9 @@ class MarketCommandsMixin:
1124
1140
  f"[{yr_color}]{yr_s}[/{yr_color}]",
1125
1141
  )
1126
1142
  self.context.console.print(t)
1127
- self.context.console.print(f" [dim]来源: yfinance · 池: {len(_US_POOL)} 只大市值美股[/dim]")
1143
+ self.context.console.print(" [dim]" + ui_text(self, f"来源: yfinance · 池: {len(_US_POOL)} 只大市值美股",
1144
+ f"Source: yfinance · pool: {len(_US_POOL)} large-cap US stocks")
1145
+ + "[/dim]")
1128
1146
  else:
1129
1147
  print(f" 美股筛选 {criteria}")
1130
1148
  for r in rows:
@@ -387,7 +387,8 @@ class PortfolioCommandsMixin:
387
387
 
388
388
  # ── Markdown report mode (works fully offline) ────────────────────────
389
389
  if fmt in ("md", "markdown"):
390
- self.context.console.print(f"\n 📄 生成 [bold]{symbol}[/bold] Markdown 投研报告 ({report_type})...") if self.context.has_rich else print(f"\n Generating {symbol} Markdown report...")
390
+ _gen = ui_text(self, f"生成 {symbol} Markdown 投研报告 ({report_type})", f"Writing the {symbol} Markdown report ({report_type})")
391
+ self.context.console.print(f"\n [dim]{_gen}…[/dim]") if self.context.has_rich else print(f"\n {_gen}…")
391
392
 
392
393
  # Fetch real data through the service boundary so provenance and
393
394
  # quality metadata travel with the report prompt and artifact.
@@ -452,11 +453,15 @@ class PortfolioCommandsMixin:
452
453
  created_at=_dt.now(),
453
454
  )
454
455
  out_f = saved.path
456
+ # A short, clickable path: the full temp-dir path wrapped over
457
+ # three lines, and the "预览: open …" line repeated it.
458
+ from aria_code.ui.render.output import display_path as _short_path
459
+ _saved = ui_text(self, "报告已保存", "Report saved")
455
460
  if self.context.has_rich:
456
- self.context.console.print(f"\n [green]✅ 报告已保存: {out_f}[/green]")
457
- self.context.console.print(f" [dim]预览: open {out_f}[/dim]\n")
461
+ self.context.console.print(f"\n [green]✓[/green] {_saved}: "
462
+ f"[link={_file_uri(str(out_f))}]{_short_path(str(out_f))}[/link]\n")
458
463
  else:
459
- print(f"\n Saved: {out_f}")
464
+ print(f"\n {_saved}: {out_f}")
460
465
 
461
466
  # ── Markdown 报告 → 排版 PDF(--pdf;中英文模板自动检测)──
462
467
  if export_pdf_flag:
@@ -4,6 +4,8 @@ from __future__ import annotations
4
4
 
5
5
  import json
6
6
 
7
+ from aria_code.apps.cli.i18n import ui_text
8
+
7
9
 
8
10
  import json
9
11
  import asyncio
@@ -42,7 +44,8 @@ class WarehouseCommandsMixin:
42
44
  as_json = "--json" in parts
43
45
  identifiers = [part for part in parts if not part.startswith("--")]
44
46
  if len(identifiers) != 1:
45
- message = "用法: /warehouse <仓库编号> [--json],例如 /warehouse WH-CN-01"
47
+ message = ui_text(self, "用法: /warehouse <仓库编号> [--json],例如 /warehouse WH-CN-01",
48
+ "Usage: /warehouse <warehouse_id> [--json], e.g. /warehouse WH-CN-01")
46
49
  self.context.console.print(f"[yellow]{message}[/yellow]") if self.context.has_rich else print(message)
47
50
  return
48
51
 
@@ -34,7 +34,17 @@ class ChromeMixin:
34
34
  self._ollama_alive = bool(self._installed_models)
35
35
  except Exception:
36
36
  pass
37
- if self._installed_models and current_id not in self._installed_models:
37
+ # Only a model this session would run on Ollama is paired. The check
38
+ # below it looks for a provider prefix, so a bare cloud id such as
39
+ # "gemini-3.8-flash" (with local_provider=vertex, or backend_chat on)
40
+ # read as a missing local model: it was replaced by whatever Ollama
41
+ # had installed — a 1.5B model — and the change saved to the config.
42
+ try:
43
+ from aria_code.apps.cli.providers.chat_routing import first_round_route
44
+ _runs_on_ollama = first_round_route(current_id, self.config, self.api_url) == "ollama"
45
+ except Exception:
46
+ _runs_on_ollama = False
47
+ if _runs_on_ollama and self._installed_models and current_id not in self._installed_models:
38
48
  _resolved = _pick_best_installed_model(self._installed_models, current_id)
39
49
  if _resolved:
40
50
  self._auto_healed_from = current_id
@@ -3137,12 +3137,12 @@ def _print_finance_result(tool_name: str, result: dict) -> None:
3137
3137
  bot_mode=_ARIA_BOT_MODE)
3138
3138
 
3139
3139
 
3140
- def _render_macro_result(r: dict, title: str) -> None:
3141
- render_macro_result(r, title, console=console, has_rich=HAS_RICH)
3140
+ def _render_macro_result(r: dict, title: str, lang: str = "zh") -> None:
3141
+ render_macro_result(r, title, console=console, has_rich=HAS_RICH, lang=lang)
3142
3142
 
3143
3143
 
3144
- def _render_cb_rates(r: dict) -> None:
3145
- render_cb_rates(r, console=console, has_rich=HAS_RICH)
3144
+ def _render_cb_rates(r: dict, lang: str = "zh") -> None:
3145
+ render_cb_rates(r, console=console, has_rich=HAS_RICH, lang=lang)
3146
3146
 
3147
3147
 
3148
3148
  def _render_econ_calendar(r: dict) -> None:
@@ -4894,7 +4894,7 @@ class ArtheraTerminal(_ChatTurn, _Chrome, _HeadlessMixin):
4894
4894
  if _mem_fact:
4895
4895
  self.commands.cmd_note(_mem_fact)
4896
4896
 
4897
- await self.send_message(user_input)
4897
+ await self.send_message(user_input, route_text=True)
4898
4898
 
4899
4899
  except KeyboardInterrupt:
4900
4900
  _esc_watcher.stop()
@@ -22,6 +22,12 @@ def load_records(params: dict[str, Any], key: str) -> tuple[list[dict[str, Any]]
22
22
  raise ValueError(f"Provide either file_path or {key}, not both")
23
23
  if file_path:
24
24
  path = pathlib.Path(str(file_path)).expanduser().resolve()
25
+ if not path.is_file():
26
+ # The OSError read "[Errno 2] No such file or directory:
27
+ # '/private/var/…/shipments.csv'". Say which files are there.
28
+ here = sorted(p.name for p in path.parent.glob("*") if p.suffix.lower() in (".csv", ".json"))[:6]
29
+ hint = f" CSV/JSON files in {path.parent.name or path.parent}: {', '.join(here)}" if here else ""
30
+ raise ValueError(f"No such file: {file_path}.{hint}")
25
31
  suffix = path.suffix.lower()
26
32
  if suffix == ".json":
27
33
  content = json.loads(path.read_text(encoding="utf-8"))
@@ -143,6 +143,17 @@ _FRED_SERIES_MAP = {
143
143
  }
144
144
 
145
145
 
146
+ _FRED_LABELS_EN = {
147
+ "gdp": "GDP (USD bn, quarterly)", "gdp_growth": "Real GDP growth (%)", "cpi": "CPI (urban consumers)",
148
+ "cpi_yoy": "CPI year on year (%)", "core_cpi_yoy": "Core CPI year on year (%)",
149
+ "core_cpi": "Core CPI (ex food and energy)", "pce": "PCE price index", "fed_rate": "Fed funds rate (%)",
150
+ "unemployment": "Unemployment rate (%)", "m2": "M2 money supply (USD bn)",
151
+ "10y_yield": "10-year Treasury yield (%)", "2y_yield": "2-year Treasury yield (%)", "vix": "VIX",
152
+ "retail_sales": "Retail sales (USD m, SA)", "industrial": "Industrial production index",
153
+ "housing": "Housing starts (thousands, SAAR)", "ppi": "PPI (producer prices)",
154
+ }
155
+
156
+
146
157
  def get_us_macro(indicator: str = "all", periods: int = 12) -> dict:
147
158
  """
148
159
  获取美国宏观经济数据。
@@ -175,6 +186,7 @@ def get_us_macro(indicator: str = "all", periods: int = 12) -> dict:
175
186
  change = round(latest["value"] - prev["value"], 3)
176
187
  results[key] = {
177
188
  "label": label,
189
+ "label_en": _FRED_LABELS_EN.get(key, label),
178
190
  "unit": unit,
179
191
  "latest": latest,
180
192
  "prev": prev,
@@ -193,6 +205,7 @@ def get_us_macro(indicator: str = "all", periods: int = 12) -> dict:
193
205
  results["_yield_curve"] = {
194
206
  "spread_10y_2y": spread,
195
207
  "shape": "正常" if spread > 0.2 else "倒挂" if spread < 0 else "平坦",
208
+ "shape_en": "normal" if spread > 0.2 else "inverted" if spread < 0 else "flat",
196
209
  }
197
210
 
198
211
  return {"success": True, "country": "US", "indicator": indicator,
@@ -341,19 +354,39 @@ def _get_finnhub_key() -> str:
341
354
  # ── Central Bank Policy Rates ─────────────────────────────────────────────────
342
355
 
343
356
  def get_central_bank_rates() -> dict:
344
- """主要央行政策利率快照。"""
345
- CB_TICKERS = {
346
- "美联储 (Fed Funds)": "FEDFUNDS",
347
- "欧央行 (ECB Refi)": "ECBDFR",
348
- "英央行 (BoE Rate)": "BOERUKM",
349
- "日央行 (BoJ Rate)": "IRSTCI01JPM156N",
350
- }
357
+ """主要央行政策利率快照。
358
+
359
+ The Bank of England row read FRED's BOERUKM, which stopped in January 2017:
360
+ 0.25% was shown as today's rate. The UK now uses SONIA, which tracks Bank
361
+ Rate. ECBDFR is the deposit facility rate, not the refi rate it was labelled,
362
+ and the Japan series is the call rate that tracks the BoJ's policy rate. Each
363
+ value carries its date; one older than 180 days is reported as stale and
364
+ left out of ``rates``.
365
+ """
366
+ from datetime import date as _date
367
+
368
+ CB_SERIES = (
369
+ ("fed", "FEDFUNDS", "美联储 (Fed Funds)", "Fed funds (US)"),
370
+ ("ecb", "ECBDFR", "欧央行 (存款便利利率)", "ECB deposit facility rate"),
371
+ ("uk", "IUDSOIA", "英国 SONIA (跟随英央行利率)", "UK SONIA (tracks Bank Rate)"),
372
+ ("jp", "IRSTCI01JPM156N", "日本隔夜拆借利率 (跟随日央行)", "Japan call rate (tracks BoJ policy)"),
373
+ )
351
374
  rates = {}
352
- for name, series in CB_TICKERS.items():
375
+ details = []
376
+ for key, series, label_zh, label_en in CB_SERIES:
353
377
  data = _fred_series(series, limit=3)
354
- if data:
355
- latest = data[-1]
356
- rates[name] = latest["value"]
378
+ if not data:
379
+ continue
380
+ latest = data[-1]
381
+ try:
382
+ age = (_date.today() - _date.fromisoformat(str(latest["date"])[:10])).days
383
+ except ValueError:
384
+ age = None
385
+ stale = age is not None and age > 180
386
+ details.append({"key": key, "series": series, "label_zh": label_zh, "label_en": label_en,
387
+ "value": latest["value"], "date": str(latest["date"])[:10], "stale": stale})
388
+ if not stale:
389
+ rates[label_zh] = latest["value"]
357
390
 
358
391
  # PBOC LPR via akshare
359
392
  if _HAS_AK:
@@ -363,10 +396,17 @@ def get_central_bank_rates() -> dict:
363
396
  row = df.iloc[-1]
364
397
  rates["中国人民银行 LPR 1Y"] = float(row.get("1年期贷款市场报价利率", row.iloc[1]))
365
398
  rates["中国人民银行 LPR 5Y"] = float(row.get("5年期贷款市场报价利率", row.iloc[2]))
399
+ when = str(row.iloc[0])[:10]
400
+ details.append({"key": "lpr1y", "series": "akshare", "label_zh": "中国人民银行 LPR 1Y",
401
+ "label_en": "PBOC LPR 1-year", "value": rates["中国人民银行 LPR 1Y"],
402
+ "date": when, "stale": False})
403
+ details.append({"key": "lpr5y", "series": "akshare", "label_zh": "中国人民银行 LPR 5Y",
404
+ "label_en": "PBOC LPR 5-year", "value": rates["中国人民银行 LPR 5Y"],
405
+ "date": when, "stale": False})
366
406
  except Exception:
367
407
  pass
368
408
 
369
409
  if not rates:
370
410
  return {"success": False, "error": "无法获取央行利率数据"}
371
411
 
372
- return {"success": True, "rates": rates, "provider": "FRED+akshare"}
412
+ return {"success": True, "rates": rates, "details": details, "provider": "FRED+akshare"}
@@ -969,11 +969,21 @@ def render_finance_result(tool_name: str, result: dict, *, console=None, has_ric
969
969
  return
970
970
 
971
971
 
972
- def render_macro_result(r: dict, title: str, *, console=None, has_rich: bool = True) -> None:
972
+ def render_macro_result(r: dict, title: str, *, console=None, has_rich: bool = True,
973
+ lang: str = "zh") -> None:
973
974
  """Render US or CN macro result dict."""
975
+ zh = str(lang).lower().startswith("zh")
974
976
  if not r.get("success"):
975
- if has_rich: console.print(f" [red]{r.get('error','数据获取失败')}[/red]")
976
- else: print(f" {r.get('error','failed')}")
977
+ error = r.get("error", "数据获取失败" if zh else "data unavailable")
978
+ if "akshare" in str(error):
979
+ # China data is optional; a missing package is a note, not a red error.
980
+ error = ("中国宏观数据需要 akshare:pip install akshare" if zh
981
+ else "China macro data needs akshare: pip install akshare")
982
+ if has_rich: console.print(f" [dim]{error}[/dim]")
983
+ else: print(f" {error}")
984
+ return
985
+ if has_rich: console.print(f" [red]{error}[/red]")
986
+ else: print(f" {error}")
977
987
  return
978
988
  data = r.get("data", {})
979
989
  if has_rich:
@@ -981,10 +991,10 @@ def render_macro_result(r: dict, title: str, *, console=None, has_rich: bool = T
981
991
  from rich.rule import Rule
982
992
  console.print(Rule(f"[bold]{title}[/bold]", style="dim"))
983
993
  t = Table(show_header=True, box=None, padding=(0, 1))
984
- t.add_column("指标", style="dim", min_width=20)
985
- t.add_column("最新值", justify="right", min_width=10)
986
- t.add_column("环比变化", justify="right")
987
- t.add_column("时间", style="dim")
994
+ t.add_column("指标" if zh else "Indicator", style="dim", min_width=20)
995
+ t.add_column("最新值" if zh else "Latest", justify="right", min_width=10)
996
+ t.add_column("环比变化" if zh else "Change", justify="right")
997
+ t.add_column("时间" if zh else "Date", style="dim")
988
998
  for key, item in data.items():
989
999
  if key.startswith("_"): continue
990
1000
  if not isinstance(item, dict): continue
@@ -993,7 +1003,7 @@ def render_macro_result(r: dict, title: str, *, console=None, has_rich: bool = T
993
1003
  date = latest.get("date", "")
994
1004
  change = item.get("change")
995
1005
  unit = item.get("unit", "")
996
- label = item.get("label", key)
1006
+ label = item.get("label", key) if zh else item.get("label_en", item.get("label", key))
997
1007
  if val is None: continue
998
1008
  val_str = f"{val:.2f}{unit}"
999
1009
  if change is not None:
@@ -1006,40 +1016,55 @@ def render_macro_result(r: dict, title: str, *, console=None, has_rich: bool = T
1006
1016
  yc = data.get("_yield_curve", {})
1007
1017
  if yc:
1008
1018
  sp = yc.get("spread_10y_2y", 0)
1009
- shape = yc.get("shape", "")
1019
+ shape = yc.get("shape", "") if zh else yc.get("shape_en", yc.get("shape", ""))
1010
1020
  color = "green" if sp > 0 else "red"
1011
- console.print(f" 收益率曲线: [{color}]{shape}[/{color}] 10Y-2Y利差: [{color}]{sp:+.3f}%[/{color}]")
1021
+ if zh:
1022
+ console.print(f" 收益率曲线: [{color}]{shape}[/{color}] 10Y-2Y利差: [{color}]{sp:+.3f}%[/{color}]")
1023
+ else:
1024
+ console.print(f" Yield curve: [{color}]{shape}[/{color}] 10Y-2Y spread: [{color}]{sp:+.3f}%[/{color}]")
1012
1025
  else:
1013
1026
  print(f"\n{title}")
1014
1027
  for key, item in data.items():
1015
1028
  if not isinstance(item, dict) or key.startswith("_"): continue
1016
1029
  v = (item.get("latest") or {}).get("value")
1017
1030
  if v is not None:
1018
- print(f" {item.get('label',key):<28} {v:.3g}")
1031
+ print(f" {(item.get('label', key) if zh else item.get('label_en', key)):<28} {v:.3g}")
1019
1032
 
1020
1033
 
1021
- def render_cb_rates(r: dict, *, console=None, has_rich: bool = True) -> None:
1022
- """Render central bank rates."""
1034
+ def render_cb_rates(r: dict, *, console=None, has_rich: bool = True, lang: str = "zh") -> None:
1035
+ """Render central bank rates, each with its date; a stale value is marked, not shown as current."""
1036
+ zh = str(lang).lower().startswith("zh")
1023
1037
  if not r.get("success"):
1024
1038
  if has_rich: console.print(f" [red]{r.get('error')}[/red]")
1025
1039
  return
1026
- rates = r.get("rates", {})
1040
+ details = r.get("details") or [
1041
+ {"label_zh": name, "label_en": name, "value": val, "date": "", "stale": False}
1042
+ for name, val in (r.get("rates") or {}).items()
1043
+ ]
1044
+ title = "主要央行政策利率" if zh else "Central bank rates"
1027
1045
  if has_rich:
1028
1046
  from rich.rule import Rule
1029
1047
  from rich.table import Table
1030
- console.print(Rule("[bold]🏦 主要央行政策利率[/bold]", style="dim"))
1048
+ console.print(Rule(f"[bold]{title}[/bold]", style="dim"))
1031
1049
  t = Table(show_header=False, box=None, padding=(0,1))
1032
1050
  t.add_column(style="dim", min_width=28)
1033
1051
  t.add_column(justify="right")
1034
- for name, val in rates.items():
1035
- if val is not None:
1036
- t.add_row(name, f"[bold]{val:.2f}%[/bold]")
1052
+ t.add_column(style="dim")
1053
+ for row in details:
1054
+ if row.get("value") is None:
1055
+ continue
1056
+ label = row["label_zh"] if zh else row["label_en"]
1057
+ if row.get("stale"):
1058
+ note = (f"数据停在 {row['date']},未显示" if zh else f"no data since {row['date']}, not shown")
1059
+ t.add_row(label, "—", note)
1060
+ else:
1061
+ t.add_row(label, f"[bold]{row['value']:.2f}%[/bold]", row.get("date", ""))
1037
1062
  console.print(t)
1038
1063
  else:
1039
- print("\n央行利率")
1040
- for name, val in rates.items():
1041
- if val is not None:
1042
- print(f" {name:<30} {val:.2f}%")
1064
+ print("\n" + title)
1065
+ for row in details:
1066
+ if row.get("value") is not None and not row.get("stale"):
1067
+ print(f" {(row['label_zh'] if zh else row['label_en']):<30} {row['value']:.2f}% {row.get('date', '')}")
1043
1068
 
1044
1069
 
1045
1070
  def render_econ_calendar(r: dict, *, console=None, has_rich: bool = True) -> None:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.99.0
3
+ Version: 0.100.0
4
4
  Summary: Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/artheras/aria-code
@@ -580,6 +580,7 @@ tests/test_doctor_describes_the_current_install.py
580
580
  tests/test_doctor_npm_scope.py
581
581
  tests/test_edit_and_command_safety.py
582
582
  tests/test_engine_boundary.py
583
+ tests/test_english_output_group.py
583
584
  tests/test_enterprise_tool_honesty.py
584
585
  tests/test_env_switch_docs.py
585
586
  tests/test_evals_harness.py
@@ -725,6 +726,7 @@ tests/test_slash_popup.py
725
726
  tests/test_spreadsheet_tools.py
726
727
  tests/test_sse_stream_contract.py
727
728
  tests/test_startup_dashboard.py
729
+ tests/test_startup_keeps_cloud_model.py
728
730
  tests/test_startup_latency.py
729
731
  tests/test_status_language.py
730
732
  tests/test_streaming_pipeline.py
@@ -0,0 +1,82 @@
1
+ """English sessions get English output, real dates and real values.
2
+
3
+ Recorded in an English session: /macro headed "🇺🇸 美国宏观" with Chinese
4
+ labels, a flag emoji that broke the rule line, and the Bank of England rate
5
+ as 0.25% (FRED's BOERUKM stopped in January 2017); /screen showed no P/E for
6
+ any stock, so its value screen matched nothing; /carriers printed a raw
7
+ "[Errno 2]"; /warehouse gave its usage in Chinese; and /report, whose prompt
8
+ was routed back to /report, wrote everything twice.
9
+ """
10
+
11
+ from __future__ import annotations
12
+
13
+ import asyncio
14
+ import io
15
+ from datetime import date, timedelta
16
+ from types import SimpleNamespace
17
+
18
+ import pytest
19
+ from rich.console import Console
20
+
21
+
22
+ def _console():
23
+ return Console(file=io.StringIO(), width=100, color_system=None)
24
+
25
+
26
+ def test_a_stale_central_bank_rate_is_not_shown_as_current(monkeypatch):
27
+ from aria_code.tools import macro_tools
28
+ from aria_code.ui.render.finance import render_cb_rates
29
+
30
+ recent = (date.today() - timedelta(days=5)).isoformat()
31
+ series = {"FEDFUNDS": [{"date": recent, "value": 3.75}], "ECBDFR": [{"date": recent, "value": 2.5}],
32
+ "IUDSOIA": [{"date": "2017-01-01", "value": 0.25}], "IRSTCI01JPM156N": []}
33
+ monkeypatch.setattr(macro_tools, "_fred_series", lambda s, limit=3, **k: series.get(s, []))
34
+ monkeypatch.setattr(macro_tools, "_HAS_AK", False)
35
+ result = macro_tools.get_central_bank_rates()
36
+ assert "英国 SONIA (跟随英央行利率)" not in result["rates"]
37
+ con = _console()
38
+ render_cb_rates(result, console=con, has_rich=True, lang="en")
39
+ text = con.file.getvalue()
40
+ assert "Central bank rates" in text and "ECB deposit facility rate" in text and recent in text
41
+ assert "no data since 2017-01-01, not shown" in text and "0.25%" not in text
42
+
43
+
44
+ def test_us_macro_is_english_in_an_english_session():
45
+ from aria_code.ui.render.finance import render_macro_result
46
+
47
+ result = {"success": True, "data": {
48
+ "fed_rate": {"label": "联邦基金利率 (%)", "label_en": "Fed funds rate (%)", "unit": "%",
49
+ "latest": {"value": 3.75, "date": "2026-09-01"}, "change": 0.12},
50
+ "_yield_curve": {"spread_10y_2y": 0.47, "shape": "正常", "shape_en": "normal"}}}
51
+ con = _console()
52
+ render_macro_result(result, "US macro", console=con, has_rich=True, lang="en")
53
+ text = con.file.getvalue()
54
+ assert "Fed funds rate (%)" in text and "Yield curve: normal" in text
55
+ assert "联邦" not in text and "收益率" not in text
56
+ con = _console()
57
+ render_macro_result({"success": False, "error": "akshare 未安装,请运行: pip install akshare"},
58
+ "China macro", console=con, has_rich=True, lang="en")
59
+ assert con.file.getvalue().strip() == "China macro data needs akshare: pip install akshare"
60
+
61
+
62
+ def test_a_missing_logistics_file_names_the_files_that_are_there(tmp_path):
63
+ from aria_code.tools.logistics_io import load_records
64
+
65
+ (tmp_path / "waybills.csv").write_text("a\n1\n")
66
+ with pytest.raises(ValueError) as info:
67
+ load_records({"file_path": str(tmp_path / "shipments.csv")}, "waybills")
68
+ assert "No such file" in str(info.value) and "waybills.csv" in str(info.value)
69
+ assert "Errno" not in str(info.value)
70
+
71
+
72
+ def test_only_typed_text_is_routed(monkeypatch):
73
+ """A prompt a command builds goes to the model, not back to a command."""
74
+ import inspect
75
+
76
+ from aria_code.apps.cli.chat_turn import ChatTurnMixin
77
+
78
+ source = inspect.getsource(ChatTurnMixin.send_message)
79
+ assert "route_text: bool = False" in source
80
+ assert "route_text\n and not system_override" in source
81
+ import aria_code.aria_cli as cli
82
+ assert "await self.send_message(user_input, route_text=True)" in inspect.getsource(cli)