aria-code 0.100.0__tar.gz → 0.101.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 (781) hide show
  1. {aria_code-0.100.0/src/aria_code.egg-info → aria_code-0.101.0}/PKG-INFO +1 -1
  2. {aria_code-0.100.0 → aria_code-0.101.0}/pyproject.toml +1 -1
  3. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/_version.py +1 -1
  4. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +1 -0
  5. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/report.py +53 -14
  6. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +88 -33
  7. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/evals/harness.py +37 -1
  8. aria_code-0.101.0/src/aria_code/evals/summary.py +75 -0
  9. {aria_code-0.100.0 → aria_code-0.101.0/src/aria_code.egg-info}/PKG-INFO +1 -1
  10. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code.egg-info/SOURCES.txt +4 -0
  11. aria_code-0.101.0/tests/test_eval_summary.py +75 -0
  12. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_evals_harness.py +25 -0
  13. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_output_rendering.py +2 -1
  14. aria_code-0.101.0/tests/test_report_prompt_language.py +43 -0
  15. aria_code-0.101.0/tests/test_vertex_empty_rounds.py +82 -0
  16. {aria_code-0.100.0 → aria_code-0.101.0}/LICENSE +0 -0
  17. {aria_code-0.100.0 → aria_code-0.101.0}/NOTICE +0 -0
  18. {aria_code-0.100.0 → aria_code-0.101.0}/README.md +0 -0
  19. {aria_code-0.100.0 → aria_code-0.101.0}/setup.cfg +0 -0
  20. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/__init__.py +0 -0
  21. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/adk_apps/__init__.py +0 -0
  22. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
  23. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
  24. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
  25. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
  26. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/__init__.py +0 -0
  27. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/base.py +0 -0
  28. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/code_review.py +0 -0
  29. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/__init__.py +0 -0
  30. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
  31. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/critic.py +0 -0
  32. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/deepen.py +0 -0
  33. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/models.py +0 -0
  34. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/pipeline.py +0 -0
  35. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
  36. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/themes.py +0 -0
  37. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/deep/tiers.py +0 -0
  38. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/engineering/__init__.py +0 -0
  39. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/engineering/coder.py +0 -0
  40. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/engineering/tester.py +0 -0
  41. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/__init__.py +0 -0
  42. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
  43. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/catalyst.py +0 -0
  44. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
  45. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/debate.py +0 -0
  46. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/earnings.py +0 -0
  47. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/fundamental.py +0 -0
  48. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/macro.py +0 -0
  49. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/news.py +0 -0
  50. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/risk.py +0 -0
  51. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/sector.py +0 -0
  52. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/strategist.py +0 -0
  53. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
  54. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/synthesis.py +0 -0
  55. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/financial/technical.py +0 -0
  56. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/orchestrator.py +0 -0
  57. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/portfolio_agent.py +0 -0
  58. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/__init__.py +0 -0
  59. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
  60. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/business_match.py +0 -0
  61. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
  62. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
  63. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
  64. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
  65. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
  66. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
  67. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
  68. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/registry.py +0 -0
  69. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/signal_scheme.py +0 -0
  70. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/sports/__init__.py +0 -0
  71. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/sports/football_agent.py +0 -0
  72. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/supervisor.py +0 -0
  73. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/team.py +0 -0
  74. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
  75. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
  76. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
  77. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
  78. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
  79. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
  80. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
  81. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
  82. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
  83. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
  84. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
  85. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/aliyun_data_client.py +0 -0
  86. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/README.md +0 -0
  87. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/__init__.py +0 -0
  88. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/channels/README.md +0 -0
  89. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/channels/__init__.py +0 -0
  90. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/channels/approvals.py +0 -0
  91. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/channels/conversation.py +0 -0
  92. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/channels/digest.py +0 -0
  93. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/channels/intake.py +0 -0
  94. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/channels/registry.py +0 -0
  95. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/channels/tradingview.py +0 -0
  96. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/README.md +0 -0
  97. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/__init__.py +0 -0
  98. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/_optional.py +0 -0
  99. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
  100. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/broker_render.py +0 -0
  101. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/chat_turn.py +0 -0
  102. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
  103. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
  104. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
  105. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
  106. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
  107. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
  108. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
  109. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
  110. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
  111. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
  112. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
  113. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
  114. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/core_cmds.py +0 -0
  115. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
  116. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
  117. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
  118. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
  119. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
  120. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
  121. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/market.py +0 -0
  122. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
  123. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
  124. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
  125. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
  126. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
  127. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
  128. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
  129. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
  130. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
  131. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
  132. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/team.py +0 -0
  133. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
  134. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
  135. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
  136. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
  137. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
  138. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/config_paths.py +0 -0
  139. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/config_store.py +0 -0
  140. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/constants.py +0 -0
  141. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/context.py +0 -0
  142. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/deterministic.py +0 -0
  143. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/direct.py +0 -0
  144. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/earnings_view.py +0 -0
  145. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/exec_events.py +0 -0
  146. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
  147. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/football_reports.py +0 -0
  148. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
  149. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/google_login.py +0 -0
  150. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
  151. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
  152. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
  153. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
  154. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
  155. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
  156. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
  157. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/headless.py +0 -0
  158. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/helpers.py +0 -0
  159. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/hooks.py +0 -0
  160. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/i18n.py +0 -0
  161. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/intent.py +0 -0
  162. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/intent_router.py +0 -0
  163. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
  164. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
  165. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
  166. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/main.py +0 -0
  167. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/market_hours.py +0 -0
  168. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
  169. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/market_universe.py +0 -0
  170. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/message_processing.py +0 -0
  171. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/mixin_binding.py +0 -0
  172. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
  173. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
  174. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
  175. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
  176. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
  177. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/preflight.py +0 -0
  178. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/project_aria.py +0 -0
  179. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
  180. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
  181. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
  182. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
  183. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
  184. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
  185. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
  186. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
  187. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
  188. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/base.py +0 -0
  189. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
  190. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
  191. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
  192. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
  193. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
  194. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
  195. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
  196. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +0 -0
  197. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/review_runner.py +0 -0
  198. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
  199. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/sandbox.py +0 -0
  200. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/session_export.py +0 -0
  201. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
  202. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/session_store.py +0 -0
  203. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
  204. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/terminal_chrome.py +0 -0
  205. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
  206. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
  207. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
  208. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
  209. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
  210. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tools/context.py +0 -0
  211. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
  212. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
  213. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
  214. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
  215. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
  216. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
  217. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
  218. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/update_check.py +0 -0
  219. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/updater.py +0 -0
  220. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
  221. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
  222. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/cli/workspace_route.py +0 -0
  223. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/daemon/README.md +0 -0
  224. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/vscode/README.md +0 -0
  225. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/apps/vscode/package.json +0 -0
  226. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/aria_cli.py +0 -0
  227. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/aria_daemon.py +0 -0
  228. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/aria_feishu_bot.py +0 -0
  229. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/aria_mcp_server.py +0 -0
  230. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/aria_relay_client.py +0 -0
  231. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/aria_relay_server.py +0 -0
  232. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/aria_telegram_bot.py +0 -0
  233. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ariarc.py +0 -0
  234. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/artifacts.py +0 -0
  235. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/backtest_engine.py +0 -0
  236. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/backtest_report.py +0 -0
  237. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/__init__.py +0 -0
  238. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/automation.py +0 -0
  239. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/base.py +0 -0
  240. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/capabilities.py +0 -0
  241. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/cn/__init__.py +0 -0
  242. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
  243. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
  244. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
  245. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
  246. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
  247. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/config.py +0 -0
  248. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/intl/__init__.py +0 -0
  249. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
  250. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
  251. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
  252. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
  253. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/paper_broker.py +0 -0
  254. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/planning.py +0 -0
  255. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/registry.py +0 -0
  256. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/brokers/trading.py +0 -0
  257. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/canva_client.py +0 -0
  258. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/change_store.py +0 -0
  259. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/__init__.py +0 -0
  260. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
  261. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/aria_relay_client.py +0 -0
  262. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/canva_client.py +0 -0
  263. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/figma_client.py +0 -0
  264. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/football_data_client.py +0 -0
  265. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/kling_video_client.py +0 -0
  266. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/market_data_client.py +0 -0
  267. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/openai_image_client.py +0 -0
  268. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/runway_video_client.py +0 -0
  269. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
  270. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/cloud_memory.py +0 -0
  271. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/command_safety.py +0 -0
  272. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/computer_use_tools.py +0 -0
  273. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/dashboard_generator.py +0 -0
  274. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/data_analysis_tools.py +0 -0
  275. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/data_cleaner.py +0 -0
  276. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/data_service.py +0 -0
  277. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/__init__.py +0 -0
  278. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/base.py +0 -0
  279. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/router.py +0 -0
  280. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/__init__.py +0 -0
  281. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
  282. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
  283. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
  284. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
  285. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
  286. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
  287. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
  288. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
  289. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
  290. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/demo_player.py +0 -0
  291. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/doctor.py +0 -0
  292. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/domain/__init__.py +0 -0
  293. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/domain/backtest_engine.py +0 -0
  294. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/domain/backtest_report.py +0 -0
  295. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/domain/finance_formulas.py +0 -0
  296. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
  297. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/domain/strategy_vault.py +0 -0
  298. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/evals/__init__.py +0 -0
  299. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/evals/runner.py +0 -0
  300. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/external_agent_runner.py +0 -0
  301. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/figma_client.py +0 -0
  302. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/file_analysis_tools.py +0 -0
  303. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/finance_formulas.py +0 -0
  304. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/football_data_client.py +0 -0
  305. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/image_gen_tools.py +0 -0
  306. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/intent_classifier.py +0 -0
  307. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/kling_video_client.py +0 -0
  308. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/licensing.py +0 -0
  309. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/local_finance_tools.py +0 -0
  310. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/local_image_provider.py +0 -0
  311. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/local_llm_provider.py +0 -0
  312. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/macro_tools.py +0 -0
  313. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/markdown_pdf.py +0 -0
  314. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/market_data_client.py +0 -0
  315. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/mcp_client.py +0 -0
  316. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/memory_manager.py +0 -0
  317. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/model_capability.py +0 -0
  318. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/notification_tools.py +0 -0
  319. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/openai_image_client.py +0 -0
  320. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/__init__.py +0 -0
  321. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
  322. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
  323. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
  324. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
  325. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
  326. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
  327. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
  328. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_core/export.py +0 -0
  329. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
  330. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_core/paths.py +0 -0
  331. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
  332. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
  333. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
  334. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
  335. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_infra/product.py +0 -0
  336. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
  337. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
  338. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
  339. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
  340. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
  341. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
  342. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
  343. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
  344. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
  345. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
  346. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
  347. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
  348. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
  349. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/cache.py +0 -0
  350. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/context.py +0 -0
  351. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
  352. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/data.py +0 -0
  353. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
  354. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/references.py +0 -0
  355. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/registry.py +0 -0
  356. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
  357. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
  358. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/settings.py +0 -0
  359. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_services/usage.py +0 -0
  360. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
  361. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
  362. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
  363. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
  364. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
  365. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
  366. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
  367. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
  368. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
  369. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
  370. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
  371. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
  372. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
  373. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
  374. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
  375. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
  376. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
  377. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
  378. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
  379. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
  380. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
  381. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
  382. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
  383. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
  384. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
  385. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
  386. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
  387. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
  388. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
  389. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
  390. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
  391. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
  392. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
  393. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
  394. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
  395. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packs/__init__.py +0 -0
  396. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packs/base.py +0 -0
  397. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packs/finance/__init__.py +0 -0
  398. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packs/logistics/__init__.py +0 -0
  399. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packs/payments/__init__.py +0 -0
  400. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packs/realty/__init__.py +0 -0
  401. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packs/registry.py +0 -0
  402. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/packs/rules.py +0 -0
  403. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/plan_utils.py +0 -0
  404. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/plugin_loader.py +0 -0
  405. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/portfolio_ledger.py +0 -0
  406. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/preview_server.py +0 -0
  407. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/privacy/__init__.py +0 -0
  408. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/privacy/feedback.py +0 -0
  409. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/project_review.py +0 -0
  410. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/project_review_api.py +0 -0
  411. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/project_review_server.py +0 -0
  412. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/project_tools.py +0 -0
  413. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/__init__.py +0 -0
  414. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/llm/__init__.py +0 -0
  415. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/llm/anthropic.py +0 -0
  416. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
  417. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/llm/base.py +0 -0
  418. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/llm/custom.py +0 -0
  419. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/llm/ollama.py +0 -0
  420. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
  421. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/llm/registry.py +0 -0
  422. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/local_image_provider.py +0 -0
  423. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/local_llm_provider.py +0 -0
  424. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/providers/tool_messages.py +0 -0
  425. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/realty_data_tools.py +0 -0
  426. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/relay_store.py +0 -0
  427. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/report_exporters.py +0 -0
  428. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/report_generator.py +0 -0
  429. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/review_service.py +0 -0
  430. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/__init__.py +0 -0
  431. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/acceptance.py +0 -0
  432. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/agent_loop.py +0 -0
  433. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/approval.py +0 -0
  434. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/budget.py +0 -0
  435. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/checkpoints.py +0 -0
  436. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/crash_report.py +0 -0
  437. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/events.py +0 -0
  438. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/gateway.py +0 -0
  439. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/lsp.py +0 -0
  440. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/orchestrator.py +0 -0
  441. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/processes.py +0 -0
  442. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/repo_map.py +0 -0
  443. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/run_state.py +0 -0
  444. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/run_store.py +0 -0
  445. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/self_healing.py +0 -0
  446. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/subagent.py +0 -0
  447. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/task_ledger.py +0 -0
  448. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
  449. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/tool_executor.py +0 -0
  450. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/tool_policy.py +0 -0
  451. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runtime/worktrees.py +0 -0
  452. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/runway_video_client.py +0 -0
  453. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/safety/__init__.py +0 -0
  454. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/safety/permissions.py +0 -0
  455. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/safety/sandbox.py +0 -0
  456. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/safety/service.py +0 -0
  457. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/setup_wizard.py +0 -0
  458. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/spreadsheet_tools.py +0 -0
  459. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/strategy_vault.py +0 -0
  460. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/__init__.py +0 -0
  461. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/artifact_tools.py +0 -0
  462. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/broker_tools.py +0 -0
  463. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/build_quant_engine.py +0 -0
  464. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/code_audit_tools.py +0 -0
  465. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/computer_use_tools.py +0 -0
  466. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
  467. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
  468. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/extended_tools.py +0 -0
  469. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
  470. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/image_gen_tools.py +0 -0
  471. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/local_finance_tools.py +0 -0
  472. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/logistics_carriers.py +0 -0
  473. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/logistics_inventory.py +0 -0
  474. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/logistics_io.py +0 -0
  475. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
  476. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/logistics_tools.py +0 -0
  477. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/macro_tools.py +0 -0
  478. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/notification_tools.py +0 -0
  479. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/project_tools.py +0 -0
  480. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/realty_data_tools.py +0 -0
  481. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
  482. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/tools/stripe_tools.py +0 -0
  483. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/__init__.py +0 -0
  484. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/banner.py +0 -0
  485. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/completer.py +0 -0
  486. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/console.py +0 -0
  487. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/image_render.py +0 -0
  488. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/input_box.py +0 -0
  489. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/mentions.py +0 -0
  490. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/picker.py +0 -0
  491. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/render/__init__.py +0 -0
  492. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/render/finance.py +0 -0
  493. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/render/market.py +0 -0
  494. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/render/output.py +0 -0
  495. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/render/responsive.py +0 -0
  496. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/render/team.py +0 -0
  497. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/robot.py +0 -0
  498. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/ui/startup_dashboard.py +0 -0
  499. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/utils/vscode_uri.py +0 -0
  500. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/video_analysis.py +0 -0
  501. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/video_editor.py +0 -0
  502. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/workspace/__init__.py +0 -0
  503. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/workspace/files.py +0 -0
  504. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/workspace/verify.py +0 -0
  505. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/workspace_changes.py +0 -0
  506. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/workspace_context.py +0 -0
  507. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/workspace_service.py +0 -0
  508. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code/workspace_tools.py +0 -0
  509. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
  510. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code.egg-info/entry_points.txt +0 -0
  511. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code.egg-info/requires.txt +0 -0
  512. {aria_code-0.100.0 → aria_code-0.101.0}/src/aria_code.egg-info/top_level.txt +0 -0
  513. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_adk_market_tools.py +0 -0
  514. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_agent_key_points_language.py +0 -0
  515. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_agent_team_fallback.py +0 -0
  516. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_analyze_file_tool.py +0 -0
  517. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_architecture_ledger_is_true.py +0 -0
  518. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_architecture_report.py +0 -0
  519. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_aria_cli_core.py +0 -0
  520. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_aria_mcp_server.py +0 -0
  521. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_aria_sdk.py +0 -0
  522. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_artifact_publishing.py +0 -0
  523. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_artifacts_and_reports.py +0 -0
  524. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ashare_prediction_cmds.py +0 -0
  525. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_background_processes.py +0 -0
  526. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_backtest_cmds.py +0 -0
  527. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_backtest_engine.py +0 -0
  528. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_backtest_report.py +0 -0
  529. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_backtest_runs_what_it_names.py +0 -0
  530. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
  531. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_broken_akshare_is_optional.py +0 -0
  532. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_broker_automation.py +0 -0
  533. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_broker_chat_confirm_gate.py +0 -0
  534. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_broker_planning.py +0 -0
  535. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_broker_safety.py +0 -0
  536. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_broker_tools.py +0 -0
  537. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_budget.py +0 -0
  538. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_business_workflow_cmds.py +0 -0
  539. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_canva_client.py +0 -0
  540. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_canvas_cmds.py +0 -0
  541. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_card_approvals.py +0 -0
  542. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_channel_intake.py +0 -0
  543. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_channels.py +0 -0
  544. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_chart_handlers.py +0 -0
  545. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_chat_bots_fail_closed.py +0 -0
  546. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_chat_routing.py +0 -0
  547. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ci_security_workflow.py +0 -0
  548. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_cli_app_split.py +0 -0
  549. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_cli_bootstrap.py +0 -0
  550. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_cli_config_store.py +0 -0
  551. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_cli_lifecycle_hooks.py +0 -0
  552. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_cli_runtime_consumer.py +0 -0
  553. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_cli_tool_executor_module.py +0 -0
  554. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_cli_updater.py +0 -0
  555. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_cloud_memory.py +0 -0
  556. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_code_audit_tools.py +0 -0
  557. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_code_review_agent.py +0 -0
  558. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_codegen_output.py +0 -0
  559. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_coder_tester_self_healing.py +0 -0
  560. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_coder_tool_safety.py +0 -0
  561. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_collaboration.py +0 -0
  562. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_command_loggers.py +0 -0
  563. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_command_safety.py +0 -0
  564. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_compare_strategies.py +0 -0
  565. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_completions_builder.py +0 -0
  566. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_config_paths.py +0 -0
  567. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_configured_provider.py +0 -0
  568. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_container_entrypoint.py +0 -0
  569. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_container_entrypoints.py +0 -0
  570. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_context_checkpoints.py +0 -0
  571. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_context_references.py +0 -0
  572. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_context_service.py +0 -0
  573. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_conversation_core.py +0 -0
  574. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_crash_report.py +0 -0
  575. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_credential_file_permissions.py +0 -0
  576. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_custom_providers.py +0 -0
  577. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_daemon_gateway_config.py +0 -0
  578. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_dashboard_generator.py +0 -0
  579. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_data_service.py +0 -0
  580. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_data_service_imports.py +0 -0
  581. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_data_without_model.py +0 -0
  582. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_datasource_routing.py +0 -0
  583. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_deep_analysis.py +0 -0
  584. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_degrades_without_quant_engine.py +0 -0
  585. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
  586. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_doctor.py +0 -0
  587. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_doctor_describes_the_current_install.py +0 -0
  588. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_doctor_npm_scope.py +0 -0
  589. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_edit_and_command_safety.py +0 -0
  590. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_engine_boundary.py +0 -0
  591. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_english_output_group.py +0 -0
  592. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_enterprise_tool_honesty.py +0 -0
  593. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_env_switch_docs.py +0 -0
  594. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_event_import_roots.py +0 -0
  595. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_exec_events.py +0 -0
  596. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_extended_tools.py +0 -0
  597. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_feishu_swarm_config.py +0 -0
  598. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_file_links.py +0 -0
  599. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_finalize_release.py +0 -0
  600. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_finance_renderers.py +0 -0
  601. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_finance_service_catalog.py +0 -0
  602. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_first_run_output.py +0 -0
  603. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_first_run_works.py +0 -0
  604. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_football_agent.py +0 -0
  605. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_football_prediction_output.py +0 -0
  606. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_google_cloud_models.py +0 -0
  607. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_google_cloud_routing.py +0 -0
  608. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_google_login.py +0 -0
  609. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_google_search_provider.py +0 -0
  610. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_headless_is_agentic.py +0 -0
  611. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_honest_surfaces.py +0 -0
  612. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_image_gen_tools.py +0 -0
  613. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_image_inputs.py +0 -0
  614. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_import_graph_budget.py +0 -0
  615. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_intent_router.py +0 -0
  616. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_intent_signals.py +0 -0
  617. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_kling_video_client.py +0 -0
  618. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_lazy_rebind.py +0 -0
  619. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_legacy_module_imports.py +0 -0
  620. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_license_consistency.py +0 -0
  621. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_licensing.py +0 -0
  622. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_local_image_provider.py +0 -0
  623. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_logistics_3pl.py +0 -0
  624. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_logistics_and_finance_agents.py +0 -0
  625. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_lsp.py +0 -0
  626. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_markdown_pdf.py +0 -0
  627. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_market_answers_in_english.py +0 -0
  628. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_market_data_client.py +0 -0
  629. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_market_history_inheritance.py +0 -0
  630. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_market_history_tool.py +0 -0
  631. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_market_hours.py +0 -0
  632. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_market_questions_on_backend.py +0 -0
  633. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_market_symbol_extraction.py +0 -0
  634. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_market_universe.py +0 -0
  635. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_mcp_circuit.py +0 -0
  636. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_mcp_client.py +0 -0
  637. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_mentions.py +0 -0
  638. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_model_capability_registry.py +0 -0
  639. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_model_choice_is_the_users.py +0 -0
  640. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_model_selection_state.py +0 -0
  641. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_narrow_chinese_output.py +0 -0
  642. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_native_binary_entrypoints.py +0 -0
  643. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_native_installer.py +0 -0
  644. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_natural_language_routing.py +0 -0
  645. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_new_modules.py +0 -0
  646. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
  647. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_no_tools_route.py +0 -0
  648. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_no_uncommitted_imports.py +0 -0
  649. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_numeric_listings.py +0 -0
  650. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ollama_stream_imports.py +0 -0
  651. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ollama_stream_tools.py +0 -0
  652. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_openai_image_client.py +0 -0
  653. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_operations_suite.py +0 -0
  654. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_os_sandbox.py +0 -0
  655. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_packages_facade.py +0 -0
  656. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_packaging_constraints.py +0 -0
  657. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_packaging_manifest.py +0 -0
  658. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_packs_domains.py +0 -0
  659. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_pdf_report.py +0 -0
  660. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_pick_best_installed_model.py +0 -0
  661. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_plan_mode.py +0 -0
  662. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_platform_package_assembly.py +0 -0
  663. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_platform_packages.py +0 -0
  664. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_platform_publish.py +0 -0
  665. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_plotly_html_output.py +0 -0
  666. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_portfolio_language.py +0 -0
  667. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_portfolio_ledger.py +0 -0
  668. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_post_turn_context_decision.py +0 -0
  669. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_preflight.py +0 -0
  670. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_preview_server.py +0 -0
  671. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_privacy_feedback.py +0 -0
  672. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_project_aria.py +0 -0
  673. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_project_context_files.py +0 -0
  674. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_project_review.py +0 -0
  675. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_project_review_api.py +0 -0
  676. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_prompt_assembly.py +0 -0
  677. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_prompt_selection.py +0 -0
  678. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_provider_autoconfig.py +0 -0
  679. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_provider_error_messages.py +0 -0
  680. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_provider_integration.py +0 -0
  681. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_provider_registry.py +0 -0
  682. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_public_service_status.py +0 -0
  683. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_quant_engine_namespace.py +0 -0
  684. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_rebind_contract.py +0 -0
  685. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_rebind_namespace_contract.py +0 -0
  686. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_relay_client_credentials.py +0 -0
  687. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_relay_event_verification.py +0 -0
  688. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_relay_sends_for_clients.py +0 -0
  689. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_relay_store.py +0 -0
  690. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_relay_url.py +0 -0
  691. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_release_chain.py +0 -0
  692. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_release_commit_identity.py +0 -0
  693. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_release_push_is_atomic.py +0 -0
  694. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_release_reaches_the_registries.py +0 -0
  695. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_release_verification_waits.py +0 -0
  696. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_release_workflow_permissions.py +0 -0
  697. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_report_charts.py +0 -0
  698. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_report_generator.py +0 -0
  699. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_research_protocol.py +0 -0
  700. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_research_quality.py +0 -0
  701. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_responsive_rendering.py +0 -0
  702. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_review_service.py +0 -0
  703. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_risk_earnings_ops.py +0 -0
  704. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_root_module_budget.py +0 -0
  705. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_rsi_without_pandas_ta.py +0 -0
  706. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_acceptance.py +0 -0
  707. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_agent_loop.py +0 -0
  708. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_approval.py +0 -0
  709. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_bridge.py +0 -0
  710. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_bridge_fallback.py +0 -0
  711. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_checkpoints.py +0 -0
  712. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_event_identity.py +0 -0
  713. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_gateway.py +0 -0
  714. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_repo_map.py +0 -0
  715. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_run_store.py +0 -0
  716. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_tool_executor.py +0 -0
  717. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runtime_worktrees.py +0 -0
  718. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_runway_video_client.py +0 -0
  719. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_safety_permissions.py +0 -0
  720. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_safety_service.py +0 -0
  721. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_safety_service_adoption.py +0 -0
  722. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_service_diagnostics_security.py +0 -0
  723. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_session_search.py +0 -0
  724. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_settings_service.py +0 -0
  725. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_shell_commands_as_written.py +0 -0
  726. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_shipper_digest.py +0 -0
  727. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_single_import_root.py +0 -0
  728. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_skill_agent_binding.py +0 -0
  729. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_skill_catalog.py +0 -0
  730. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_skill_loader.py +0 -0
  731. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_slash_popup.py +0 -0
  732. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_spreadsheet_tools.py +0 -0
  733. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_sse_stream_contract.py +0 -0
  734. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_startup_dashboard.py +0 -0
  735. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_startup_keeps_cloud_model.py +0 -0
  736. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_startup_latency.py +0 -0
  737. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_status_language.py +0 -0
  738. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_streaming_pipeline.py +0 -0
  739. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_stripe_agent.py +0 -0
  740. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_subagent.py +0 -0
  741. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_supervisor_routing.py +0 -0
  742. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_system_prompts.py +0 -0
  743. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_system_tools_output.py +0 -0
  744. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_task_orchestrator.py +0 -0
  745. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_team_analysts.py +0 -0
  746. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_team_synthesis.py +0 -0
  747. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_terminal_mixins.py +0 -0
  748. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_terminal_snapshots.py +0 -0
  749. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_tls_trust_store.py +0 -0
  750. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_tool_policy.py +0 -0
  751. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
  752. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_tool_scope.py +0 -0
  753. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_tool_step_output.py +0 -0
  754. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_trading_service.py +0 -0
  755. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_tradingview_bridge.py +0 -0
  756. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_turn_planning.py +0 -0
  757. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ui_completer_references.py +0 -0
  758. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ui_console_theme.py +0 -0
  759. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ui_input_box.py +0 -0
  760. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ui_language_and_model.py +0 -0
  761. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_ui_robot_banner.py +0 -0
  762. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_update_health_routes.py +0 -0
  763. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_verification_hint.py +0 -0
  764. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_verification_policy.py +0 -0
  765. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_version_consistency.py +0 -0
  766. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_version_counter.py +0 -0
  767. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_video_analysis.py +0 -0
  768. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_video_editor.py +0 -0
  769. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_vscode_mcp.py +0 -0
  770. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_warehouse_agents.py +0 -0
  771. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_warehouse_cli_registration.py +0 -0
  772. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_warehouse_erp_client.py +0 -0
  773. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_warehouse_workflow.py +0 -0
  774. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_wheel_is_installable.py +0 -0
  775. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_workspace_changes.py +0 -0
  776. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_workspace_context.py +0 -0
  777. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_workspace_files.py +0 -0
  778. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_workspace_scope.py +0 -0
  779. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_workspace_service.py +0 -0
  780. {aria_code-0.100.0 → aria_code-0.101.0}/tests/test_workspace_verify.py +0 -0
  781. {aria_code-0.100.0 → aria_code-0.101.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.100.0
3
+ Version: 0.101.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.100.0"
7
+ version = "0.101.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.100.0"
20
+ __version__ = "0.101.0"
@@ -431,6 +431,7 @@ class PortfolioCommandsMixin:
431
431
  data_quality=data_quality,
432
432
  data_bundle=data_bundle,
433
433
  now=_dt.now(),
434
+ lang=ui_text(self, "zh", "en"),
434
435
  )
435
436
 
436
437
  await self.terminal.send_message(ai_prompt)
@@ -273,24 +273,29 @@ def metric_line(label: str, value: Any, digits: int = 2, suffix: str = "") -> st
273
273
  return f"- {label}: {rendered}" if rendered != "-" else ""
274
274
 
275
275
 
276
- def markdown_data_block(market_data: dict[str, Any]) -> str:
276
+ def markdown_data_block(market_data: dict[str, Any], lang: str = "zh") -> str:
277
+ en = lang == "en"
277
278
  data_lines = [
278
- metric_line("当前价", market_data.get("price")),
279
- metric_line("涨跌", market_data.get("change_pct"), suffix="%"),
279
+ metric_line("Price" if en else "当前价", market_data.get("price")),
280
+ metric_line("Change" if en else "涨跌", market_data.get("change_pct"), suffix="%"),
280
281
  metric_line("RSI(14)", market_data.get("rsi")),
281
282
  metric_line("MACD", market_data.get("macd"), digits=4),
282
283
  metric_line("MA20", market_data.get("ma20")),
283
284
  metric_line("MA60", market_data.get("ma60")),
284
- metric_line("布林上轨", market_data.get("bb_upper")),
285
- metric_line("布林下轨", market_data.get("bb_lower")),
285
+ metric_line("Bollinger upper" if en else "布林上轨", market_data.get("bb_upper")),
286
+ metric_line("Bollinger lower" if en else "布林下轨", market_data.get("bb_lower")),
286
287
  ]
287
288
  data_block = "\n".join(line for line in data_lines if line)
288
289
  if data_block:
289
290
  return data_block
291
+ if en:
292
+ return ("- Live market data is unavailable; the report must state this limitation and must not "
293
+ "invent prices or indicators.")
290
294
  return "- 实时行情数据暂不可用;报告必须明确说明数据限制,不得编造价格或指标。"
291
295
 
292
296
 
293
- def markdown_provenance_block(data_quality: dict[str, Any], data_bundle: Any = None) -> str:
297
+ def markdown_provenance_block(data_quality: dict[str, Any], data_bundle: Any = None, lang: str = "zh") -> str:
298
+ en = lang == "en"
294
299
  provider_chain = (
295
300
  data_quality.get("providers")
296
301
  or getattr(data_bundle, "provider_chain", [])
@@ -301,16 +306,26 @@ def markdown_provenance_block(data_quality: dict[str, Any], data_bundle: Any = N
301
306
  or data_quality.get("missing_fields")
302
307
  or []
303
308
  )
309
+ status = data_quality.get('status', getattr(data_bundle, 'status', 'unknown') if data_bundle else 'unknown')
310
+ labels = (("Data status", "Stale", "Provider chain", "Missing fields") if en
311
+ else ("数据状态", "是否过期", "数据源链", "缺失字段"))
304
312
  lines = [
305
- f"- 数据状态: {data_quality.get('status', getattr(data_bundle, 'status', 'unknown') if data_bundle else 'unknown')}",
306
- f"- 是否过期: {'yes' if data_quality.get('stale') else 'no'}",
307
- f"- 数据源链: {', '.join(provider_chain) if provider_chain else 'unknown'}",
308
- f"- 缺失字段: {', '.join(missing_fields) if missing_fields else 'none'}",
313
+ f"- {labels[0]}: {status}",
314
+ f"- {labels[1]}: {'yes' if data_quality.get('stale') else 'no'}",
315
+ f"- {labels[2]}: {', '.join(provider_chain) if provider_chain else 'unknown'}",
316
+ f"- {labels[3]}: {', '.join(missing_fields) if missing_fields else 'none'}",
309
317
  ]
310
318
  return "\n".join(lines)
311
319
 
312
320
 
313
- def report_depth_description(report_type: str) -> str:
321
+ def report_depth_description(report_type: str, lang: str = "zh") -> str:
322
+ if lang == "en":
323
+ if report_type == "deep":
324
+ return ("deep edition (about 8 pages): valuation (DCF and relative), three years of P&L, "
325
+ "management, and the competitive landscape")
326
+ if report_type == "brief":
327
+ return "brief edition: one page, the core view, key numbers and a one-sentence conclusion"
328
+ return "standard edition: cover, technical analysis, fundamentals overview, risk factors"
314
329
  if report_type == "deep":
315
330
  return "深度(8页)版本:包含估值模型(DCF + 相对估值)、财务分析(3年P&L)、管理层分析、行业竞争格局"
316
331
  if report_type == "brief":
@@ -326,11 +341,35 @@ def build_markdown_report_prompt(
326
341
  data_quality: dict[str, Any],
327
342
  data_bundle: Any = None,
328
343
  now: datetime | None = None,
344
+ lang: str = "zh",
329
345
  ) -> str:
346
+ """The prompt for a Markdown research report, in the session's language.
347
+
348
+ It was Chinese only, ending "用中文输出": an English session got a Chinese
349
+ report, and when the model was unavailable the fallback analysis followed
350
+ the prompt into Chinese too.
351
+ """
330
352
  report_date = (now or datetime.now()).strftime("%Y-%m-%d")
331
- data_block = markdown_data_block(market_data)
332
- provenance_block = markdown_provenance_block(data_quality, data_bundle)
333
- depth = report_depth_description(report_type)
353
+ data_block = markdown_data_block(market_data, lang)
354
+ provenance_block = markdown_provenance_block(data_quality, data_bundle, lang)
355
+ depth = report_depth_description(report_type, lang)
356
+ if lang == "en":
357
+ return (
358
+ f"Write a professional Markdown research report on {symbol} ({depth}).\n\n"
359
+ f"**Live data (use only the fields below; do not fill in missing ones)**:\n"
360
+ f"{data_block}\n\n"
361
+ f"**Data quality (state it plainly in the report)**:\n"
362
+ f"{provenance_block}\n\n"
363
+ f"Report structure (Markdown):\n"
364
+ f"# {symbol} Research Report\n"
365
+ f"**Rating**: Buy/Neutral/Reduce **Target price**: X.XX **Date**: {report_date}\n\n"
366
+ f"## Key points\n"
367
+ f"## Technical analysis\n"
368
+ f"## Fundamentals\n"
369
+ f"## Risk factors\n"
370
+ f"## Recommendation\n\n"
371
+ f"Use the real data, no placeholders; where data is missing, say what is missing. Write in English."
372
+ )
334
373
  return (
335
374
  f"为 {symbol} 生成一份专业 Markdown 投研报告({depth})。\n\n"
336
375
  f"**实时数据(仅使用下列已返回字段;缺失字段不要补写)**:\n"
@@ -27,6 +27,36 @@ _MISSING_SDK_MESSAGE = (
27
27
  )
28
28
 
29
29
 
30
+ import logging
31
+
32
+ logger = logging.getLogger(__name__)
33
+
34
+ _EMPTY_ROUND_RETRIES = 2
35
+
36
+
37
+ def _chunk_text(chunk) -> str:
38
+ """The text parts of a chunk, read without chunk.text.
39
+
40
+ chunk.text logs "there are non-text parts in the response: ['function_call']"
41
+ for every chunk that carries a call, which filled the eval logs.
42
+ """
43
+ out = []
44
+ for candidate in (getattr(chunk, "candidates", None) or [])[:1]:
45
+ content = getattr(candidate, "content", None)
46
+ for part in (getattr(content, "parts", None) or []):
47
+ text = getattr(part, "text", None)
48
+ if text and not getattr(part, "thought", False):
49
+ out.append(text)
50
+ if out:
51
+ return "".join(out)
52
+ if not getattr(chunk, "candidates", None):
53
+ try:
54
+ return chunk.text or ""
55
+ except Exception:
56
+ return ""
57
+ return ""
58
+
59
+
30
60
  class VertexAIProvider(LLMProvider):
31
61
  """Native Vertex AI provider using google-genai."""
32
62
 
@@ -265,41 +295,66 @@ class VertexAIProvider(LLMProvider):
265
295
  )
266
296
 
267
297
  try:
268
- # We must use asyncio.to_thread because the google-genai async client might not be used here
269
- # Or we can just use the sync stream generator wrapped in an async generator.
270
- # google-genai provides AsyncClient as well:
271
- # async_client = genai.Client(vertexai=True).aio
272
- response_stream = await client.aio.models.generate_content_stream(
273
- model=self.model,
274
- contents=contents,
275
- config=config,
276
- )
277
-
298
+ # Gemini sometimes ends a round with no text and no function call:
299
+ # finish_reason MALFORMED_FUNCTION_CALL (it wrote a call it could
300
+ # not emit), or an empty STOP after reading tool results. The round
301
+ # then came back empty, the turn ended as "empty_response", and
302
+ # `aria-code -p` exited 1 a few seconds in: three of nine eval tasks
303
+ # on the first Vertex runs, different ones each time. The same
304
+ # request usually succeeds when sent again, so it is, up to twice,
305
+ # and if it is still empty the finish reason goes into the error.
278
306
  full_response = ""
279
307
  usage = {}
280
308
  tool_calls = []
281
-
282
- async for chunk in response_stream:
283
- if cancel_event and cancel_event.is_set():
284
- yield LLMDone(response=full_response, provider="vertexai", success=True, cancelled=True)
285
- return
286
-
287
- if chunk.text:
288
- full_response += chunk.text
289
- yield LLMToken(text=chunk.text)
290
-
291
- if chunk.function_calls:
292
- for fc in chunk.function_calls:
293
- args = {k: v for k, v in fc.args.items()} if fc.args else {}
294
- yield LLMToolCall(tool=fc.name, params=args)
295
- tool_calls.append({"tool": fc.name, "params": args})
296
-
297
- if chunk.usage_metadata:
298
- usage = {
299
- "prompt_tokens": chunk.usage_metadata.prompt_token_count,
300
- "completion_tokens": chunk.usage_metadata.candidates_token_count,
301
- }
302
-
309
+ finish_reasons: list = []
310
+ for attempt in range(1 + _EMPTY_ROUND_RETRIES):
311
+ response_stream = await client.aio.models.generate_content_stream(
312
+ model=self.model,
313
+ contents=contents,
314
+ config=config,
315
+ )
316
+ async for chunk in response_stream:
317
+ if cancel_event and cancel_event.is_set():
318
+ yield LLMDone(response=full_response, provider="vertexai", success=True, cancelled=True)
319
+ return
320
+
321
+ text = _chunk_text(chunk)
322
+ if text:
323
+ full_response += text
324
+ yield LLMToken(text=text)
325
+
326
+ if chunk.function_calls:
327
+ for fc in chunk.function_calls:
328
+ args = {k: v for k, v in fc.args.items()} if fc.args else {}
329
+ yield LLMToolCall(tool=fc.name, params=args)
330
+ tool_calls.append({"tool": fc.name, "params": args})
331
+
332
+ for candidate in (getattr(chunk, "candidates", None) or []):
333
+ reason = getattr(candidate, "finish_reason", None)
334
+ if reason:
335
+ finish_reasons.append(str(getattr(reason, "name", reason)))
336
+
337
+ if chunk.usage_metadata:
338
+ usage = {
339
+ "prompt_tokens": chunk.usage_metadata.prompt_token_count,
340
+ "completion_tokens": chunk.usage_metadata.candidates_token_count,
341
+ }
342
+ if full_response.strip() or tool_calls:
343
+ break
344
+ logger.info("Vertex returned an empty round (finish_reason %s), attempt %d",
345
+ finish_reasons[-1:] or "none", attempt + 1)
346
+ if attempt < _EMPTY_ROUND_RETRIES:
347
+ finish_reasons = []
348
+
349
+ if not full_response.strip() and not tool_calls:
350
+ reason = finish_reasons[-1] if finish_reasons else "none"
351
+ yield LLMDone(
352
+ response="", provider="vertexai", success=False,
353
+ error=f"empty_response (Vertex finish_reason {reason} after "
354
+ f"{1 + _EMPTY_ROUND_RETRIES} attempts)",
355
+ )
356
+ return
357
+
303
358
  yield LLMDone(
304
359
  response=full_response,
305
360
  tool_calls_pending=tool_calls,
@@ -308,7 +363,7 @@ class VertexAIProvider(LLMProvider):
308
363
  success=True,
309
364
  cancelled=False,
310
365
  )
311
-
366
+
312
367
  except APIError as e:
313
368
  yield LLMDone(response="", provider="vertexai", success=False, error=f"Vertex AI API Error: {e.message}")
314
369
  except Exception as e:
@@ -55,6 +55,7 @@ from __future__ import annotations
55
55
 
56
56
  import importlib.util
57
57
  import json
58
+ import re
58
59
  import os
59
60
  import shlex
60
61
  import shutil
@@ -155,6 +156,26 @@ class TaskSpec:
155
156
  )
156
157
 
157
158
 
159
+ _SECRET = re.compile(
160
+ r"(?i)\b(api[_-]?key|token|password|secret)(\s*[=:]\s*)\S+"
161
+ r"|\b(?:bearer)\s+\S+"
162
+ r"|\b(?:sk|pk|rk)-[A-Za-z0-9_-]{8,}|\bgh[pousr]_[A-Za-z0-9]{12,}|\bAIza[0-9A-Za-z_-]{20,}"
163
+ r"|\bya29\.[0-9A-Za-z_-]+"
164
+ )
165
+
166
+
167
+ def _mask(line: str) -> str:
168
+ def repl(match: re.Match) -> str:
169
+ return f"{match.group(1)}{match.group(2)}***" if match.group(1) else "***"
170
+ return _SECRET.sub(repl, line)
171
+
172
+
173
+ def _log_tail(log: str, lines: int = 23) -> list:
174
+ """The last lines of a task's log, secret-shaped values masked."""
175
+ kept = [line.rstrip() for line in str(log or "").splitlines() if line.strip()]
176
+ return [_mask(line)[:300] for line in kept[-lines:]]
177
+
178
+
158
179
  @dataclass(frozen=True)
159
180
  class TaskResult:
160
181
  task_id: str
@@ -185,6 +206,9 @@ class TaskResult:
185
206
  "detail": self.detail,
186
207
  "tags": list(self.tags),
187
208
  "changed": list(self.changed),
209
+ # Why it did not pass. The first CI run's report said only "the
210
+ # agent did not complete (exit 1)"; the reason was in the job log.
211
+ "log_tail": _log_tail(self.log) if self.outcome != PASS else [],
188
212
  }
189
213
 
190
214
 
@@ -579,9 +603,21 @@ def run_task(
579
603
  detail = f"`{task.verify}` exited {after_code}"
580
604
  if not changed:
581
605
  detail += " — the agent changed nothing"
606
+ # The check's output says what is wrong; the agent's last words say
607
+ # what it thought it did. inventory-reorder failed twice on "reorder.json
608
+ # was not written" with nothing to show whether the agent computed the
609
+ # policy and only reported it, or never got that far.
610
+ agent_said = "\n".join(
611
+ part for part in (str(getattr(outcome, "stdout", "") or ""), str(getattr(outcome, "stderr", "") or ""))
612
+ if part.strip()
613
+ )
614
+ agent_tail = "\n".join([line for line in agent_said.splitlines() if line.strip()][-8:])
615
+ log = _trim(after_log)
616
+ if agent_tail:
617
+ log = f"{log}\n--- agent, last lines ---\n{agent_tail}"
582
618
  return _result(
583
619
  FAIL, exit_code=after_code, detail=detail,
584
- log=_trim(after_log), changed=changed,
620
+ log=log, changed=changed,
585
621
  )
586
622
  finally:
587
623
  if not keep_workspace and scratch_root is None:
@@ -0,0 +1,75 @@
1
+ """Turn eval reports into a Markdown scoreboard, and decide whether the run is healthy.
2
+
3
+ python3 -m aria_code.evals.summary evals-core.json evals-operations.json
4
+
5
+ The suites ran in CI only with ``--check``: every fixture still starts red,
6
+ but no model ever attempted them, so nothing measured whether Aria can fix
7
+ code. The weekly workflow (.github/workflows/evals.yml) runs them with a real
8
+ model and writes this summary.
9
+
10
+ A task the model gets wrong is a result, not a broken build: the exit code is
11
+ 1 only when a task could not run (ERROR) or no longer measures anything
12
+ (INVALID), the two outcomes that mean the harness, not the model, needs work.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import json
18
+ import sys
19
+ from pathlib import Path
20
+
21
+
22
+ def summarise(reports: list[dict], model: str = "") -> tuple[str, int]:
23
+ """Markdown for the reports, and the exit code the run should have."""
24
+ lines = [f"## Aria eval scoreboard{f' · {model}' if model else ''}", ""]
25
+ unhealthy = 0
26
+ for report in reports:
27
+ suite = report.get("suite", "?")
28
+ lines.append(f"### {suite}: {report.get('passed', 0)}/{report.get('scored', 0)} "
29
+ f"({report.get('pass_rate', 0):.0%})")
30
+ extras = [f"{report[k]} {k}" for k in ("errored", "invalid") if report.get(k)]
31
+ if extras:
32
+ lines.append(f"Not scored: {', '.join(extras)}.")
33
+ unhealthy += int(report.get("errored", 0)) + int(report.get("invalid", 0))
34
+ lines += ["", "| Task | Outcome | Seconds | Detail |", "|---|---|---:|---|"]
35
+ for result in report.get("results", []):
36
+ detail = str(result.get("detail") or "").replace("|", "\\|")[:120]
37
+ lines.append(f"| {result.get('task_id')} | {result.get('outcome')} | "
38
+ f"{result.get('seconds', 0):.0f} | {detail} |")
39
+ for result in report.get("results", []):
40
+ tail = result.get("log_tail") or []
41
+ if tail and str(result.get("outcome", "")).lower() != "pass":
42
+ body = "\n".join(tail).replace("```", "` ` `")
43
+ lines += ["", f"<details><summary>{result.get('task_id')}: last lines of the log</summary>",
44
+ "", "```", body, "```", "</details>"]
45
+ by_tag = report.get("by_tag") or {}
46
+ if by_tag:
47
+ tags = ", ".join(f"{tag} {s['passed']}/{s['scored']}" for tag, s in by_tag.items() if s.get("scored"))
48
+ if tags:
49
+ lines += ["", f"By tag: {tags}"]
50
+ lines.append("")
51
+ return "\n".join(lines), (1 if unhealthy else 0)
52
+
53
+
54
+ def main(argv: list[str] | None = None) -> int:
55
+ args = list(sys.argv[1:] if argv is None else argv)
56
+ model = ""
57
+ if args[:1] == ["--model"] and len(args) > 1:
58
+ model, args = args[1], args[2:]
59
+ reports = []
60
+ for name in args:
61
+ path = Path(name)
62
+ if path.exists():
63
+ reports.append(json.loads(path.read_text(encoding="utf-8")))
64
+ else:
65
+ print(f"(no report at {name})", file=sys.stderr)
66
+ if not reports:
67
+ print("no eval reports to summarise", file=sys.stderr)
68
+ return 1
69
+ text, code = summarise(reports, model)
70
+ print(text)
71
+ return code
72
+
73
+
74
+ if __name__ == "__main__":
75
+ raise SystemExit(main())
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.100.0
3
+ Version: 0.101.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
@@ -336,6 +336,7 @@ src/aria_code/domain/strategy_vault.py
336
336
  src/aria_code/evals/__init__.py
337
337
  src/aria_code/evals/harness.py
338
338
  src/aria_code/evals/runner.py
339
+ src/aria_code/evals/summary.py
339
340
  src/aria_code/packages/__init__.py
340
341
  src/aria_code/packages/adk_bridge/__init__.py
341
342
  src/aria_code/packages/adk_bridge/code_review_tools.py
@@ -583,6 +584,7 @@ tests/test_engine_boundary.py
583
584
  tests/test_english_output_group.py
584
585
  tests/test_enterprise_tool_honesty.py
585
586
  tests/test_env_switch_docs.py
587
+ tests/test_eval_summary.py
586
588
  tests/test_evals_harness.py
587
589
  tests/test_event_import_roots.py
588
590
  tests/test_exec_events.py
@@ -690,6 +692,7 @@ tests/test_release_verification_waits.py
690
692
  tests/test_release_workflow_permissions.py
691
693
  tests/test_report_charts.py
692
694
  tests/test_report_generator.py
695
+ tests/test_report_prompt_language.py
693
696
  tests/test_research_protocol.py
694
697
  tests/test_research_quality.py
695
698
  tests/test_responsive_rendering.py
@@ -758,6 +761,7 @@ tests/test_verification_hint.py
758
761
  tests/test_verification_policy.py
759
762
  tests/test_version_consistency.py
760
763
  tests/test_version_counter.py
764
+ tests/test_vertex_empty_rounds.py
761
765
  tests/test_video_analysis.py
762
766
  tests/test_video_editor.py
763
767
  tests/test_vscode_mcp.py
@@ -0,0 +1,75 @@
1
+ """The weekly eval scoreboard, and when a run counts as broken.
2
+
3
+ A task the model gets wrong is a measurement; the run is unhealthy only when a
4
+ task could not run (ERROR) or no longer measures anything (INVALID).
5
+ """
6
+
7
+ from __future__ import annotations
8
+
9
+ import json
10
+
11
+ import yaml
12
+
13
+ from aria_code.evals.summary import main, summarise
14
+
15
+ REPORT = {
16
+ "suite": "core", "pass_rate": 0.6667, "passed": 2, "failed": 1, "invalid": 0, "errored": 0, "scored": 3,
17
+ "by_tag": {"python": {"passed": 2, "scored": 3, "pass_rate": 0.6667}},
18
+ "results": [
19
+ {"task_id": "fix-failing-test", "outcome": "PASS", "seconds": 81.2, "detail": ""},
20
+ {"task_id": "off-by-one", "outcome": "PASS", "seconds": 64.0, "detail": ""},
21
+ {"task_id": "reconcile-waybills", "outcome": "FAIL", "seconds": 140.5, "detail": "edited a | protected file"},
22
+ ],
23
+ }
24
+
25
+
26
+ def test_a_wrong_answer_is_a_result_not_a_broken_run():
27
+ text, code = summarise([REPORT], "google/gemini-2.5-flash")
28
+ assert code == 0
29
+ assert "## Aria eval scoreboard · google/gemini-2.5-flash" in text
30
+ assert "### core: 2/3 (67%)" in text
31
+ assert "| reconcile-waybills | FAIL | 140 | edited a \\| protected file |" in text
32
+ assert "By tag: python 2/3" in text
33
+
34
+
35
+ def test_errored_or_invalid_tasks_fail_the_run():
36
+ for key in ("errored", "invalid"):
37
+ text, code = summarise([dict(REPORT, **{key: 1})])
38
+ assert code == 1 and f"Not scored: 1 {key}." in text
39
+
40
+
41
+ def test_the_cli_reads_report_files(tmp_path, capsys):
42
+ path = tmp_path / "evals-core.json"
43
+ path.write_text(json.dumps(REPORT))
44
+ assert main(["--model", "m", str(path), str(tmp_path / "missing.json")]) == 0
45
+ assert "### core: 2/3" in capsys.readouterr().out
46
+ assert main([str(tmp_path / "missing.json")]) == 1
47
+
48
+
49
+ def test_the_workflow_signs_in_without_a_key():
50
+ workflow = yaml.safe_load(open(".github/workflows/evals.yml"))
51
+ job = workflow["jobs"]["evals"]
52
+ assert workflow["permissions"]["id-token"] == "write"
53
+ uses = [step.get("uses", "") for step in job["steps"]]
54
+ assert any(u.startswith("google-github-actions/auth@") for u in uses)
55
+ assert "GEMINI_API_KEY" not in open(".github/workflows/evals.yml").read()
56
+ assert job["env"]["GOOGLE_GENAI_USE_VERTEXAI"] == "true"
57
+
58
+
59
+ def test_the_reason_a_task_did_not_pass_reaches_the_summary():
60
+ """The first CI run said only "the agent did not complete (exit 1)"; the reason was in the job log."""
61
+ from aria_code.evals.harness import ERROR, PASS, TaskResult
62
+
63
+ errored = TaskResult(task_id="stripe-refund-validation", outcome=ERROR, exit_code=1,
64
+ detail="the agent did not complete (exit 1); check still red",
65
+ log="starting\nAuthorization: Bearer abc.def\nVertex 400: INVALID_ARGUMENT")
66
+ passed = TaskResult(task_id="off-by-one", outcome=PASS, log="12 passed")
67
+ assert errored.to_dict()["log_tail"] == ["starting", "Authorization: ***", "Vertex 400: INVALID_ARGUMENT"]
68
+ assert passed.to_dict()["log_tail"] == []
69
+
70
+ report = dict(REPORT, results=[errored.to_dict(), passed.to_dict()], errored=1)
71
+ text, code = summarise([report])
72
+ assert code == 1
73
+ assert "<details><summary>stripe-refund-validation: last lines of the log</summary>" in text
74
+ assert "Vertex 400: INVALID_ARGUMENT" in text and "abc.def" not in text
75
+ assert "off-by-one: last lines" not in text
@@ -618,3 +618,28 @@ class RunResidueTests(HarnessBase):
618
618
  (workspace / "fixed.txt").write_text("x", encoding="utf-8")
619
619
 
620
620
  self.assertEqual(self._run(self._task(), solver).changed, ("fixed.txt",))
621
+
622
+
623
+ class AgentTailTests(HarnessBase):
624
+ """A failed task's log ends with what the agent said, not only the check's output.
625
+
626
+ inventory-reorder failed twice on "reorder.json was not written", with
627
+ nothing showing whether the agent computed the policy and only reported it.
628
+ """
629
+
630
+ def test_a_failed_task_keeps_the_agents_last_lines(self):
631
+ from types import SimpleNamespace
632
+
633
+ _fixture(self.fixtures, "broken", {"check.py": _GUARD})
634
+ said = SimpleNamespace(returncode=0, stdout="Computed reorder points for 6 SKUs.\nA100: order 335",
635
+ stderr="")
636
+ result = self._run(self._task(), lambda p, w: said)
637
+ self.assertEqual(result.outcome, FAIL)
638
+ self.assertIn("--- agent, last lines ---", result.log)
639
+ self.assertIn("A100: order 335", result.log)
640
+ self.assertIn("A100: order 335", result.to_dict()["log_tail"][-1])
641
+
642
+ def test_a_silent_agent_adds_nothing(self):
643
+ _fixture(self.fixtures, "broken", {"check.py": _GUARD})
644
+ result = self._run(self._task(), lambda p, w: None)
645
+ self.assertNotIn("--- agent", result.log)
@@ -385,7 +385,8 @@ def test_report_markdown_prompt_omits_na_placeholders(monkeypatch, tmp_path):
385
385
 
386
386
  class FakeTerminal:
387
387
  conversation = [{"role": "assistant", "content": "# Report\nok"}]
388
- config = {}
388
+ # The report prompt follows ui_lang; this test checks the Chinese labels.
389
+ config = {"ui_lang": "zh"}
389
390
 
390
391
  async def send_message(self, prompt):
391
392
  prompts.append(prompt)
@@ -0,0 +1,43 @@
1
+ """/report asks for the report in the session's language.
2
+
3
+ The prompt was Chinese only and ended "用中文输出", so an English session got a
4
+ Chinese report; with the model unavailable, the Chinese prompt matched the
5
+ chart-analysis route and a Chinese chart summary was saved as the report.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import re
11
+ from datetime import datetime
12
+
13
+ from aria_code.apps.cli.commands.report import build_markdown_report_prompt
14
+
15
+ CJK = re.compile(r"[一-鿿]")
16
+ DATA = {"price": 529.3, "change_pct": 0.4, "rsi": 76.3, "macd": 9.51, "ma20": 504.7, "ma60": 493.4}
17
+ QUALITY = {"status": "complete", "stale": False, "providers": ["yfinance"]}
18
+
19
+
20
+ def _prompt(lang, **extra):
21
+ return build_markdown_report_prompt(symbol="MSFT", report_type="standard", market_data=DATA,
22
+ data_quality=QUALITY, now=datetime(2026, 10, 7), lang=lang, **extra)
23
+
24
+
25
+ def test_english_prompt():
26
+ text = _prompt("en")
27
+ assert not CJK.findall(text), CJK.findall(text)
28
+ assert "# MSFT Research Report" in text and "**Date**: 2026-10-07" in text
29
+ assert "Price" in text and "529.3" in text
30
+ assert "use only the fields below" in text and "Write in English." in text
31
+ assert "- Provider chain: yfinance" in text
32
+
33
+
34
+ def test_missing_data_is_named_in_english():
35
+ text = build_markdown_report_prompt(symbol="MSFT", report_type="brief", market_data={},
36
+ data_quality={}, now=datetime(2026, 10, 7), lang="en")
37
+ assert "must not invent prices or indicators" in text and "brief edition" in text
38
+
39
+
40
+ def test_chinese_is_unchanged_by_default():
41
+ text = build_markdown_report_prompt(symbol="MSFT", report_type="standard", market_data=DATA,
42
+ data_quality=QUALITY, now=datetime(2026, 10, 7))
43
+ assert text.startswith("为 MSFT 生成一份专业 Markdown 投研报告") and text.endswith("用中文输出。")