aria-code 0.82.0__tar.gz → 0.84.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 (744) hide show
  1. {aria_code-0.82.0/src/aria_code.egg-info → aria_code-0.84.0}/PKG-INFO +1 -1
  2. {aria_code-0.82.0 → aria_code-0.84.0}/pyproject.toml +1 -1
  3. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/_version.py +1 -1
  4. aria_code-0.84.0/src/aria_code/apps/cli/commands/catalog.py +160 -0
  5. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/core_cmds.py +109 -2
  6. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/prompts/coding.py +6 -0
  7. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/prompts/system_prompts.py +3 -0
  8. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/runtime_consumer.py +46 -4
  9. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tool_executor.py +9 -3
  10. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tools/system_tools.py +37 -14
  11. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/aria_cli.py +5 -2
  12. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/gateway.py +3 -1
  13. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/completer.py +40 -15
  14. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/console.py +6 -2
  15. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/input_box.py +24 -7
  16. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/picker.py +41 -16
  17. {aria_code-0.82.0 → aria_code-0.84.0/src/aria_code.egg-info}/PKG-INFO +1 -1
  18. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code.egg-info/SOURCES.txt +2 -0
  19. aria_code-0.84.0/tests/test_slash_popup.py +162 -0
  20. aria_code-0.84.0/tests/test_tool_step_output.py +147 -0
  21. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ui_console_theme.py +7 -2
  22. aria_code-0.82.0/src/aria_code/apps/cli/commands/catalog.py +0 -87
  23. {aria_code-0.82.0 → aria_code-0.84.0}/LICENSE +0 -0
  24. {aria_code-0.82.0 → aria_code-0.84.0}/NOTICE +0 -0
  25. {aria_code-0.82.0 → aria_code-0.84.0}/README.md +0 -0
  26. {aria_code-0.82.0 → aria_code-0.84.0}/setup.cfg +0 -0
  27. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/__init__.py +0 -0
  28. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/adk_apps/__init__.py +0 -0
  29. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
  30. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
  31. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
  32. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
  33. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/__init__.py +0 -0
  34. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/base.py +0 -0
  35. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/code_review.py +0 -0
  36. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/__init__.py +0 -0
  37. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
  38. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/critic.py +0 -0
  39. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/deepen.py +0 -0
  40. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/models.py +0 -0
  41. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/pipeline.py +0 -0
  42. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
  43. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/themes.py +0 -0
  44. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/deep/tiers.py +0 -0
  45. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/engineering/__init__.py +0 -0
  46. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/engineering/coder.py +0 -0
  47. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/engineering/tester.py +0 -0
  48. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/__init__.py +0 -0
  49. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
  50. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/catalyst.py +0 -0
  51. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
  52. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/debate.py +0 -0
  53. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/earnings.py +0 -0
  54. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/fundamental.py +0 -0
  55. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/macro.py +0 -0
  56. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/news.py +0 -0
  57. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/risk.py +0 -0
  58. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/sector.py +0 -0
  59. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/strategist.py +0 -0
  60. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
  61. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/synthesis.py +0 -0
  62. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/financial/technical.py +0 -0
  63. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/orchestrator.py +0 -0
  64. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/portfolio_agent.py +0 -0
  65. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/__init__.py +0 -0
  66. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
  67. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/business_match.py +0 -0
  68. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
  69. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
  70. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
  71. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
  72. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
  73. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
  74. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
  75. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/registry.py +0 -0
  76. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/signal_scheme.py +0 -0
  77. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/sports/__init__.py +0 -0
  78. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/sports/football_agent.py +0 -0
  79. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/supervisor.py +0 -0
  80. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/team.py +0 -0
  81. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
  82. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
  83. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
  84. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
  85. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
  86. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
  87. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
  88. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
  89. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
  90. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
  91. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
  92. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/aliyun_data_client.py +0 -0
  93. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/README.md +0 -0
  94. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/__init__.py +0 -0
  95. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/channels/README.md +0 -0
  96. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/channels/__init__.py +0 -0
  97. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/channels/approvals.py +0 -0
  98. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/channels/conversation.py +0 -0
  99. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/channels/digest.py +0 -0
  100. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/channels/intake.py +0 -0
  101. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/channels/registry.py +0 -0
  102. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/channels/tradingview.py +0 -0
  103. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/README.md +0 -0
  104. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/__init__.py +0 -0
  105. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/_optional.py +0 -0
  106. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
  107. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/broker_render.py +0 -0
  108. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
  109. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
  110. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
  111. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
  112. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
  113. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
  114. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
  115. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
  116. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
  117. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
  118. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
  119. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
  120. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
  121. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
  122. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
  123. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
  124. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
  125. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/market.py +0 -0
  126. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
  127. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
  128. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
  129. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
  130. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
  131. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
  132. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
  133. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +0 -0
  134. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/report.py +0 -0
  135. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
  136. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
  137. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
  138. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/team.py +0 -0
  139. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
  140. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
  141. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
  142. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
  143. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
  144. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/config_paths.py +0 -0
  145. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/config_store.py +0 -0
  146. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/constants.py +0 -0
  147. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/context.py +0 -0
  148. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/deterministic.py +0 -0
  149. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/direct.py +0 -0
  150. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
  151. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/football_reports.py +0 -0
  152. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
  153. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/google_login.py +0 -0
  154. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
  155. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
  156. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
  157. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
  158. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
  159. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
  160. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
  161. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/helpers.py +0 -0
  162. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/hooks.py +0 -0
  163. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/i18n.py +0 -0
  164. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/intent.py +0 -0
  165. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/intent_router.py +0 -0
  166. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
  167. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
  168. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
  169. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/main.py +0 -0
  170. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/market_hours.py +0 -0
  171. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
  172. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/market_universe.py +0 -0
  173. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/message_processing.py +0 -0
  174. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
  175. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
  176. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
  177. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
  178. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
  179. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/preflight.py +0 -0
  180. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/project_aria.py +0 -0
  181. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
  182. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
  183. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
  184. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
  185. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
  186. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
  187. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
  188. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/base.py +0 -0
  189. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
  190. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
  191. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
  192. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
  193. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
  194. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
  195. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
  196. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +0 -0
  197. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
  198. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/review_runner.py +0 -0
  199. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/sandbox.py +0 -0
  200. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/session_export.py +0 -0
  201. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
  202. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/session_store.py +0 -0
  203. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
  204. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
  205. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
  206. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
  207. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
  208. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tools/context.py +0 -0
  209. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
  210. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
  211. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
  212. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
  213. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
  214. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
  215. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/update_check.py +0 -0
  216. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/updater.py +0 -0
  217. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
  218. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
  219. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/daemon/README.md +0 -0
  220. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/vscode/README.md +0 -0
  221. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/apps/vscode/package.json +0 -0
  222. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/aria_daemon.py +0 -0
  223. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/aria_feishu_bot.py +0 -0
  224. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/aria_mcp_server.py +0 -0
  225. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/aria_relay_client.py +0 -0
  226. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/aria_relay_server.py +0 -0
  227. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/aria_telegram_bot.py +0 -0
  228. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ariarc.py +0 -0
  229. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/artifacts.py +0 -0
  230. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/backtest_engine.py +0 -0
  231. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/backtest_report.py +0 -0
  232. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/__init__.py +0 -0
  233. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/automation.py +0 -0
  234. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/base.py +0 -0
  235. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/capabilities.py +0 -0
  236. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/cn/__init__.py +0 -0
  237. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
  238. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
  239. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
  240. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
  241. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
  242. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/config.py +0 -0
  243. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/intl/__init__.py +0 -0
  244. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
  245. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
  246. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
  247. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
  248. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/paper_broker.py +0 -0
  249. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/planning.py +0 -0
  250. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/registry.py +0 -0
  251. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/brokers/trading.py +0 -0
  252. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/canva_client.py +0 -0
  253. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/change_store.py +0 -0
  254. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/__init__.py +0 -0
  255. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
  256. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/aria_relay_client.py +0 -0
  257. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/canva_client.py +0 -0
  258. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/figma_client.py +0 -0
  259. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/football_data_client.py +0 -0
  260. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/kling_video_client.py +0 -0
  261. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/market_data_client.py +0 -0
  262. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/openai_image_client.py +0 -0
  263. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/runway_video_client.py +0 -0
  264. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
  265. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/cloud_memory.py +0 -0
  266. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/command_safety.py +0 -0
  267. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/computer_use_tools.py +0 -0
  268. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/dashboard_generator.py +0 -0
  269. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/data_analysis_tools.py +0 -0
  270. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/data_cleaner.py +0 -0
  271. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/data_service.py +0 -0
  272. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/__init__.py +0 -0
  273. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/base.py +0 -0
  274. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/router.py +0 -0
  275. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/__init__.py +0 -0
  276. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
  277. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
  278. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
  279. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
  280. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
  281. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
  282. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
  283. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
  284. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
  285. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/demo_player.py +0 -0
  286. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/doctor.py +0 -0
  287. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/domain/__init__.py +0 -0
  288. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/domain/backtest_engine.py +0 -0
  289. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/domain/backtest_report.py +0 -0
  290. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/domain/finance_formulas.py +0 -0
  291. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
  292. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/domain/strategy_vault.py +0 -0
  293. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/evals/__init__.py +0 -0
  294. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/evals/harness.py +0 -0
  295. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/evals/runner.py +0 -0
  296. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/external_agent_runner.py +0 -0
  297. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/figma_client.py +0 -0
  298. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/file_analysis_tools.py +0 -0
  299. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/finance_formulas.py +0 -0
  300. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/football_data_client.py +0 -0
  301. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/image_gen_tools.py +0 -0
  302. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/intent_classifier.py +0 -0
  303. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/kling_video_client.py +0 -0
  304. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/licensing.py +0 -0
  305. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/local_finance_tools.py +0 -0
  306. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/local_image_provider.py +0 -0
  307. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/local_llm_provider.py +0 -0
  308. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/macro_tools.py +0 -0
  309. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/markdown_pdf.py +0 -0
  310. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/market_data_client.py +0 -0
  311. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/mcp_client.py +0 -0
  312. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/memory_manager.py +0 -0
  313. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/model_capability.py +0 -0
  314. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/notification_tools.py +0 -0
  315. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/openai_image_client.py +0 -0
  316. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/__init__.py +0 -0
  317. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
  318. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
  319. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
  320. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
  321. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
  322. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
  323. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
  324. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_core/export.py +0 -0
  325. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
  326. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_core/paths.py +0 -0
  327. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
  328. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
  329. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
  330. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
  331. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_infra/product.py +0 -0
  332. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
  333. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
  334. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
  335. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
  336. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
  337. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
  338. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
  339. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
  340. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
  341. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
  342. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
  343. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
  344. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
  345. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/cache.py +0 -0
  346. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/context.py +0 -0
  347. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
  348. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/data.py +0 -0
  349. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
  350. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/references.py +0 -0
  351. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/registry.py +0 -0
  352. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
  353. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
  354. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/settings.py +0 -0
  355. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_services/usage.py +0 -0
  356. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
  357. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
  358. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
  359. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
  360. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
  361. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
  362. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
  363. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
  364. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
  365. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
  366. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
  367. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
  368. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
  369. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
  370. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
  371. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
  372. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
  373. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
  374. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
  375. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
  376. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
  377. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
  378. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
  379. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
  380. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
  381. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
  382. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
  383. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
  384. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
  385. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
  386. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
  387. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
  388. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
  389. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
  390. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
  391. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packs/__init__.py +0 -0
  392. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packs/base.py +0 -0
  393. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packs/finance/__init__.py +0 -0
  394. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packs/logistics/__init__.py +0 -0
  395. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packs/payments/__init__.py +0 -0
  396. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packs/realty/__init__.py +0 -0
  397. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packs/registry.py +0 -0
  398. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/packs/rules.py +0 -0
  399. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/plan_utils.py +0 -0
  400. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/plugin_loader.py +0 -0
  401. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/portfolio_ledger.py +0 -0
  402. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/preview_server.py +0 -0
  403. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/privacy/__init__.py +0 -0
  404. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/privacy/feedback.py +0 -0
  405. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/project_review.py +0 -0
  406. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/project_review_api.py +0 -0
  407. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/project_review_server.py +0 -0
  408. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/project_tools.py +0 -0
  409. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/__init__.py +0 -0
  410. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/llm/__init__.py +0 -0
  411. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/llm/anthropic.py +0 -0
  412. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
  413. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/llm/base.py +0 -0
  414. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/llm/custom.py +0 -0
  415. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/llm/ollama.py +0 -0
  416. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
  417. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/llm/registry.py +0 -0
  418. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/local_image_provider.py +0 -0
  419. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/local_llm_provider.py +0 -0
  420. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/providers/tool_messages.py +0 -0
  421. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/realty_data_tools.py +0 -0
  422. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/relay_store.py +0 -0
  423. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/report_exporters.py +0 -0
  424. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/report_generator.py +0 -0
  425. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/review_service.py +0 -0
  426. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/__init__.py +0 -0
  427. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/acceptance.py +0 -0
  428. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/agent_loop.py +0 -0
  429. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/approval.py +0 -0
  430. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/budget.py +0 -0
  431. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/checkpoints.py +0 -0
  432. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/crash_report.py +0 -0
  433. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/events.py +0 -0
  434. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/lsp.py +0 -0
  435. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/orchestrator.py +0 -0
  436. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/repo_map.py +0 -0
  437. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/run_state.py +0 -0
  438. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/run_store.py +0 -0
  439. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/self_healing.py +0 -0
  440. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/subagent.py +0 -0
  441. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/task_ledger.py +0 -0
  442. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
  443. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/tool_executor.py +0 -0
  444. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/tool_policy.py +0 -0
  445. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runtime/worktrees.py +0 -0
  446. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/runway_video_client.py +0 -0
  447. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/safety/__init__.py +0 -0
  448. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/safety/permissions.py +0 -0
  449. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/safety/service.py +0 -0
  450. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/setup_wizard.py +0 -0
  451. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/spreadsheet_tools.py +0 -0
  452. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/strategy_vault.py +0 -0
  453. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/__init__.py +0 -0
  454. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/artifact_tools.py +0 -0
  455. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/broker_tools.py +0 -0
  456. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/build_quant_engine.py +0 -0
  457. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/code_audit_tools.py +0 -0
  458. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/computer_use_tools.py +0 -0
  459. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
  460. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
  461. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/extended_tools.py +0 -0
  462. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
  463. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/image_gen_tools.py +0 -0
  464. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/local_finance_tools.py +0 -0
  465. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/logistics_carriers.py +0 -0
  466. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/logistics_inventory.py +0 -0
  467. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/logistics_io.py +0 -0
  468. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
  469. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/logistics_tools.py +0 -0
  470. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/macro_tools.py +0 -0
  471. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/notification_tools.py +0 -0
  472. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/project_tools.py +0 -0
  473. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/realty_data_tools.py +0 -0
  474. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
  475. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/tools/stripe_tools.py +0 -0
  476. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/__init__.py +0 -0
  477. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/banner.py +0 -0
  478. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/image_render.py +0 -0
  479. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/render/__init__.py +0 -0
  480. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/render/finance.py +0 -0
  481. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/render/market.py +0 -0
  482. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/render/output.py +0 -0
  483. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/render/responsive.py +0 -0
  484. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/render/team.py +0 -0
  485. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/robot.py +0 -0
  486. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/ui/startup_dashboard.py +0 -0
  487. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/utils/vscode_uri.py +0 -0
  488. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/video_analysis.py +0 -0
  489. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/video_editor.py +0 -0
  490. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/workspace/__init__.py +0 -0
  491. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/workspace/files.py +0 -0
  492. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/workspace/verify.py +0 -0
  493. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/workspace_changes.py +0 -0
  494. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/workspace_context.py +0 -0
  495. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/workspace_service.py +0 -0
  496. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code/workspace_tools.py +0 -0
  497. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
  498. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code.egg-info/entry_points.txt +0 -0
  499. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code.egg-info/requires.txt +0 -0
  500. {aria_code-0.82.0 → aria_code-0.84.0}/src/aria_code.egg-info/top_level.txt +0 -0
  501. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_adk_market_tools.py +0 -0
  502. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_agent_team_fallback.py +0 -0
  503. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_analyze_file_tool.py +0 -0
  504. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_architecture_ledger_is_true.py +0 -0
  505. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_architecture_report.py +0 -0
  506. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_aria_cli_core.py +0 -0
  507. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_aria_mcp_server.py +0 -0
  508. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_aria_sdk.py +0 -0
  509. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_artifact_publishing.py +0 -0
  510. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_artifacts_and_reports.py +0 -0
  511. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ashare_prediction_cmds.py +0 -0
  512. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_backtest_cmds.py +0 -0
  513. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_backtest_engine.py +0 -0
  514. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_backtest_report.py +0 -0
  515. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
  516. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_broken_akshare_is_optional.py +0 -0
  517. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_broker_automation.py +0 -0
  518. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_broker_chat_confirm_gate.py +0 -0
  519. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_broker_planning.py +0 -0
  520. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_broker_safety.py +0 -0
  521. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_broker_tools.py +0 -0
  522. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_budget.py +0 -0
  523. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_business_workflow_cmds.py +0 -0
  524. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_canva_client.py +0 -0
  525. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_canvas_cmds.py +0 -0
  526. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_card_approvals.py +0 -0
  527. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_channel_intake.py +0 -0
  528. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_channels.py +0 -0
  529. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_chart_handlers.py +0 -0
  530. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_chat_bots_fail_closed.py +0 -0
  531. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_chat_routing.py +0 -0
  532. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ci_security_workflow.py +0 -0
  533. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_cli_app_split.py +0 -0
  534. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_cli_bootstrap.py +0 -0
  535. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_cli_config_store.py +0 -0
  536. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_cli_lifecycle_hooks.py +0 -0
  537. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_cli_runtime_consumer.py +0 -0
  538. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_cli_tool_executor_module.py +0 -0
  539. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_cli_updater.py +0 -0
  540. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_cloud_memory.py +0 -0
  541. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_code_audit_tools.py +0 -0
  542. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_code_review_agent.py +0 -0
  543. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_codegen_output.py +0 -0
  544. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_coder_tester_self_healing.py +0 -0
  545. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_coder_tool_safety.py +0 -0
  546. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_collaboration.py +0 -0
  547. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_command_loggers.py +0 -0
  548. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_command_safety.py +0 -0
  549. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_completions_builder.py +0 -0
  550. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_config_paths.py +0 -0
  551. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_configured_provider.py +0 -0
  552. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_container_entrypoint.py +0 -0
  553. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_container_entrypoints.py +0 -0
  554. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_context_checkpoints.py +0 -0
  555. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_context_references.py +0 -0
  556. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_context_service.py +0 -0
  557. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_conversation_core.py +0 -0
  558. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_crash_report.py +0 -0
  559. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_credential_file_permissions.py +0 -0
  560. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_custom_providers.py +0 -0
  561. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_daemon_gateway_config.py +0 -0
  562. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_dashboard_generator.py +0 -0
  563. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_data_service.py +0 -0
  564. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_data_service_imports.py +0 -0
  565. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_datasource_routing.py +0 -0
  566. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_deep_analysis.py +0 -0
  567. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_degrades_without_quant_engine.py +0 -0
  568. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
  569. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_doctor.py +0 -0
  570. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_doctor_describes_the_current_install.py +0 -0
  571. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_doctor_npm_scope.py +0 -0
  572. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_engine_boundary.py +0 -0
  573. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_enterprise_tool_honesty.py +0 -0
  574. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_env_switch_docs.py +0 -0
  575. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_evals_harness.py +0 -0
  576. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_event_import_roots.py +0 -0
  577. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_extended_tools.py +0 -0
  578. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_feishu_swarm_config.py +0 -0
  579. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_finalize_release.py +0 -0
  580. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_finance_renderers.py +0 -0
  581. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_finance_service_catalog.py +0 -0
  582. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_first_run_output.py +0 -0
  583. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_first_run_works.py +0 -0
  584. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_football_agent.py +0 -0
  585. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_football_prediction_output.py +0 -0
  586. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_google_cloud_models.py +0 -0
  587. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_google_cloud_routing.py +0 -0
  588. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_google_login.py +0 -0
  589. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_google_search_provider.py +0 -0
  590. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_headless_is_agentic.py +0 -0
  591. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_honest_surfaces.py +0 -0
  592. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_image_gen_tools.py +0 -0
  593. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_image_inputs.py +0 -0
  594. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_import_graph_budget.py +0 -0
  595. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_intent_router.py +0 -0
  596. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_intent_signals.py +0 -0
  597. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_kling_video_client.py +0 -0
  598. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_lazy_rebind.py +0 -0
  599. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_legacy_module_imports.py +0 -0
  600. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_license_consistency.py +0 -0
  601. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_licensing.py +0 -0
  602. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_local_image_provider.py +0 -0
  603. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_logistics_3pl.py +0 -0
  604. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_logistics_and_finance_agents.py +0 -0
  605. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_lsp.py +0 -0
  606. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_markdown_pdf.py +0 -0
  607. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_market_answers_in_english.py +0 -0
  608. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_market_data_client.py +0 -0
  609. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_market_history_inheritance.py +0 -0
  610. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_market_history_tool.py +0 -0
  611. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_market_hours.py +0 -0
  612. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_market_questions_on_backend.py +0 -0
  613. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_market_symbol_extraction.py +0 -0
  614. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_market_universe.py +0 -0
  615. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_mcp_circuit.py +0 -0
  616. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_mcp_client.py +0 -0
  617. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_model_capability_registry.py +0 -0
  618. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_model_choice_is_the_users.py +0 -0
  619. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_model_selection_state.py +0 -0
  620. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_native_binary_entrypoints.py +0 -0
  621. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_native_installer.py +0 -0
  622. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_new_modules.py +0 -0
  623. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
  624. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_no_uncommitted_imports.py +0 -0
  625. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_numeric_listings.py +0 -0
  626. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ollama_stream_imports.py +0 -0
  627. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ollama_stream_tools.py +0 -0
  628. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_openai_image_client.py +0 -0
  629. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_operations_suite.py +0 -0
  630. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_output_rendering.py +0 -0
  631. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_packages_facade.py +0 -0
  632. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_packaging_constraints.py +0 -0
  633. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_packaging_manifest.py +0 -0
  634. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_packs_domains.py +0 -0
  635. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_pdf_report.py +0 -0
  636. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_pick_best_installed_model.py +0 -0
  637. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_plan_mode.py +0 -0
  638. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_platform_package_assembly.py +0 -0
  639. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_platform_packages.py +0 -0
  640. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_plotly_html_output.py +0 -0
  641. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_portfolio_ledger.py +0 -0
  642. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_post_turn_context_decision.py +0 -0
  643. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_preflight.py +0 -0
  644. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_preview_server.py +0 -0
  645. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_privacy_feedback.py +0 -0
  646. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_project_aria.py +0 -0
  647. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_project_review.py +0 -0
  648. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_project_review_api.py +0 -0
  649. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_prompt_assembly.py +0 -0
  650. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_prompt_selection.py +0 -0
  651. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_provider_autoconfig.py +0 -0
  652. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_provider_error_messages.py +0 -0
  653. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_provider_integration.py +0 -0
  654. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_provider_registry.py +0 -0
  655. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_public_service_status.py +0 -0
  656. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_quant_engine_namespace.py +0 -0
  657. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_rebind_contract.py +0 -0
  658. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_rebind_namespace_contract.py +0 -0
  659. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_relay_client_credentials.py +0 -0
  660. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_relay_event_verification.py +0 -0
  661. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_relay_sends_for_clients.py +0 -0
  662. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_relay_store.py +0 -0
  663. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_relay_url.py +0 -0
  664. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_release_chain.py +0 -0
  665. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_release_commit_identity.py +0 -0
  666. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_release_push_is_atomic.py +0 -0
  667. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_release_reaches_the_registries.py +0 -0
  668. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_release_verification_waits.py +0 -0
  669. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_release_workflow_permissions.py +0 -0
  670. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_report_charts.py +0 -0
  671. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_report_generator.py +0 -0
  672. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_research_protocol.py +0 -0
  673. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_research_quality.py +0 -0
  674. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_responsive_rendering.py +0 -0
  675. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_review_service.py +0 -0
  676. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_root_module_budget.py +0 -0
  677. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_rsi_without_pandas_ta.py +0 -0
  678. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_acceptance.py +0 -0
  679. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_agent_loop.py +0 -0
  680. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_approval.py +0 -0
  681. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_bridge.py +0 -0
  682. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_bridge_fallback.py +0 -0
  683. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_checkpoints.py +0 -0
  684. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_event_identity.py +0 -0
  685. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_gateway.py +0 -0
  686. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_repo_map.py +0 -0
  687. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_run_store.py +0 -0
  688. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_tool_executor.py +0 -0
  689. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runtime_worktrees.py +0 -0
  690. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_runway_video_client.py +0 -0
  691. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_safety_permissions.py +0 -0
  692. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_safety_service.py +0 -0
  693. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_safety_service_adoption.py +0 -0
  694. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_service_diagnostics_security.py +0 -0
  695. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_session_search.py +0 -0
  696. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_settings_service.py +0 -0
  697. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_shipper_digest.py +0 -0
  698. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_single_import_root.py +0 -0
  699. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_skill_agent_binding.py +0 -0
  700. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_skill_catalog.py +0 -0
  701. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_skill_loader.py +0 -0
  702. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_spreadsheet_tools.py +0 -0
  703. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_sse_stream_contract.py +0 -0
  704. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_startup_dashboard.py +0 -0
  705. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_startup_latency.py +0 -0
  706. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_status_language.py +0 -0
  707. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_streaming_pipeline.py +0 -0
  708. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_stripe_agent.py +0 -0
  709. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_subagent.py +0 -0
  710. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_supervisor_routing.py +0 -0
  711. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_system_prompts.py +0 -0
  712. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_system_tools_output.py +0 -0
  713. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_task_orchestrator.py +0 -0
  714. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_team_synthesis.py +0 -0
  715. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_tls_trust_store.py +0 -0
  716. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_tool_policy.py +0 -0
  717. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
  718. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_tool_scope.py +0 -0
  719. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_trading_service.py +0 -0
  720. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_tradingview_bridge.py +0 -0
  721. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_turn_planning.py +0 -0
  722. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ui_completer_references.py +0 -0
  723. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ui_input_box.py +0 -0
  724. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ui_language_and_model.py +0 -0
  725. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_ui_robot_banner.py +0 -0
  726. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_update_health_routes.py +0 -0
  727. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_verification_hint.py +0 -0
  728. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_verification_policy.py +0 -0
  729. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_version_consistency.py +0 -0
  730. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_version_counter.py +0 -0
  731. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_video_analysis.py +0 -0
  732. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_video_editor.py +0 -0
  733. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_vscode_mcp.py +0 -0
  734. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_warehouse_agents.py +0 -0
  735. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_warehouse_cli_registration.py +0 -0
  736. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_warehouse_erp_client.py +0 -0
  737. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_warehouse_workflow.py +0 -0
  738. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_wheel_is_installable.py +0 -0
  739. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_workspace_changes.py +0 -0
  740. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_workspace_context.py +0 -0
  741. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_workspace_files.py +0 -0
  742. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_workspace_scope.py +0 -0
  743. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_workspace_service.py +0 -0
  744. {aria_code-0.82.0 → aria_code-0.84.0}/tests/test_workspace_verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.82.0
3
+ Version: 0.84.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.82.0"
7
+ version = "0.84.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.82.0"
20
+ __version__ = "0.84.0"
@@ -0,0 +1,160 @@
1
+ """Shared CLI command metadata.
2
+
3
+ This module is intentionally UI-free so future channel adapters such as Feishu
4
+ or a local gateway can reuse the same command categories without importing the
5
+ large terminal implementation.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from dataclasses import dataclass
11
+ from typing import FrozenSet, Tuple
12
+
13
+
14
+ @dataclass(frozen=True)
15
+ class DirectCommandSpec:
16
+ name: str
17
+ method_name: str
18
+ async_method: bool = False
19
+ watchable: bool = False
20
+ aliases: Tuple[str, ...] = ()
21
+
22
+ @property
23
+ def names(self) -> Tuple[str, ...]:
24
+ return (self.name, *self.aliases)
25
+
26
+
27
+ DIRECT_COMMANDS: Tuple[DirectCommandSpec, ...] = (
28
+ DirectCommandSpec("quote", "cmd_quote", async_method=True, watchable=True),
29
+ DirectCommandSpec("backtest", "cmd_backtest", async_method=True),
30
+ DirectCommandSpec("health", "cmd_health", async_method=True, watchable=True),
31
+ DirectCommandSpec("doctor", "cmd_doctor"),
32
+ DirectCommandSpec("tools", "cmd_tools"),
33
+ DirectCommandSpec("skills", "cmd_skills"),
34
+ DirectCommandSpec("sessions", "cmd_sessions"),
35
+ DirectCommandSpec("watch", "cmd_watch", aliases=("watchlist",)),
36
+ DirectCommandSpec("export", "cmd_export", async_method=True),
37
+ DirectCommandSpec("tv", "cmd_tv", async_method=True),
38
+ DirectCommandSpec("ashare", "cmd_ashare", async_method=True, aliases=("a-share",)),
39
+ DirectCommandSpec("markets", "cmd_markets"),
40
+ DirectCommandSpec("orchestrate", "cmd_orchestrate"),
41
+ )
42
+
43
+
44
+ DIRECT_COMMAND_MAP = {
45
+ alias: spec
46
+ for spec in DIRECT_COMMANDS
47
+ for alias in spec.names
48
+ }
49
+
50
+
51
+ WATCHABLE_DIRECT_COMMANDS: FrozenSet[str] = frozenset(
52
+ alias
53
+ for spec in DIRECT_COMMANDS
54
+ if spec.watchable
55
+ for alias in spec.names
56
+ )
57
+
58
+
59
+ # Commands shown by default in /help. Other slash commands remain executable but
60
+ # are hidden to keep the startup surface compact.
61
+ VISIBLE_SLASH_COMMANDS: FrozenSet[str] = frozenset({
62
+ # Session
63
+ "/help", "/clear", "/compact", "/cost", "/status", "/health",
64
+ "/regen", "/undo", "/rewind", "/copy", "/recap", "/btw",
65
+ # Sessions
66
+ "/save", "/load", "/sessions", "/recall", "/export",
67
+ # Config
68
+ "/model", "/thinking", "/config", "/permissions", "/privacy",
69
+ # Setup & discovery
70
+ "/setup", "/apikey", "/doctor", "/architecture", "/mcp", "/skills", "/tools", "/packages", "/markets",
71
+ # Auth
72
+ "/login", "/logout", "/whoami",
73
+ # Persistent data (direct writes)
74
+ "/alert", "/journal", "/watch", "/note", "/todo", "/memory",
75
+ # Broker
76
+ "/broker", "/account", "/positions", "/orders", "/paper", "/trade",
77
+ # Code & project
78
+ "/project", "/init", "/review", "/code", "/plan", "/orchestrate", "/run", "/tasks", "/delegate", "/canva", "/completions", "/lsp",
79
+ # Research
80
+ "/team", "/warehouse", "/deep",
81
+ # Quant
82
+ "/backtest", "/wf", "/tv", "/ashare",
83
+ # UI generation
84
+ "/ui",
85
+ # Other
86
+ "/artifacts", "/vision", "/upload-image", "/file", "/strategy", "/accuracy",
87
+ })
88
+
89
+
90
+ # ── What "/" shows ────────────────────────────────────────────────────────────
91
+ # The "/" popup listed every command — 167 of them plus 14 skills, 92 without
92
+ # a category — and /help printed about 90 lines. Codex lists only session
93
+ # controls under "/", shows eight rows, and takes tasks in plain language.
94
+ # Aria keeps every command runnable by name; the popup opens on these two
95
+ # tiers, and typing narrows it over everything.
96
+
97
+ # Session and setup controls, in popup order.
98
+ CORE_SLASH_COMMANDS: Tuple[str, ...] = (
99
+ "/help", "/model", "/review", "/plan", "/init", "/status", "/sessions", "/clear",
100
+ "/compact", "/copy", "/rewind", "/permissions", "/config", "/doctor", "/login",
101
+ )
102
+
103
+ # One way into each capability: building code, financial analysis, logistics.
104
+ ENTRY_SLASH_COMMANDS: Tuple[str, ...] = (
105
+ "/code", "/ta", "/backtest", "/team", "/report", "/portfolio", "/inventory", "/carriers",
106
+ )
107
+
108
+ # Second names for a command; the popup lists the command once.
109
+ COMMAND_ALIASES = {"/upload-image": "/vision"}
110
+
111
+
112
+ @dataclass(frozen=True)
113
+ class HelpTopic:
114
+ key: str
115
+ title_en: str
116
+ title_zh: str
117
+ commands: Tuple[str, ...]
118
+
119
+
120
+ HELP_TOPICS: Tuple[HelpTopic, ...] = (
121
+ HelpTopic("code", "Code and projects", "代码与项目", (
122
+ "/code", "/project", "/init", "/review", "/plan", "/run", "/read", "/write", "/edit", "/ls",
123
+ "/search", "/verify", "/scaffold", "/apply", "/changes", "/git")),
124
+ HelpTopic("market", "Market research", "市场研究", (
125
+ "/quote", "/analyze", "/ta", "/chart", "/tv", "/deep", "/team", "/report", "/news", "/markets",
126
+ "/watch", "/alert")),
127
+ HelpTopic("quant", "Quant and portfolios", "量化与组合", (
128
+ "/backtest", "/wf", "/compare", "/auto-strategy", "/execution", "/portfolio", "/risk",
129
+ "/optimize", "/stress", "/factors")),
130
+ HelpTopic("logistics", "Logistics", "物流", ("/inventory", "/carriers", "/warehouse")),
131
+ HelpTopic("data", "Notes, files and artifacts", "笔记、文件与产物", (
132
+ "/journal", "/note", "/todo", "/memory", "/artifacts", "/strategy", "/accuracy", "/file",
133
+ "/vision", "/ui")),
134
+ HelpTopic("broker", "Broker and trading", "券商与交易", (
135
+ "/broker", "/paper", "/trade", "/account", "/positions", "/orders")),
136
+ HelpTopic("session", "Session", "会话", (
137
+ "/clear", "/compact", "/cost", "/status", "/health", "/regen", "/undo", "/rewind", "/copy",
138
+ "/recap", "/btw", "/save", "/load", "/sessions", "/export", "/export-pdf")),
139
+ HelpTopic("config", "Setup", "设置", (
140
+ "/model", "/thinking", "/config", "/permissions", "/privacy", "/local", "/update", "/setup",
141
+ "/apikey", "/doctor", "/mcp", "/login", "/logout", "/skills", "/tools", "/packages")),
142
+ )
143
+
144
+ HELP_TOPIC_MAP = {topic.key: topic for topic in HELP_TOPICS}
145
+
146
+
147
+ def popup_rank(name: str) -> int:
148
+ """0 for a core command, 1 for an entry point, 2 for everything else."""
149
+ if name in CORE_SLASH_COMMANDS:
150
+ return 0
151
+ if name in ENTRY_SLASH_COMMANDS:
152
+ return 1
153
+ return 2
154
+
155
+
156
+ def short_description(description: str) -> str:
157
+ """The description without its usage tail: "Technical indicators: /ta AAPL …" → "Technical indicators"."""
158
+ text = str(description or "")
159
+ cut = text.find(": /")
160
+ return (text[:cut] if cut > 0 else text).strip()
@@ -117,7 +117,11 @@ class CoreCommandsMixin:
117
117
  # Contextual help: /help <command>
118
118
  from aria_code.apps.cli.skills_catalog import SKILLS
119
119
  target = args.strip().lower()
120
- if target:
120
+ if target and target != "all":
121
+ from aria_code.apps.cli.commands.catalog import HELP_TOPIC_MAP
122
+ if target in HELP_TOPIC_MAP:
123
+ self._print_help_topic(HELP_TOPIC_MAP[target])
124
+ return
121
125
  cmd_key = target if target.startswith("/") else f"/{target}"
122
126
  if cmd_key in self.commands:
123
127
  _, desc = self.commands[cmd_key]
@@ -149,7 +153,11 @@ class CoreCommandsMixin:
149
153
  self.context.console.print(f"[dim]No help for: {target}. Try /help[/dim]" if self.context.has_rich else f"No help for: {target}")
150
154
  return
151
155
 
152
- # Full help listing
156
+ if not target:
157
+ self._print_help_overview()
158
+ return
159
+
160
+ # /help all: every command, grouped
153
161
  if self.context.has_rich:
154
162
  self.context.console.print()
155
163
 
@@ -248,6 +256,105 @@ class CoreCommandsMixin:
248
256
  print("\nSkills:")
249
257
  for s in SKILLS:
250
258
  print(f" {s['command']:20s} {s['description']}")
259
+ def _print_help_overview(self) -> None:
260
+ """One screen: what to type, the core commands, a way into each capability.
261
+
262
+ /help printed about 90 lines — every group, every skill — so the
263
+ commands that matter scrolled out of view. The rest is a topic away.
264
+ """
265
+ from aria_code.apps.cli.commands.catalog import (
266
+ CORE_SLASH_COMMANDS, ENTRY_SLASH_COMMANDS, HELP_TOPICS, short_description,
267
+ )
268
+ zh = str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh")
269
+ T = (lambda a, b: a) if zh else (lambda a, b: b)
270
+ core = [(n, short_description(self.commands[n][1])) for n in CORE_SLASH_COMMANDS if n in self.commands]
271
+ entry = [(n, short_description(self.commands[n][1])) for n in ENTRY_SLASH_COMMANDS if n in self.commands]
272
+ examples = (
273
+ T("给 utils.py 补上测试并运行", "Add tests for utils.py and run them"),
274
+ T("NVDA 这周走势怎么样?", "How's NVDA this week?"),
275
+ T("看看 skus.csv 哪些 SKU 该补货", "Which SKUs in skus.csv need reordering?"),
276
+ )
277
+ topics = " · ".join(t.key for t in HELP_TOPICS)
278
+ if not self.context.has_rich:
279
+ print("\n" + T("直接描述要做的事,Aria 会选择工具:", "Describe what you want; Aria picks the tools:"))
280
+ for example in examples:
281
+ print(f" {example}")
282
+ print("\n" + T("常用命令", "Commands"))
283
+ for name, desc in core + entry:
284
+ print(f" {name:13s} {desc}")
285
+ print("\n" + T(f"更多:/help {topics} · all · <命令>", f"More: /help {topics} · all · <command>"))
286
+ return
287
+
288
+ from rich.text import Text
289
+
290
+ console = self.context.console
291
+ console.print()
292
+ console.print(f"[bold]{T('直接描述要做的事', 'Describe what you want')}[/bold] "
293
+ f"[dim]{T('Aria 会选择工具', 'Aria picks the tools')}[/dim]")
294
+ for example in examples:
295
+ console.print(f" [#C08050]{example}[/#C08050]")
296
+ console.print()
297
+
298
+ name_width = max(len(name) for name, _ in core + entry)
299
+ # indent 2, name, gap 2, description, gap 3, name, gap 2, description
300
+ desc_width = max(12, (console.width - 2 - 2 * name_width - 2 - 3 - 2) // 2)
301
+
302
+ def cell(text: str) -> str:
303
+ return text if len(text) <= desc_width else text[:desc_width - 1] + "…"
304
+
305
+ two_columns = console.width >= 96
306
+ if not two_columns:
307
+ desc_width = max(12, console.width - 2 - name_width - 2)
308
+
309
+ def grid(rows):
310
+ if two_columns:
311
+ half = (len(rows) + 1) // 2
312
+ pairs = zip(rows[:half], rows[half:] + [("", "")])
313
+ else:
314
+ pairs = ((row, ("", "")) for row in rows)
315
+ lines = Text()
316
+ for left, right in pairs:
317
+ lines.append(" " + left[0].ljust(name_width + 2), style="bold #C08050")
318
+ lines.append(cell(left[1]).ljust(desc_width + 3) if right[0] else cell(left[1]), style="dim")
319
+ if right[0]:
320
+ lines.append(right[0].ljust(name_width + 2), style="bold #C08050")
321
+ lines.append(cell(right[1]), style="dim")
322
+ lines.append("\n")
323
+ lines.rstrip()
324
+ return lines
325
+
326
+ console.print(f"[bold]{T('命令', 'Commands')}[/bold]")
327
+ console.print(grid(core))
328
+ console.print()
329
+ console.print(f"[bold]{T('开始一项任务', 'Start a task')}[/bold] "
330
+ f"[dim]{T('代码 · 金融分析 · 物流', 'code · financial analysis · logistics')}[/dim]")
331
+ console.print(grid(entry))
332
+ console.print()
333
+ console.print(f"[dim]{T('更多', 'More')}: /help {topics} · all · <{T('命令', 'command')}>[/dim]")
334
+ console.print(f"[dim]@ {T('附加上下文', 'attaches context')} · ! {T('运行 shell 命令', 'runs a shell command')}"
335
+ f" · Esc {T('中断', 'interrupts')}[/dim]")
336
+ console.print()
337
+
338
+ def _print_help_topic(self, topic) -> None:
339
+ from aria_code.apps.cli.commands.catalog import short_description
340
+
341
+ zh = str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh")
342
+ rows = [(n, self.commands[n][1]) for n in topic.commands if n in self.commands]
343
+ title = topic.title_zh if zh else topic.title_en
344
+ if not self.context.has_rich:
345
+ print(f"\n{title}")
346
+ for name, desc in rows:
347
+ print(f" {name:16s} {desc}")
348
+ return
349
+ from rich.markup import escape
350
+
351
+ console = self.context.console
352
+ console.print()
353
+ console.print(f"[bold]{title}[/bold]")
354
+ for name, desc in rows:
355
+ console.print(f" [bold #C08050]{name:16s}[/bold #C08050][dim]{escape(desc)}[/dim]", highlight=False)
356
+ console.print()
357
+
251
358
  async def cmd_artifacts(self, args: str):
252
359
  from aria_code.ui.render.output import display_path as _display_path
253
360
  from aria_code.apps.cli.helpers import _copy_text_to_clipboard, _open_path_or_url, _reveal_path_in_finder
@@ -26,6 +26,12 @@ CODING_SYSTEM_PROMPT = (
26
26
  "For multi-file projects: emit one <tool_call> per file in the SAME response (up to 5 write_file calls). "
27
27
  "Then run/verify in the NEXT response. Never mix write_file and run_command in the same response.\n\n"
28
28
 
29
+ "## FINAL SUMMARY\n"
30
+ "The user has already seen every step: each file written, with a preview, and each command's "
31
+ "output. End with 1-4 sentences: which files changed, what was verified and the result "
32
+ "(\"3 tests passed\"), and anything left open. Do NOT paste file contents, diffs or command "
33
+ "output back; quote a line or two only when it matters.\n\n"
34
+
29
35
  "## ABSOLUTELY FORBIDDEN\n"
30
36
  "1. NEVER pass slash-commands (/config, /model, /note, /apikey, etc.) to run_command — "
31
37
  " they are NOT shell commands. To change policy tell the user to type the slash command directly.\n"
@@ -46,6 +46,8 @@ def build_response_style_rule(lang: str) -> str:
46
46
  "- For analysis: Conclusion -> Evidence -> Risk/Limitations -> Next.\n"
47
47
  "- Keep output compact: avoid repeated disclaimers, generic education, and duplicated sections.\n"
48
48
  "- Keep the interactive answer near one terminal screen (about 24 lines) unless the user explicitly requests detail.\n"
49
+ "- After using tools, do not paste back what the user already saw: name the files you wrote or changed and "
50
+ "quote only the lines that matter, and summarise command output (\"4 tests passed\") instead of reprinting it.\n"
49
51
  "- Never invent data. If a field is unavailable, omit it or note 'N/A' and continue with available data.\n\n"
50
52
  )
51
53
  return (
@@ -59,6 +61,7 @@ def build_response_style_rule(lang: str) -> str:
59
61
  "- 分析类回答按:结论 -> 依据 -> 风险/限制 -> 下一步。\n"
60
62
  "- 输出要紧凑:避免重复免责声明、泛泛教学和重复章节。\n"
61
63
  "- 交互回答尽量控制在一屏(约24行);用户明确要求详细内容时除外。\n"
64
+ "- 用过工具后不要重复用户已看到的内容:写入或修改的文件只说文件名并只引用关键几行,命令输出用一句话概括(如“4 个测试全部通过”),不要整段重贴。\n"
62
65
  "- 绝不编造数据。字段不可用时说明数据源未返回,并继续使用已有数据。\n\n"
63
66
  )
64
67
 
@@ -33,15 +33,44 @@ _REPETITION_NOTICE = (
33
33
 
34
34
 
35
35
  def _redact_activity_text(value: Any, limit: int = 90) -> str:
36
+ """One line, secrets masked — for anything echoed to the screen or a log.
37
+
38
+ Shell commands are now shown on their step line, so this also covers
39
+ "Authorization: Bearer …", credentials in URLs and the usual key shapes.
40
+ """
36
41
  text = re.sub(r"\s+", " ", str(value or "")).strip()
37
42
  text = re.sub(
38
- r"(?i)(api[_-]?key|token|password|secret)(\s*[=:]\s*|\s+)[^\s]+",
43
+ r"(?i)(api[_-]?key|token|password|passwd|secret)(\s*[=:]\s*|\s+)[^\s]+",
39
44
  r"\1\2***",
40
45
  text,
41
46
  )
47
+ text = re.sub(r"(?i)\b(bearer|basic)\s+[A-Za-z0-9._~+/=-]+", r"\1 ***", text)
48
+ text = re.sub(r"://[^/\s:@]+:[^@\s]+@", "://***@", text)
49
+ text = re.sub(r"\b(sk|pk|rk)-[A-Za-z0-9_-]{8,}|\bgh[pousr]_[A-Za-z0-9]{12,}|\bAIza[0-9A-Za-z_-]{20,}"
50
+ r"|\bxox[abposr]-[A-Za-z0-9-]{10,}", "***", text)
42
51
  return text[:limit]
43
52
 
44
53
 
54
+ # How long the runtime measured a tool call to take, carried with its result.
55
+ MEASURED_ELAPSED_KEY = "_elapsed_s"
56
+
57
+
58
+ def with_measured_elapsed(result: Any, elapsed: Any) -> Any:
59
+ if isinstance(result, dict) and isinstance(elapsed, (int, float)):
60
+ return {**result, MEASURED_ELAPSED_KEY: float(elapsed)}
61
+ return result
62
+
63
+
64
+ def approval_subject(tool_name: str, params: dict[str, Any]) -> str:
65
+ """What an answered approval leaves behind: the file, or the command with secrets masked."""
66
+ if tool_name == "run_command":
67
+ return _redact_activity_text(params.get("command", ""), limit=80)
68
+ for key in ("path", "file_path"):
69
+ if params.get(key):
70
+ return Path(str(params[key])).name
71
+ return tool_name.replace("_", " ")
72
+
73
+
45
74
  def _tool_activity_hint(tool: str, params: dict[str, Any]) -> str:
46
75
  """Return one safe, useful argument for a compact activity row."""
47
76
  if not isinstance(params, dict):
@@ -506,6 +535,11 @@ class TerminalRuntimeEventConsumer:
506
535
  if not starts:
507
536
  self.tool_start_times.pop(tool, None)
508
537
  elapsed_ms = int((time.time() - started_at) * 1000)
538
+ # The runtime times each call itself. Measuring from the announcement
539
+ # counted the person reading an approval, and results of a batch
540
+ # arrive together — "✓ writing file test_fx.py 13.9s" for a 9ms write.
541
+ if isinstance(summary, dict) and isinstance(summary.get(MEASURED_ELAPSED_KEY), (int, float)):
542
+ elapsed_ms = int(summary[MEASURED_ELAPSED_KEY] * 1000)
509
543
  params_queue = self.tool_params.get(tool) or []
510
544
  params = params_queue.pop(0) if params_queue else {}
511
545
  if not params_queue:
@@ -519,6 +553,10 @@ class TerminalRuntimeEventConsumer:
519
553
  detail = ""
520
554
  if not ok and isinstance(summary, dict):
521
555
  detail = str(summary.get("error") or "")[:90]
556
+ elif ok:
557
+ # Name what was done: two bare "✓ writing file" lines in a row
558
+ # did not say which file each was.
559
+ detail = _tool_activity_hint(tool, params)
522
560
  self.print_tool_done(tool, elapsed_ms, success=ok, summary=detail)
523
561
 
524
562
  ts = time.strftime("%H:%M:%S")
@@ -588,7 +626,7 @@ class TerminalRuntimeEventConsumer:
588
626
  elif isinstance(event, AgentEventToolCall):
589
627
  self.on_tool_call(event.tool, event.params)
590
628
  elif isinstance(event, AgentEventToolResult):
591
- self.on_tool_result(event.tool, event.result)
629
+ self.on_tool_result(event.tool, with_measured_elapsed(event.result, getattr(event, "elapsed", None)))
592
630
  elif isinstance(event, AgentEventStatus):
593
631
  self.on_status(event.state, event.message)
594
632
 
@@ -638,7 +676,9 @@ class TerminalApprovalEventConsumer:
638
676
  if not approval.approved:
639
677
  from aria_code.ui.render.output import print_tool_blocked
640
678
 
641
- print_tool_blocked(tool_name, "用户取消", console=self.console, has_rich=self.has_rich)
679
+ zh = str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh")
680
+ print_tool_blocked(tool_name, "用户取消" if zh else "declined", console=self.console,
681
+ has_rich=self.has_rich)
642
682
  return approval
643
683
 
644
684
  def apply(self, tool_params: dict, approval: ApprovalDecision) -> dict:
@@ -649,7 +689,9 @@ class TerminalApprovalEventConsumer:
649
689
  try:
650
690
  self.save_config(self.terminal.config)
651
691
  if self.has_rich:
652
- self.console.print(" [dim]策略已升级为 balanced 并保存[/dim]")
692
+ zh = str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh")
693
+ self.console.print(" [dim]策略已升级为 balanced 并保存[/dim]" if zh else
694
+ " [dim]Policy set to balanced and saved[/dim]")
653
695
  except Exception:
654
696
  pass
655
697
  return tool_params
@@ -57,7 +57,7 @@ def _command_approval_prefix(command: str) -> tuple[str, ...]:
57
57
  return ()
58
58
 
59
59
 
60
- def _arrow_select(options, selected: int = 0, title: str = "") -> int:
60
+ def _arrow_select(options, selected: int = 0, title: str = "", **_kwargs) -> int:
61
61
  return len(options) - 1
62
62
 
63
63
 
@@ -472,7 +472,10 @@ def _confirm_tool_execution_decision(tool_name: str, params: dict,
472
472
  ("Allow & set balanced", "允许并升级策略(本会话有效)" if zh else "and use balanced for this session"),
473
473
  ("No", "拒绝执行" if zh else "do not run it"),
474
474
  ]
475
- choice = _arrow_select(options, selected=0, title="")
475
+ # Imported here: aria_cli rebinds this function to its own globals.
476
+ from aria_code.apps.cli.runtime_consumer import approval_subject as _subject
477
+ choice = _arrow_select(options, selected=0, title="",
478
+ collapse_to=_subject(tool_name, params))
476
479
  if choice == 0:
477
480
  return ApprovalDecision.allow(policy="balanced", user_approved=True)
478
481
  if choice == 1:
@@ -518,7 +521,10 @@ def _confirm_tool_execution_decision(tool_name: str, params: dict,
518
521
  ("Yes, allow all tools", "本会话内所有工具自动允许" if zh else "every tool, this session"),
519
522
  ("No", ""),
520
523
  ]
521
- choice = _arrow_select(options, selected=0, title="")
524
+ # Imported here: aria_cli rebinds this function to its own globals.
525
+ from aria_code.apps.cli.runtime_consumer import approval_subject as _subject
526
+ choice = _arrow_select(options, selected=0, title="",
527
+ collapse_to=_subject(tool_name, params))
522
528
 
523
529
  if choice == 0:
524
530
  if tool_name == "run_command":
@@ -77,6 +77,41 @@ def _cprint(msg: str, *, console, has_rich: bool) -> None:
77
77
  print(plain)
78
78
 
79
79
 
80
+ OUTPUT_PREVIEW_LINES = 5
81
+
82
+
83
+ def print_command_outcome(console, returncode: int, stdout: str, stderr: str, full_output_path: str = "") -> None:
84
+ """One step line and the last few lines of what the command printed.
85
+
86
+ This printed "Command completed (exit 0)", up to six stdout lines and
87
+ "full output saved" — and nothing at all for `python3 -m unittest -v`,
88
+ whose report goes to stderr, so the model pasted the test results into
89
+ its answer instead. Lines are plain text: program output such as
90
+ "[/dim]" is not Rich markup. As Codex does, the tail is kept — that is
91
+ where "OK" or the failure is — and the rest is counted.
92
+ """
93
+ from rich.text import Text
94
+
95
+ lines = stdout.rstrip().splitlines() + (stderr.rstrip().splitlines() if stderr.strip() else [])
96
+ ok = returncode == 0
97
+ head = Text(" ⎿ ", style="dim")
98
+ head.append(f"exit {returncode}", style="green" if ok else "red")
99
+ if lines:
100
+ head.append(f" · {len(lines)} line{'s' if len(lines) != 1 else ''}", style="dim")
101
+ console.print(head)
102
+ notes = []
103
+ if len(lines) > OUTPUT_PREVIEW_LINES:
104
+ notes.append(f"… +{len(lines) - OUTPUT_PREVIEW_LINES} lines")
105
+ if full_output_path:
106
+ from aria_code.ui.render.output import display_path
107
+
108
+ notes.append(f"full output saved: {display_path(full_output_path)}")
109
+ if notes:
110
+ console.print(Text(" " + " · ".join(notes), style="dim"))
111
+ for line in lines[-OUTPUT_PREVIEW_LINES:]:
112
+ console.print(Text(" " + line[:160], style="dim" if ok else "red"), overflow="ellipsis", no_wrap=True)
113
+
114
+
80
115
  def tool_run_command(
81
116
  params: dict,
82
117
  *,
@@ -374,20 +409,8 @@ def tool_run_command(
374
409
  # ── End auto-fix ─────────────────────────────────────────────────────
375
410
 
376
411
  if has_rich and console is not None:
377
- if result.returncode == 0:
378
- console.print(f" [green]Command completed[/green] [dim](exit {result.returncode})[/dim]")
379
- else:
380
- console.print(f" [dim]Command exited {result.returncode}[/dim]")
381
- out_preview = output.strip().splitlines()[:6]
382
- for ol in out_preview:
383
- console.print(f" [dim]{ol[:120]}[/dim]")
384
- if len(output.strip().splitlines()) > 6:
385
- console.print(" [dim]...truncated[/dim]")
386
- if output_artifact.get("full_output_path"):
387
- console.print(" [dim]full output saved[/dim]")
388
- if stderr.strip() and result.returncode != 0:
389
- for el in stderr.strip().splitlines()[:3]:
390
- console.print(f" [red]{el[:120]}[/red]")
412
+ print_command_outcome(console, result.returncode, output, stderr,
413
+ output_artifact.get("full_output_path", ""))
391
414
  else:
392
415
  print(f" Command exit: {result.returncode}")
393
416
  data = {
@@ -2623,7 +2623,10 @@ def _format_tool_params(tool_name: str, params: dict) -> str:
2623
2623
  # Basename only — informative without leaking full workspace paths.
2624
2624
  return _short(pathlib.Path(str(params.get("path", ""))).name or "file tool", 40)
2625
2625
  if tool_name == "run_command":
2626
- return "shell tool"
2626
+ # The command itself, secrets masked: "shell tool" said nothing, while
2627
+ # the approval menu under it named the command anyway.
2628
+ from apps.cli.runtime_consumer import _redact_activity_text
2629
+ return _short(_redact_activity_text(params.get("command", ""), limit=200) or "shell", 72)
2627
2630
  if tool_name == "list_files":
2628
2631
  return _short(params.get("pattern") or params.get("path") or "file tool", 40)
2629
2632
  if tool_name == "search_code":
@@ -2782,7 +2785,7 @@ def _print_tool_done(tool_name: str, elapsed_ms: int, success: bool = True, summ
2782
2785
  return
2783
2786
  action = _TOOL_ACTION_LABELS.get(tool_name, tool_name.replace("_", " "))
2784
2787
  icon = "[green]✓[/green]" if success else "[red]✗[/red]"
2785
- t_txt = f"({elapsed_ms}ms)" if elapsed_ms > 0 else ""
2788
+ t_txt = ("" if elapsed_ms <= 0 else f"{elapsed_ms}ms" if elapsed_ms < 1000 else f"{elapsed_ms / 1000:.1f}s")
2786
2789
  if summary:
2787
2790
  # 单行预算:summary 按显示宽度(CJK 记 2 格)截断,保证图标+动作+摘要+时长
2788
2791
  # 排在同一行——否则 Rich 整行回卷,时长 chip 顶格孤立在下一行,树形缩进被破坏。
@@ -126,7 +126,9 @@ async def run_turn(
126
126
  on_tool_call(ev.tool, dict(ev.params))
127
127
  elif isinstance(ev, AgentEventToolResult):
128
128
  if on_tool_result is not None:
129
- on_tool_result(ev.tool, dict(ev.result))
129
+ from aria_code.apps.cli.runtime_consumer import with_measured_elapsed
130
+
131
+ on_tool_result(ev.tool, with_measured_elapsed(dict(ev.result), getattr(ev, "elapsed", None)))
130
132
  elif isinstance(ev, AgentEventStatus):
131
133
  if on_status is not None:
132
134
  phase = getattr(ev, "phase", "") or getattr(ev, "state", "") or ""