aria-code 4.2.0__tar.gz → 4.3.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 (519) hide show
  1. {aria_code-4.2.0/aria_code.egg-info → aria_code-4.3.0}/PKG-INFO +106 -2
  2. {aria_code-4.2.0 → aria_code-4.3.0}/README.md +93 -1
  3. aria_code-4.3.0/adk_apps/__init__.py +1 -0
  4. aria_code-4.3.0/adk_apps/aria_research/__init__.py +1 -0
  5. aria_code-4.3.0/adk_apps/aria_research/agent.py +31 -0
  6. {aria_code-4.2.0 → aria_code-4.3.0}/agents/base.py +108 -21
  7. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/fundamental.py +29 -1
  8. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/risk.py +30 -1
  9. {aria_code-4.2.0 → aria_code-4.3.0}/agents/registry.py +6 -0
  10. {aria_code-4.2.0 → aria_code-4.3.0}/agents/signal_scheme.py +14 -0
  11. aria_code-4.3.0/agents/supervisor.py +113 -0
  12. {aria_code-4.2.0 → aria_code-4.3.0}/agents/team.py +110 -7
  13. aria_code-4.3.0/agents/warehouse/__init__.py +15 -0
  14. aria_code-4.3.0/agents/warehouse/contracts.py +26 -0
  15. aria_code-4.3.0/agents/warehouse/inbound_exceptions.py +25 -0
  16. aria_code-4.3.0/agents/warehouse/inventory_health.py +24 -0
  17. aria_code-4.3.0/agents/warehouse/logistics_sync.py +21 -0
  18. aria_code-4.3.0/agents/warehouse/workflow.py +31 -0
  19. aria_code-4.3.0/aliyun_data_client.py +4 -0
  20. aria_code-4.3.0/apps/cli/commands/ashare_prediction_cmds.py +299 -0
  21. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/backtest_cmds.py +6 -1
  22. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/broker_cmds.py +43 -1
  23. aria_code-4.3.0/apps/cli/commands/canvas_cmds.py +54 -0
  24. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/catalog.py +7 -4
  25. aria_code-4.3.0/apps/cli/commands/core_cmds.py +2411 -0
  26. aria_code-4.3.0/apps/cli/commands/finance_service_cmds.py +32 -0
  27. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/model_cmds.py +120 -0
  28. aria_code-4.3.0/apps/cli/commands/orchestrator_cmds.py +36 -0
  29. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/portfolio_cmds.py +18 -0
  30. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/team.py +15 -2
  31. aria_code-4.3.0/apps/cli/commands/warehouse_cmds.py +51 -0
  32. aria_code-4.3.0/apps/cli/finance_service_catalog.py +111 -0
  33. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/intent_router.py +23 -2
  34. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/providers/chat_routing.py +2 -0
  35. aria_code-4.3.0/apps/cli/providers/collaboration.py +98 -0
  36. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/runtime_consumer.py +19 -0
  37. aria_code-4.3.0/apps/cli/tool_executor.py +697 -0
  38. {aria_code-4.2.0 → aria_code-4.3.0}/aria_cli.py +88 -3083
  39. {aria_code-4.2.0 → aria_code-4.3.0/aria_code.egg-info}/PKG-INFO +106 -2
  40. {aria_code-4.2.0 → aria_code-4.3.0}/aria_code.egg-info/SOURCES.txt +81 -0
  41. {aria_code-4.2.0 → aria_code-4.3.0}/aria_code.egg-info/entry_points.txt +1 -0
  42. {aria_code-4.2.0 → aria_code-4.3.0}/aria_code.egg-info/requires.txt +15 -0
  43. {aria_code-4.2.0 → aria_code-4.3.0}/aria_code.egg-info/top_level.txt +13 -0
  44. {aria_code-4.2.0 → aria_code-4.3.0}/aria_feishu_bot.py +60 -0
  45. aria_code-4.3.0/aria_mcp_server.py +7 -0
  46. aria_code-4.3.0/aria_relay_client.py +4 -0
  47. {aria_code-4.2.0 → aria_code-4.3.0}/artifacts.py +21 -0
  48. aria_code-4.3.0/backtest_engine.py +4 -0
  49. aria_code-4.3.0/backtest_report.py +4 -0
  50. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/config.py +45 -0
  51. aria_code-4.3.0/brokers/intl/trading212_broker.py +183 -0
  52. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/registry.py +1 -0
  53. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/trading.py +14 -2
  54. aria_code-4.3.0/canva_client.py +4 -0
  55. aria_code-4.3.0/computer_use_tools.py +4 -0
  56. aria_code-4.3.0/data_analysis_tools.py +4 -0
  57. {aria_code-4.2.0 → aria_code-4.3.0}/data_service.py +39 -9
  58. {aria_code-4.2.0 → aria_code-4.3.0}/doctor.py +88 -0
  59. aria_code-4.3.0/external_agent_runner.py +115 -0
  60. aria_code-4.3.0/figma_client.py +4 -0
  61. aria_code-4.3.0/file_analysis_tools.py +4 -0
  62. aria_code-4.3.0/finance_formulas.py +4 -0
  63. aria_code-4.3.0/football_data_client.py +4 -0
  64. aria_code-4.3.0/kling_video_client.py +4 -0
  65. aria_code-4.3.0/local_finance_tools.py +4 -0
  66. aria_code-4.3.0/local_image_provider.py +4 -0
  67. aria_code-4.3.0/local_llm_provider.py +4 -0
  68. aria_code-4.3.0/macro_tools.py +4 -0
  69. aria_code-4.3.0/market_data_client.py +4 -0
  70. aria_code-4.3.0/notification_tools.py +4 -0
  71. aria_code-4.3.0/openai_image_client.py +4 -0
  72. aria_code-4.3.0/packages/adk_bridge/__init__.py +10 -0
  73. aria_code-4.3.0/packages/adk_bridge/market_tools.py +125 -0
  74. aria_code-4.3.0/packages/aria_mcp/bridge.py +201 -0
  75. aria_code-4.3.0/packages/aria_mcp/server.py +1550 -0
  76. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/__init__.py +4 -0
  77. aria_code-4.3.0/packages/aria_services/cache.py +60 -0
  78. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/provider_health.py +80 -1
  79. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_skills/loader.py +25 -0
  80. aria_code-4.3.0/packages/aria_tools/financial/__init__.py +8 -0
  81. aria_code-4.3.0/packages/aria_tools/financial/compliance.py +28 -0
  82. aria_code-4.3.0/packages/aria_tools/financial/factors.py +32 -0
  83. aria_code-4.3.0/packages/aria_tools/financial/risk_tools.py +32 -0
  84. aria_code-4.3.0/packages/aria_tools/financial/strategy.py +28 -0
  85. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/__init__.py +10 -0
  86. aria_code-4.3.0/packages/quant_engine/backtest/__init__.py +6 -0
  87. aria_code-4.3.0/packages/quant_engine/backtest/core.py +53 -0
  88. aria_code-4.3.0/packages/quant_engine/backtest/engine.py +93 -0
  89. aria_code-4.3.0/packages/quant_engine/portfolio/__init__.py +5 -0
  90. aria_code-4.3.0/packages/quant_engine/portfolio/optimizer.py +85 -0
  91. aria_code-4.3.0/portfolio_ledger.py +4 -0
  92. aria_code-4.3.0/project_tools.py +4 -0
  93. aria_code-4.3.0/providers/local_image_provider.py +202 -0
  94. {aria_code-4.2.0 → aria_code-4.3.0}/pyproject.toml +33 -2
  95. aria_code-4.3.0/realty_data_tools.py +4 -0
  96. aria_code-4.3.0/report_exporters.py +150 -0
  97. {aria_code-4.2.0 → aria_code-4.3.0}/report_generator.py +252 -0
  98. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/__init__.py +2 -0
  99. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/subagent.py +126 -8
  100. aria_code-4.3.0/runtime/task_ledger.py +86 -0
  101. aria_code-4.3.0/runtime/task_orchestrator.py +90 -0
  102. aria_code-4.3.0/runway_video_client.py +4 -0
  103. aria_code-4.3.0/strategy_vault.py +4 -0
  104. aria_code-4.3.0/tests/test_adk_market_tools.py +89 -0
  105. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_analyze_file_tool.py +1 -1
  106. aria_code-4.3.0/tests/test_aria_mcp_server.py +560 -0
  107. aria_code-4.3.0/tests/test_ashare_prediction_cmds.py +60 -0
  108. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_backtest_engine.py +1 -1
  109. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_backtest_report.py +1 -1
  110. aria_code-4.3.0/tests/test_broker_chat_confirm_gate.py +161 -0
  111. aria_code-4.3.0/tests/test_canva_client.py +101 -0
  112. aria_code-4.3.0/tests/test_canvas_cmds.py +133 -0
  113. aria_code-4.3.0/tests/test_ci_security_workflow.py +12 -0
  114. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_cli_app_split.py +7 -1
  115. aria_code-4.3.0/tests/test_cli_tool_executor_module.py +6 -0
  116. aria_code-4.3.0/tests/test_collaboration.py +61 -0
  117. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_configured_provider.py +5 -0
  118. aria_code-4.3.0/tests/test_data_service_imports.py +8 -0
  119. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_doctor.py +100 -1
  120. aria_code-4.3.0/tests/test_feishu_swarm_config.py +15 -0
  121. aria_code-4.3.0/tests/test_finance_service_catalog.py +18 -0
  122. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_football_prediction_output.py +1 -1
  123. aria_code-4.3.0/tests/test_image_gen_tools.py +102 -0
  124. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_intent_router.py +8 -0
  125. aria_code-4.3.0/tests/test_kling_video_client.py +96 -0
  126. aria_code-4.3.0/tests/test_legacy_module_imports.py +17 -0
  127. aria_code-4.3.0/tests/test_local_image_provider.py +156 -0
  128. aria_code-4.3.0/tests/test_openai_image_client.py +194 -0
  129. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_portfolio_ledger.py +1 -1
  130. aria_code-4.3.0/tests/test_preview_server.py +248 -0
  131. aria_code-4.3.0/tests/test_public_service_status.py +57 -0
  132. aria_code-4.3.0/tests/test_report_charts.py +167 -0
  133. aria_code-4.3.0/tests/test_runway_video_client.py +87 -0
  134. aria_code-4.3.0/tests/test_service_diagnostics_security.py +20 -0
  135. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_skill_loader.py +70 -0
  136. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_spreadsheet_tools.py +1 -1
  137. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_subagent.py +29 -0
  138. aria_code-4.3.0/tests/test_supervisor_routing.py +30 -0
  139. aria_code-4.3.0/tests/test_task_orchestrator.py +28 -0
  140. aria_code-4.3.0/tests/test_video_analysis.py +82 -0
  141. aria_code-4.3.0/tests/test_video_editor.py +148 -0
  142. aria_code-4.3.0/tests/test_warehouse_agents.py +45 -0
  143. aria_code-4.3.0/tests/test_warehouse_cli_registration.py +10 -0
  144. aria_code-4.3.0/tests/test_warehouse_erp_client.py +63 -0
  145. aria_code-4.3.0/tests/test_warehouse_workflow.py +26 -0
  146. aria_code-4.3.0/tests/test_workspace_context.py +92 -0
  147. aria_code-4.3.0/video_analysis.py +147 -0
  148. aria_code-4.3.0/video_editor.py +271 -0
  149. aria_code-4.3.0/workspace_context.py +233 -0
  150. aria_code-4.2.0/aliyun_data_client.py +0 -660
  151. aria_code-4.2.0/aria_relay_client.py +0 -182
  152. aria_code-4.2.0/backtest_engine.py +0 -354
  153. aria_code-4.2.0/backtest_report.py +0 -472
  154. aria_code-4.2.0/computer_use_tools.py +0 -504
  155. aria_code-4.2.0/data_analysis_tools.py +0 -808
  156. aria_code-4.2.0/file_analysis_tools.py +0 -885
  157. aria_code-4.2.0/finance_formulas.py +0 -389
  158. aria_code-4.2.0/football_data_client.py +0 -1670
  159. aria_code-4.2.0/local_finance_tools.py +0 -3334
  160. aria_code-4.2.0/macro_tools.py +0 -368
  161. aria_code-4.2.0/market_data_client.py +0 -1970
  162. aria_code-4.2.0/notification_tools.py +0 -248
  163. aria_code-4.2.0/packages/aria_mcp/bridge.py +0 -38
  164. aria_code-4.2.0/portfolio_ledger.py +0 -306
  165. aria_code-4.2.0/project_tools.py +0 -525
  166. aria_code-4.2.0/realty_data_tools.py +0 -659
  167. aria_code-4.2.0/strategy_vault.py +0 -420
  168. {aria_code-4.2.0 → aria_code-4.3.0}/LICENSE +0 -0
  169. {aria_code-4.2.0 → aria_code-4.3.0}/agents/__init__.py +0 -0
  170. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/__init__.py +0 -0
  171. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/calibration_loop.py +0 -0
  172. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/critic.py +0 -0
  173. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/deepen.py +0 -0
  174. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/models.py +0 -0
  175. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/pipeline.py +0 -0
  176. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/quant_fusion.py +0 -0
  177. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/themes.py +0 -0
  178. {aria_code-4.2.0 → aria_code-4.3.0}/agents/deep/tiers.py +0 -0
  179. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/__init__.py +0 -0
  180. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/catalyst.py +0 -0
  181. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/debate.py +0 -0
  182. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/earnings.py +0 -0
  183. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/macro.py +0 -0
  184. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/news.py +0 -0
  185. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/sector.py +0 -0
  186. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/synthesis.py +0 -0
  187. {aria_code-4.2.0 → aria_code-4.3.0}/agents/financial/technical.py +0 -0
  188. {aria_code-4.2.0 → aria_code-4.3.0}/agents/portfolio_agent.py +0 -0
  189. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/__init__.py +0 -0
  190. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/asset_diagnosis.py +0 -0
  191. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/business_match.py +0 -0
  192. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/cashflow_verify.py +0 -0
  193. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/contract_rules.py +0 -0
  194. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/energy_anomaly.py +0 -0
  195. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/exit_settlement.py +0 -0
  196. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/fulfillment_risk.py +0 -0
  197. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/ops_optimize.py +0 -0
  198. {aria_code-4.2.0 → aria_code-4.3.0}/agents/realty/revenue_share.py +0 -0
  199. {aria_code-4.2.0 → aria_code-4.3.0}/agents/sports/__init__.py +0 -0
  200. {aria_code-4.2.0 → aria_code-4.3.0}/agents/sports/football_agent.py +0 -0
  201. {aria_code-4.2.0 → aria_code-4.3.0}/apps/README.md +0 -0
  202. {aria_code-4.2.0 → aria_code-4.3.0}/apps/__init__.py +0 -0
  203. {aria_code-4.2.0 → aria_code-4.3.0}/apps/channels/README.md +0 -0
  204. {aria_code-4.2.0 → aria_code-4.3.0}/apps/channels/__init__.py +0 -0
  205. {aria_code-4.2.0 → aria_code-4.3.0}/apps/channels/intake.py +0 -0
  206. {aria_code-4.2.0 → aria_code-4.3.0}/apps/channels/registry.py +0 -0
  207. {aria_code-4.2.0 → aria_code-4.3.0}/apps/channels/tradingview.py +0 -0
  208. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/README.md +0 -0
  209. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/__init__.py +0 -0
  210. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/bootstrap.py +0 -0
  211. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/codegen_paths.py +0 -0
  212. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/__init__.py +0 -0
  213. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/analysis_cmds.py +0 -0
  214. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/auth_cmds.py +0 -0
  215. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/business_workflow_cmds.py +0 -0
  216. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/data_cmds.py +0 -0
  217. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/diagnostic_cmds.py +0 -0
  218. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
  219. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/file_cmds.py +0 -0
  220. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/finance_render.py +0 -0
  221. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/fx_commodity_cmds.py +0 -0
  222. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/market.py +0 -0
  223. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/market_cmds.py +0 -0
  224. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/market_context.py +0 -0
  225. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/market_render.py +0 -0
  226. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/ops_cmds.py +0 -0
  227. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/pdf_export_cmds.py +0 -0
  228. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/report.py +0 -0
  229. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/scaffold_templates.py +0 -0
  230. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/session_cmds.py +0 -0
  231. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/session_ux_cmds.py +0 -0
  232. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/team_render.py +0 -0
  233. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/ui_cmds.py +0 -0
  234. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/workflow_cmds.py +0 -0
  235. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/commands/workspace_cmds.py +0 -0
  236. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/config_paths.py +0 -0
  237. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/config_store.py +0 -0
  238. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/deterministic.py +0 -0
  239. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/direct.py +0 -0
  240. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/github_app_auth.py +0 -0
  241. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/handlers/__init__.py +0 -0
  242. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/handlers/broker_handlers.py +0 -0
  243. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/handlers/chart_handlers.py +0 -0
  244. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/handlers/market_handlers.py +0 -0
  245. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/handlers/realty_handlers.py +0 -0
  246. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/handlers/strategy_advice.py +0 -0
  247. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/hooks.py +0 -0
  248. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/i18n.py +0 -0
  249. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/intent.py +0 -0
  250. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/lifecycle_hooks.py +0 -0
  251. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/main.py +0 -0
  252. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/market_metadata.py +0 -0
  253. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/market_universe.py +0 -0
  254. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/message_processing.py +0 -0
  255. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/pdf_report.py +0 -0
  256. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/plan_mode.py +0 -0
  257. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/plotly_html.py +0 -0
  258. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/prediction_feedback.py +0 -0
  259. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/preflight.py +0 -0
  260. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/project_aria.py +0 -0
  261. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/prompt_assembly.py +0 -0
  262. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/prompts/__init__.py +0 -0
  263. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/prompts/coding.py +0 -0
  264. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/prompts/system_prompts.py +0 -0
  265. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/prompts/ui.py +0 -0
  266. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/providers/__init__.py +0 -0
  267. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/providers/base.py +0 -0
  268. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/providers/llm/__init__.py +0 -0
  269. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/providers/llm/ollama_stream.py +0 -0
  270. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/providers/llm/sse_stream.py +0 -0
  271. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/providers/runtime_bridge.py +0 -0
  272. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/session_export.py +0 -0
  273. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/session_jsonl.py +0 -0
  274. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/session_store.py +0 -0
  275. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/todo_tracker.py +0 -0
  276. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/tools/__init__.py +0 -0
  277. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/tools/context.py +0 -0
  278. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/tools/file_tools.py +0 -0
  279. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/tools/market_tools.py +0 -0
  280. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/tools/notebook_tools.py +0 -0
  281. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/tools/system_tools.py +0 -0
  282. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/tools/write_tools.py +0 -0
  283. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/tradingview_bridge.py +0 -0
  284. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/turn_planning.py +0 -0
  285. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/update_check.py +0 -0
  286. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/utils/__init__.py +0 -0
  287. {aria_code-4.2.0 → aria_code-4.3.0}/apps/cli/utils/market_detect.py +0 -0
  288. {aria_code-4.2.0 → aria_code-4.3.0}/apps/daemon/README.md +0 -0
  289. {aria_code-4.2.0 → aria_code-4.3.0}/apps/vscode/README.md +0 -0
  290. {aria_code-4.2.0 → aria_code-4.3.0}/apps/vscode/package.json +0 -0
  291. {aria_code-4.2.0 → aria_code-4.3.0}/aria_code.egg-info/dependency_links.txt +0 -0
  292. {aria_code-4.2.0 → aria_code-4.3.0}/aria_daemon.py +0 -0
  293. {aria_code-4.2.0 → aria_code-4.3.0}/aria_relay_server.py +0 -0
  294. {aria_code-4.2.0 → aria_code-4.3.0}/aria_telegram_bot.py +0 -0
  295. {aria_code-4.2.0 → aria_code-4.3.0}/ariarc.py +0 -0
  296. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/__init__.py +0 -0
  297. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/automation.py +0 -0
  298. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/base.py +0 -0
  299. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/capabilities.py +0 -0
  300. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/cn/__init__.py +0 -0
  301. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/cn/easytrader_broker.py +0 -0
  302. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/cn/futu_broker.py +0 -0
  303. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/cn/longbridge_broker.py +0 -0
  304. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/cn/tiger_broker.py +0 -0
  305. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/cn/xtquant_broker.py +0 -0
  306. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/intl/__init__.py +0 -0
  307. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/intl/alpaca_broker.py +0 -0
  308. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/intl/ibkr_broker.py +0 -0
  309. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/intl/webull_broker.py +0 -0
  310. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/paper_broker.py +0 -0
  311. {aria_code-4.2.0 → aria_code-4.3.0}/brokers/planning.py +0 -0
  312. {aria_code-4.2.0 → aria_code-4.3.0}/change_store.py +0 -0
  313. {aria_code-4.2.0 → aria_code-4.3.0}/command_safety.py +0 -0
  314. {aria_code-4.2.0 → aria_code-4.3.0}/dashboard_generator.py +0 -0
  315. {aria_code-4.2.0 → aria_code-4.3.0}/data_cleaner.py +0 -0
  316. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/__init__.py +0 -0
  317. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/base.py +0 -0
  318. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/router.py +0 -0
  319. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/__init__.py +0 -0
  320. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/akshare_source.py +0 -0
  321. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/alpha_vantage_source.py +0 -0
  322. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/edgar_source.py +0 -0
  323. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/finnhub_source.py +0 -0
  324. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/fred_source.py +0 -0
  325. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/tushare_source.py +0 -0
  326. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/web_scraper_source.py +0 -0
  327. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/world_bank_source.py +0 -0
  328. {aria_code-4.2.0 → aria_code-4.3.0}/datasources/sources/yfinance_source.py +0 -0
  329. {aria_code-4.2.0 → aria_code-4.3.0}/demo_player.py +0 -0
  330. {aria_code-4.2.0 → aria_code-4.3.0}/intent_classifier.py +0 -0
  331. {aria_code-4.2.0 → aria_code-4.3.0}/licensing.py +0 -0
  332. {aria_code-4.2.0 → aria_code-4.3.0}/mcp_client.py +0 -0
  333. {aria_code-4.2.0 → aria_code-4.3.0}/memory_manager.py +0 -0
  334. {aria_code-4.2.0 → aria_code-4.3.0}/model_capability.py +0 -0
  335. {aria_code-4.2.0 → aria_code-4.3.0}/packages/__init__.py +0 -0
  336. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_agents/__init__.py +0 -0
  337. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_agents/manifest.py +0 -0
  338. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_core/__init__.py +0 -0
  339. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_core/architecture.py +0 -0
  340. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_core/export.py +0 -0
  341. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_core/manifest.py +0 -0
  342. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_infra/__init__.py +0 -0
  343. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_infra/arthera.py +0 -0
  344. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_infra/doctor.py +0 -0
  345. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_infra/product.py +0 -0
  346. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_mcp/__init__.py +0 -0
  347. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_mcp/circuit.py +0 -0
  348. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_mcp/config.py +0 -0
  349. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_mcp/tools.py +0 -0
  350. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_sdk/__init__.py +0 -0
  351. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_sdk/client.py +0 -0
  352. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_sdk/providers.py +0 -0
  353. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_sdk/streaming.py +0 -0
  354. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_sdk/types.py +0 -0
  355. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/context.py +0 -0
  356. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/context_checkpoints.py +0 -0
  357. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/data.py +0 -0
  358. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/references.py +0 -0
  359. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/registry.py +0 -0
  360. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/research_protocol.py +0 -0
  361. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/research_quality.py +0 -0
  362. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/settings.py +0 -0
  363. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_services/usage.py +0 -0
  364. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_skills/__init__.py +0 -0
  365. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_skills/catalog.py +0 -0
  366. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_skills/registry.py +0 -0
  367. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_tools/__init__.py +0 -0
  368. {aria_code-4.2.0 → aria_code-4.3.0}/packages/aria_tools/registry.py +0 -0
  369. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/__init__.py +0 -0
  370. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/calibrator.py +0 -0
  371. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/dixon_coles.py +0 -0
  372. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/elo.py +0 -0
  373. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/form.py +0 -0
  374. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/h2h.py +0 -0
  375. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/ml_model.py +0 -0
  376. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/predictor.py +0 -0
  377. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/sports/tracker.py +0 -0
  378. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/stochastic/__init__.py +0 -0
  379. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
  380. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/stochastic/ito_calculus.py +0 -0
  381. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
  382. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
  383. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/stochastic/options_pricing.py +0 -0
  384. {aria_code-4.2.0 → aria_code-4.3.0}/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
  385. {aria_code-4.2.0 → aria_code-4.3.0}/plan_utils.py +0 -0
  386. {aria_code-4.2.0 → aria_code-4.3.0}/plugin_loader.py +0 -0
  387. {aria_code-4.2.0 → aria_code-4.3.0}/privacy/__init__.py +0 -0
  388. {aria_code-4.2.0 → aria_code-4.3.0}/privacy/feedback.py +0 -0
  389. {aria_code-4.2.0 → aria_code-4.3.0}/providers/__init__.py +0 -0
  390. {aria_code-4.2.0 → aria_code-4.3.0}/providers/llm/__init__.py +0 -0
  391. {aria_code-4.2.0 → aria_code-4.3.0}/providers/llm/anthropic.py +0 -0
  392. {aria_code-4.2.0 → aria_code-4.3.0}/providers/llm/base.py +0 -0
  393. {aria_code-4.2.0 → aria_code-4.3.0}/providers/llm/ollama.py +0 -0
  394. {aria_code-4.2.0 → aria_code-4.3.0}/providers/llm/openai_compat.py +0 -0
  395. {aria_code-4.2.0 → aria_code-4.3.0}/providers/llm/registry.py +0 -0
  396. {aria_code-4.2.0 → aria_code-4.3.0/providers}/local_llm_provider.py +0 -0
  397. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/agent_loop.py +0 -0
  398. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/approval.py +0 -0
  399. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/checkpoints.py +0 -0
  400. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/events.py +0 -0
  401. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/gateway.py +0 -0
  402. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/lsp.py +0 -0
  403. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/run_state.py +0 -0
  404. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/run_store.py +0 -0
  405. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/tool_executor.py +0 -0
  406. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/tool_policy.py +0 -0
  407. {aria_code-4.2.0 → aria_code-4.3.0}/runtime/worktrees.py +0 -0
  408. {aria_code-4.2.0 → aria_code-4.3.0}/safety/__init__.py +0 -0
  409. {aria_code-4.2.0 → aria_code-4.3.0}/safety/permissions.py +0 -0
  410. {aria_code-4.2.0 → aria_code-4.3.0}/safety/service.py +0 -0
  411. {aria_code-4.2.0 → aria_code-4.3.0}/setup.cfg +0 -0
  412. {aria_code-4.2.0 → aria_code-4.3.0}/setup_wizard.py +0 -0
  413. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_agent_team_fallback.py +0 -0
  414. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_architecture_report.py +0 -0
  415. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_aria_cli_core.py +0 -0
  416. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_aria_sdk.py +0 -0
  417. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_artifacts_and_reports.py +0 -0
  418. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_backtest_cmds.py +0 -0
  419. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_broker_automation.py +0 -0
  420. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_broker_planning.py +0 -0
  421. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_broker_safety.py +0 -0
  422. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_business_workflow_cmds.py +0 -0
  423. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_channel_intake.py +0 -0
  424. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_channels.py +0 -0
  425. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_chart_handlers.py +0 -0
  426. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_chat_routing.py +0 -0
  427. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_cli_bootstrap.py +0 -0
  428. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_cli_config_store.py +0 -0
  429. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_cli_lifecycle_hooks.py +0 -0
  430. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_cli_runtime_consumer.py +0 -0
  431. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_codegen_output.py +0 -0
  432. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_command_safety.py +0 -0
  433. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_completions_builder.py +0 -0
  434. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_config_paths.py +0 -0
  435. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_context_checkpoints.py +0 -0
  436. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_context_references.py +0 -0
  437. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_context_service.py +0 -0
  438. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_dashboard_generator.py +0 -0
  439. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_data_service.py +0 -0
  440. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_deep_analysis.py +0 -0
  441. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_finance_renderers.py +0 -0
  442. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_football_agent.py +0 -0
  443. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_image_inputs.py +0 -0
  444. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_licensing.py +0 -0
  445. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_lsp.py +0 -0
  446. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_markdown_pdf.py +0 -0
  447. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_market_data_client.py +0 -0
  448. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_market_history_tool.py +0 -0
  449. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_market_symbol_extraction.py +0 -0
  450. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_market_universe.py +0 -0
  451. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_mcp_circuit.py +0 -0
  452. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_mcp_client.py +0 -0
  453. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_model_selection_state.py +0 -0
  454. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_new_modules.py +0 -0
  455. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_ollama_stream_tools.py +0 -0
  456. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_output_rendering.py +0 -0
  457. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_packages_facade.py +0 -0
  458. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_pdf_report.py +0 -0
  459. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_pick_best_installed_model.py +0 -0
  460. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_plan_mode.py +0 -0
  461. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_plotly_html_output.py +0 -0
  462. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_preflight.py +0 -0
  463. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_privacy_feedback.py +0 -0
  464. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_project_aria.py +0 -0
  465. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_prompt_assembly.py +0 -0
  466. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_provider_integration.py +0 -0
  467. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_provider_registry.py +0 -0
  468. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_report_generator.py +0 -0
  469. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_research_protocol.py +0 -0
  470. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_research_quality.py +0 -0
  471. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_responsive_rendering.py +0 -0
  472. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_agent_loop.py +0 -0
  473. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_approval.py +0 -0
  474. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_bridge.py +0 -0
  475. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_bridge_fallback.py +0 -0
  476. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_checkpoints.py +0 -0
  477. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_gateway.py +0 -0
  478. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_run_store.py +0 -0
  479. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_tool_executor.py +0 -0
  480. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_runtime_worktrees.py +0 -0
  481. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_safety_permissions.py +0 -0
  482. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_safety_service.py +0 -0
  483. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_session_search.py +0 -0
  484. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_settings_service.py +0 -0
  485. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_skill_agent_binding.py +0 -0
  486. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_skill_catalog.py +0 -0
  487. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_startup_dashboard.py +0 -0
  488. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_streaming_pipeline.py +0 -0
  489. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_system_prompts.py +0 -0
  490. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_system_tools_output.py +0 -0
  491. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_team_synthesis.py +0 -0
  492. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_tool_policy.py +0 -0
  493. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_trading_service.py +0 -0
  494. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_tradingview_bridge.py +0 -0
  495. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_turn_planning.py +0 -0
  496. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_ui_completer_references.py +0 -0
  497. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_ui_console_theme.py +0 -0
  498. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_ui_input_box.py +0 -0
  499. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_ui_robot_banner.py +0 -0
  500. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_workspace_files.py +0 -0
  501. {aria_code-4.2.0 → aria_code-4.3.0}/tests/test_workspace_verify.py +0 -0
  502. {aria_code-4.2.0 → aria_code-4.3.0}/ui/__init__.py +0 -0
  503. {aria_code-4.2.0 → aria_code-4.3.0}/ui/banner.py +0 -0
  504. {aria_code-4.2.0 → aria_code-4.3.0}/ui/completer.py +0 -0
  505. {aria_code-4.2.0 → aria_code-4.3.0}/ui/console.py +0 -0
  506. {aria_code-4.2.0 → aria_code-4.3.0}/ui/image_render.py +0 -0
  507. {aria_code-4.2.0 → aria_code-4.3.0}/ui/input_box.py +0 -0
  508. {aria_code-4.2.0 → aria_code-4.3.0}/ui/picker.py +0 -0
  509. {aria_code-4.2.0 → aria_code-4.3.0}/ui/render/__init__.py +0 -0
  510. {aria_code-4.2.0 → aria_code-4.3.0}/ui/render/finance.py +0 -0
  511. {aria_code-4.2.0 → aria_code-4.3.0}/ui/render/market.py +0 -0
  512. {aria_code-4.2.0 → aria_code-4.3.0}/ui/render/output.py +0 -0
  513. {aria_code-4.2.0 → aria_code-4.3.0}/ui/render/responsive.py +0 -0
  514. {aria_code-4.2.0 → aria_code-4.3.0}/ui/render/team.py +0 -0
  515. {aria_code-4.2.0 → aria_code-4.3.0}/ui/robot.py +0 -0
  516. {aria_code-4.2.0 → aria_code-4.3.0}/ui/startup_dashboard.py +0 -0
  517. {aria_code-4.2.0 → aria_code-4.3.0}/workspace/__init__.py +0 -0
  518. {aria_code-4.2.0 → aria_code-4.3.0}/workspace/files.py +0 -0
  519. {aria_code-4.2.0 → aria_code-4.3.0}/workspace/verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 4.2.0
3
+ Version: 4.3.0
4
4
  Summary: AI-powered financial terminal — local LLM + multi-source market data
5
5
  License: BUSL-1.1
6
6
  Project-URL: Homepage, https://github.com/artherahq/aria-code
@@ -51,11 +51,16 @@ Provides-Extra: files
51
51
  Requires-Dist: pdfplumber>=0.11.0; extra == "files"
52
52
  Requires-Dist: pypdf>=4.3.0; extra == "files"
53
53
  Requires-Dist: python-docx>=1.1.2; extra == "files"
54
+ Requires-Dist: python-pptx>=1.0.2; extra == "files"
54
55
  Requires-Dist: openpyxl>=3.1.5; extra == "files"
55
56
  Requires-Dist: beautifulsoup4>=4.12.3; extra == "files"
56
57
  Requires-Dist: Pillow>=10.4.0; extra == "files"
57
58
  Provides-Extra: video
58
59
  Requires-Dist: opencv-python>=4.8.0; extra == "video"
60
+ Provides-Extra: video-analysis
61
+ Requires-Dist: faster-whisper>=1.0.0; extra == "video-analysis"
62
+ Provides-Extra: adk
63
+ Requires-Dist: google-adk>=2.6.3; extra == "adk"
59
64
  Provides-Extra: ibkr
60
65
  Requires-Dist: ib_insync>=0.9.86; extra == "ibkr"
61
66
  Provides-Extra: futu
@@ -76,6 +81,11 @@ Requires-Dist: longbridge>=1.0.22; extra == "brokers"
76
81
  Requires-Dist: alpaca-py>=0.35.0; extra == "brokers"
77
82
  Provides-Extra: backtest
78
83
  Requires-Dist: vectorbt>=0.26.2; extra == "backtest"
84
+ Provides-Extra: image-gen
85
+ Requires-Dist: torch>=2.2.0; extra == "image-gen"
86
+ Requires-Dist: diffusers>=0.30.0; extra == "image-gen"
87
+ Requires-Dist: transformers>=4.40.0; extra == "image-gen"
88
+ Requires-Dist: accelerate>=0.30.0; extra == "image-gen"
79
89
  Provides-Extra: web
80
90
  Requires-Dist: ddgs>=9.0; extra == "web"
81
91
  Provides-Extra: browser
@@ -100,6 +110,7 @@ Requires-Dist: duckdb>=0.10.3; extra == "full"
100
110
  Requires-Dist: pdfplumber>=0.11.0; extra == "full"
101
111
  Requires-Dist: pypdf>=4.3.0; extra == "full"
102
112
  Requires-Dist: python-docx>=1.1.2; extra == "full"
113
+ Requires-Dist: python-pptx>=1.0.2; extra == "full"
103
114
  Requires-Dist: openpyxl>=3.1.5; extra == "full"
104
115
  Requires-Dist: beautifulsoup4>=4.12.3; extra == "full"
105
116
  Requires-Dist: Pillow>=10.4.0; extra == "full"
@@ -112,6 +123,7 @@ Requires-Dist: duckdb>=0.10.3; extra == "all"
112
123
  Requires-Dist: pdfplumber>=0.11.0; extra == "all"
113
124
  Requires-Dist: pypdf>=4.3.0; extra == "all"
114
125
  Requires-Dist: python-docx>=1.1.2; extra == "all"
126
+ Requires-Dist: python-pptx>=1.0.2; extra == "all"
115
127
  Requires-Dist: openpyxl>=3.1.5; extra == "all"
116
128
  Requires-Dist: beautifulsoup4>=4.12.3; extra == "all"
117
129
  Requires-Dist: Pillow>=10.4.0; extra == "all"
@@ -223,6 +235,7 @@ $ aria-code
223
235
  | **83 commands** | Consolidated from ~150 — removed all LLM-replaceable commands; natural language handles the rest |
224
236
  | **LLM routing fix** | Model now knows it can call real-time data tools instead of saying "I don't have live data" |
225
237
  | **Unified agent loop** | CLI, SDK and self-host backend now run the *same* tested runtime (`runtime.run_turn`) — consistent provider routing, cloud→local fallback and tool execution on every surface |
238
+ | **Warehouse ERP agents** | Read-only carrier-sync, inbound-exception and inventory-health analysis with a dedicated operational signal scheme; see [data contract](docs/warehouse-erp-agents.md) |
226
239
  | **One-command install** | `pip install aria-code` (PyPI) or `npm install -g @artheras/aria-code` — verified clean on Python 3.10 / 3.11 / 3.12 |
227
240
 
228
241
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
@@ -315,6 +328,28 @@ mindmap
315
328
 
316
329
  ## 🚀 Quick Start
317
330
 
331
+ ### Option 0: Download the binary (no Python/Node install needed)
332
+
333
+ Every tagged release publishes standalone binaries for macOS (arm64), Windows (x64), and Linux (x64) — download from the [Releases page](https://github.com/artherahq/aria-code/releases), no Python or Node.js required:
334
+
335
+ ```bash
336
+ # macOS / Linux
337
+ chmod +x aria-code-macos-arm64 # or aria-code-linux-x64
338
+ ./aria-code-macos-arm64
339
+ ```
340
+ ```powershell
341
+ # Windows
342
+ .\aria-code-windows-x64.exe
343
+ ```
344
+
345
+ > The macOS build is signed + notarized only once `MACOS_CERTIFICATE_P12_BASE64` and the Apple notarization secrets are configured in repo Settings → Secrets (see `.github/workflows/build-native-binaries.yml`) — without them, CI still builds and smoke-tests successfully but produces an **unsigned** binary that macOS Gatekeeper will refuse to run. Until those secrets are added, get a signed macOS build by running `scripts/build_native_binary.sh --notarize` locally on a machine with the real Developer ID cert imported. Windows/Linux binaries need no signing step and run as-is.
346
+
347
+ Each release also publishes a standalone **`aria-code-mcp-*`** binary — the MCP server (see [Expose aria-code to other MCP clients](#expose-aria-code-to-other-mcp-clients) below) with no Python install needed:
348
+
349
+ ```bash
350
+ claude mcp add aria-code -- /path/to/aria-code-mcp-macos-arm64 # or -linux-x64 / -windows-x64.exe
351
+ ```
352
+
318
353
  ### Option 1: Bootstrap (fresh Mac / Linux — recommended)
319
354
 
320
355
  No Node.js, Python, or Xcode required. One command handles everything:
@@ -937,6 +972,75 @@ Connect any [Model Context Protocol](https://modelcontextprotocol.io) server:
937
972
  /mcp tools # All available MCP tools
938
973
  ```
939
974
 
975
+ ### Expose aria-code to other MCP clients
976
+
977
+ aria-code can also run *as* an MCP server, so Claude Code, Codex, or any
978
+ other MCP client can call into it directly:
979
+
980
+ - `aria.market.quote` / `aria.agent.team` / `aria.artifacts.list` — live quote + technicals, multi-agent research, generated artifacts (all read-only)
981
+ - `aria.skill.list` / `aria.skill.get` — discover and fetch the installed portable [SKILL.md](https://github.com/artherahq/aria-skills) workflows: reusable expert playbooks for UI design systems, anti-generic-AI-look design critique, trading-app patterns, equity research, backtest validation, and more. `aria.skill.list` takes an optional `query` to rank by relevance to your task; `aria.skill.get` returns the full workflow text for **you** to follow — skills are instruction documents, not executable tools, so nothing runs server-side. Each result carries an `integrity` field (`verified` for signed catalog skills, `unlocked` for local drop-ins) so you can see a skill's provenance before following it
982
+ - `aria.report.generate` — fetch data and generate a full HTML research report artifact for a symbol
983
+ - `aria.backtest.run` — run a historical strategy simulation (`buy_hold` or `sma_cross`) against real price history
984
+ - `aria.broker.positions` / `aria.broker.list_previews` — read account/positions and recent order previews for a configured broker (US/CN/HK/UK — see `/broker`)
985
+ - `aria.broker.preview_order` — build a risk-checked order preview. **Never places a live trade by itself** — execution requires either a human running `/trade confirm <preview_id>` in the aria-code terminal, or `aria.broker.confirm_order` below (off by default per broker)
986
+ - `aria.broker.confirm_order` — **execute a previously built order preview, for real.** Off by default for every broker. Refuses unconditionally unless (1) a human already ran `/trade allow-chat-confirm <broker_id>` at the aria-code terminal keyboard — retyping the exact broker id, not y/yes — to opt that specific broker into chat-confirmed execution (this opt-in can never be triggered from MCP/chat, only from the terminal), **and** (2) the call itself passes `confirmed: true`. Executions via this path are tagged `source: "chat_mcp"` in the trade audit log (`~/.aria-code/trade_audit.jsonl`) to distinguish them from terminal-confirmed trades. Run `/trade disallow-chat-confirm <broker_id>` at any time to turn it back off
987
+ - `aria.report.chart` — candlestick + MA20/50 chart PNG for a symbol
988
+ - `aria.report.indicator_chart` — candlestick + volume + RSI(14) + MACD(12,26,9) multi-panel chart PNG for a symbol
989
+ - `aria.report.comparison_chart` — normalized (base=100) % return comparison chart PNG across 2+ symbols
990
+ - `aria.report.allocation_chart` — pie chart PNG of a broker account's position weights by market value
991
+ - `aria.report.pdf` / `aria.report.docx` / `aria.report.pptx` — render a Markdown report to PDF, an editable Word document, or a slide deck (one slide per heading) — all chart/report tools save to your artifacts folder
992
+ - `aria.report.canva_design` / `aria.report.canva_upload_asset` — fill a Canva brand template with data (and optionally an uploaded image asset) and export a design draft (needs `/canva connect <client_id> <client_secret>` once — register an app at [canva.com/developers](https://www.canva.com/developers/) and have a brand template ready first; Canva has no API for creating a design from scratch, only autofilling an existing template)
993
+ - `aria.figma.read_file` / `aria.figma.comments` — read a Figma file's page/frame structure (depth-limited summary) and its comments (needs `/apikey set figma <personal_access_token>` once). Read-only — Figma has no public API for writing/creating designs from a script, only its in-app Plugin API can do that
994
+ - `aria.report.estimate_image_cost` — get an illustrative per-image cost estimate (USD) for OpenAI's `gpt-image-1` at a given size/quality, before generating. Free.
995
+ - `aria.report.generate_image` / `aria.report.edit_image` — generate a new image or transform an existing local photo via OpenAI's `gpt-image-1` (needs `/apikey set openai sk-...`). `edit_image` accepts an optional `mask_path` for inpainting — a mask PNG where transparent areas mark what to edit, opaque areas are preserved untouched. **Real per-call cost, billed the instant it succeeds** — both hard-refuse without `confirmed: true`, and calling `aria.report.estimate_image_cost` first is strongly recommended
996
+ - `aria.report.generate_image_local` / `aria.report.edit_image_local` — the same, entirely locally via a self-hosted SDXL-Turbo (no API key, no per-call cost; needs the optional `image_gen` extra and ~4GB of weights on first use)
997
+ - `aria.video.probe` / `aria.video.trim` / `aria.video.concat` / `aria.video.overlay_text` / `aria.video.overlay_audio` / `aria.video.convert` / `aria.video.change_speed` — deterministic local video editing via `ffmpeg` (no AI, no API key)
998
+ - `aria.video.transcribe` / `aria.video.detect_scenes` — local AI-assisted analysis: speech transcription (`faster-whisper`, needs the optional `video_analysis` extra) and scene-cut detection (`opencv`, needs the optional `video` extra) — both produce editing *decisions*, not new pixels
999
+ - `aria.video.generate_estimate` / `aria.video.generate_submit` / `aria.video.generate_status` — cloud AI text-to-video via Kling or Runway (`provider: "kling" | "runway"`). **Real per-request cost, billed the instant submission succeeds** — `generate_submit` hard-refuses without `confirmed: true`, and calling `generate_estimate` first is strongly recommended. Needs `/apikey set kling <access_key>:<secret_key>` or `/apikey set runway <key>`. No local/free option exists for this layer the way SDXL-Turbo covers images — see `video_editor.py`/`video_analysis.py` for the free local-only editing/analysis layers
1000
+
1001
+ ```bash
1002
+ python3 aria_mcp_server.py # dev, from the repo root
1003
+ # or, once installed: aria-code-mcp
1004
+ ```
1005
+
1006
+ Register with Claude Code:
1007
+
1008
+ ```bash
1009
+ claude mcp add aria-code -- python3 /path/to/aria-code/aria_mcp_server.py
1010
+ ```
1011
+
1012
+ Register with Codex (`~/.codex/config.toml`):
1013
+
1014
+ ```toml
1015
+ [mcp_servers.aria_code]
1016
+ command = "python3"
1017
+ args = ["/path/to/aria-code/aria_mcp_server.py"]
1018
+ ```
1019
+
1020
+ #### Want deeper A-share quant tools too? Register a second server, don't wait for us to add them here
1021
+
1022
+ This server intentionally does **not** re-expose Arthera's `quant_engine` quant
1023
+ tools (factor calculation, Bayesian-HMM regime detection, northbound-flow,
1024
+ Kelly position sizing, options pricing, pairs-trading stats, and a much
1025
+ deeper `run_backtest` than the one above — T+1 settlement, limit-up/down
1026
+ filtering, `sma_cross`/`rsi_mean_revert`/`momentum` strategies, CN_A or US
1027
+ market). That's a separate project (Arthera) with its own MCP server —
1028
+ `packages/quant_engine/mcp_server.py` — speaking the identical MCP
1029
+ 2024-11-05 stdio JSON-RPC protocol, so any client here can register it
1030
+ as a second, independent server rather than this one proxying it:
1031
+
1032
+ ```bash
1033
+ claude mcp add arthera-quant -- python3 /path/to/Arthera/packages/quant_engine/mcp_server.py
1034
+ ```
1035
+
1036
+ We keep these two separate on purpose, not as a gap to close later: a few of
1037
+ `quant_engine`'s tools (`get_ai_signal`, `get_predictions`,
1038
+ `get_market_insights`) call Arthera's own internal Alibaba Cloud service and
1039
+ simply won't work without that access, so folding them into this server
1040
+ would mean shipping tools that error out for anyone without Arthera's
1041
+ private infrastructure. If you don't have access to that repo, everything
1042
+ above this section still works standalone.
1043
+
940
1044
  ---
941
1045
 
942
1046
  ## ⚙️ Configuration
@@ -1021,7 +1125,7 @@ converts to Apache 2.0 four years after release.
1021
1125
 
1022
1126
  <p align="center">
1023
1127
  <a href="https://arthera.finance">Website</a> ·
1024
- <a href="https://github.com/Cinsoul/Arthera">Full Platform</a> ·
1128
+ <a href="https://github.com/artherahq/aria-code">Project Repository</a> ·
1025
1129
  <a href="https://github.com/artherahq/aria-code/issues">Issues</a> ·
1026
1130
  <a href="https://github.com/artherahq/aria-code/discussions">Discussions</a>
1027
1131
  </p>
@@ -90,6 +90,7 @@ $ aria-code
90
90
  | **83 commands** | Consolidated from ~150 — removed all LLM-replaceable commands; natural language handles the rest |
91
91
  | **LLM routing fix** | Model now knows it can call real-time data tools instead of saying "I don't have live data" |
92
92
  | **Unified agent loop** | CLI, SDK and self-host backend now run the *same* tested runtime (`runtime.run_turn`) — consistent provider routing, cloud→local fallback and tool execution on every surface |
93
+ | **Warehouse ERP agents** | Read-only carrier-sync, inbound-exception and inventory-health analysis with a dedicated operational signal scheme; see [data contract](docs/warehouse-erp-agents.md) |
93
94
  | **One-command install** | `pip install aria-code` (PyPI) or `npm install -g @artheras/aria-code` — verified clean on Python 3.10 / 3.11 / 3.12 |
94
95
 
95
96
  See [CHANGELOG.md](CHANGELOG.md) for the full history.
@@ -182,6 +183,28 @@ mindmap
182
183
 
183
184
  ## 🚀 Quick Start
184
185
 
186
+ ### Option 0: Download the binary (no Python/Node install needed)
187
+
188
+ Every tagged release publishes standalone binaries for macOS (arm64), Windows (x64), and Linux (x64) — download from the [Releases page](https://github.com/artherahq/aria-code/releases), no Python or Node.js required:
189
+
190
+ ```bash
191
+ # macOS / Linux
192
+ chmod +x aria-code-macos-arm64 # or aria-code-linux-x64
193
+ ./aria-code-macos-arm64
194
+ ```
195
+ ```powershell
196
+ # Windows
197
+ .\aria-code-windows-x64.exe
198
+ ```
199
+
200
+ > The macOS build is signed + notarized only once `MACOS_CERTIFICATE_P12_BASE64` and the Apple notarization secrets are configured in repo Settings → Secrets (see `.github/workflows/build-native-binaries.yml`) — without them, CI still builds and smoke-tests successfully but produces an **unsigned** binary that macOS Gatekeeper will refuse to run. Until those secrets are added, get a signed macOS build by running `scripts/build_native_binary.sh --notarize` locally on a machine with the real Developer ID cert imported. Windows/Linux binaries need no signing step and run as-is.
201
+
202
+ Each release also publishes a standalone **`aria-code-mcp-*`** binary — the MCP server (see [Expose aria-code to other MCP clients](#expose-aria-code-to-other-mcp-clients) below) with no Python install needed:
203
+
204
+ ```bash
205
+ claude mcp add aria-code -- /path/to/aria-code-mcp-macos-arm64 # or -linux-x64 / -windows-x64.exe
206
+ ```
207
+
185
208
  ### Option 1: Bootstrap (fresh Mac / Linux — recommended)
186
209
 
187
210
  No Node.js, Python, or Xcode required. One command handles everything:
@@ -804,6 +827,75 @@ Connect any [Model Context Protocol](https://modelcontextprotocol.io) server:
804
827
  /mcp tools # All available MCP tools
805
828
  ```
806
829
 
830
+ ### Expose aria-code to other MCP clients
831
+
832
+ aria-code can also run *as* an MCP server, so Claude Code, Codex, or any
833
+ other MCP client can call into it directly:
834
+
835
+ - `aria.market.quote` / `aria.agent.team` / `aria.artifacts.list` — live quote + technicals, multi-agent research, generated artifacts (all read-only)
836
+ - `aria.skill.list` / `aria.skill.get` — discover and fetch the installed portable [SKILL.md](https://github.com/artherahq/aria-skills) workflows: reusable expert playbooks for UI design systems, anti-generic-AI-look design critique, trading-app patterns, equity research, backtest validation, and more. `aria.skill.list` takes an optional `query` to rank by relevance to your task; `aria.skill.get` returns the full workflow text for **you** to follow — skills are instruction documents, not executable tools, so nothing runs server-side. Each result carries an `integrity` field (`verified` for signed catalog skills, `unlocked` for local drop-ins) so you can see a skill's provenance before following it
837
+ - `aria.report.generate` — fetch data and generate a full HTML research report artifact for a symbol
838
+ - `aria.backtest.run` — run a historical strategy simulation (`buy_hold` or `sma_cross`) against real price history
839
+ - `aria.broker.positions` / `aria.broker.list_previews` — read account/positions and recent order previews for a configured broker (US/CN/HK/UK — see `/broker`)
840
+ - `aria.broker.preview_order` — build a risk-checked order preview. **Never places a live trade by itself** — execution requires either a human running `/trade confirm <preview_id>` in the aria-code terminal, or `aria.broker.confirm_order` below (off by default per broker)
841
+ - `aria.broker.confirm_order` — **execute a previously built order preview, for real.** Off by default for every broker. Refuses unconditionally unless (1) a human already ran `/trade allow-chat-confirm <broker_id>` at the aria-code terminal keyboard — retyping the exact broker id, not y/yes — to opt that specific broker into chat-confirmed execution (this opt-in can never be triggered from MCP/chat, only from the terminal), **and** (2) the call itself passes `confirmed: true`. Executions via this path are tagged `source: "chat_mcp"` in the trade audit log (`~/.aria-code/trade_audit.jsonl`) to distinguish them from terminal-confirmed trades. Run `/trade disallow-chat-confirm <broker_id>` at any time to turn it back off
842
+ - `aria.report.chart` — candlestick + MA20/50 chart PNG for a symbol
843
+ - `aria.report.indicator_chart` — candlestick + volume + RSI(14) + MACD(12,26,9) multi-panel chart PNG for a symbol
844
+ - `aria.report.comparison_chart` — normalized (base=100) % return comparison chart PNG across 2+ symbols
845
+ - `aria.report.allocation_chart` — pie chart PNG of a broker account's position weights by market value
846
+ - `aria.report.pdf` / `aria.report.docx` / `aria.report.pptx` — render a Markdown report to PDF, an editable Word document, or a slide deck (one slide per heading) — all chart/report tools save to your artifacts folder
847
+ - `aria.report.canva_design` / `aria.report.canva_upload_asset` — fill a Canva brand template with data (and optionally an uploaded image asset) and export a design draft (needs `/canva connect <client_id> <client_secret>` once — register an app at [canva.com/developers](https://www.canva.com/developers/) and have a brand template ready first; Canva has no API for creating a design from scratch, only autofilling an existing template)
848
+ - `aria.figma.read_file` / `aria.figma.comments` — read a Figma file's page/frame structure (depth-limited summary) and its comments (needs `/apikey set figma <personal_access_token>` once). Read-only — Figma has no public API for writing/creating designs from a script, only its in-app Plugin API can do that
849
+ - `aria.report.estimate_image_cost` — get an illustrative per-image cost estimate (USD) for OpenAI's `gpt-image-1` at a given size/quality, before generating. Free.
850
+ - `aria.report.generate_image` / `aria.report.edit_image` — generate a new image or transform an existing local photo via OpenAI's `gpt-image-1` (needs `/apikey set openai sk-...`). `edit_image` accepts an optional `mask_path` for inpainting — a mask PNG where transparent areas mark what to edit, opaque areas are preserved untouched. **Real per-call cost, billed the instant it succeeds** — both hard-refuse without `confirmed: true`, and calling `aria.report.estimate_image_cost` first is strongly recommended
851
+ - `aria.report.generate_image_local` / `aria.report.edit_image_local` — the same, entirely locally via a self-hosted SDXL-Turbo (no API key, no per-call cost; needs the optional `image_gen` extra and ~4GB of weights on first use)
852
+ - `aria.video.probe` / `aria.video.trim` / `aria.video.concat` / `aria.video.overlay_text` / `aria.video.overlay_audio` / `aria.video.convert` / `aria.video.change_speed` — deterministic local video editing via `ffmpeg` (no AI, no API key)
853
+ - `aria.video.transcribe` / `aria.video.detect_scenes` — local AI-assisted analysis: speech transcription (`faster-whisper`, needs the optional `video_analysis` extra) and scene-cut detection (`opencv`, needs the optional `video` extra) — both produce editing *decisions*, not new pixels
854
+ - `aria.video.generate_estimate` / `aria.video.generate_submit` / `aria.video.generate_status` — cloud AI text-to-video via Kling or Runway (`provider: "kling" | "runway"`). **Real per-request cost, billed the instant submission succeeds** — `generate_submit` hard-refuses without `confirmed: true`, and calling `generate_estimate` first is strongly recommended. Needs `/apikey set kling <access_key>:<secret_key>` or `/apikey set runway <key>`. No local/free option exists for this layer the way SDXL-Turbo covers images — see `video_editor.py`/`video_analysis.py` for the free local-only editing/analysis layers
855
+
856
+ ```bash
857
+ python3 aria_mcp_server.py # dev, from the repo root
858
+ # or, once installed: aria-code-mcp
859
+ ```
860
+
861
+ Register with Claude Code:
862
+
863
+ ```bash
864
+ claude mcp add aria-code -- python3 /path/to/aria-code/aria_mcp_server.py
865
+ ```
866
+
867
+ Register with Codex (`~/.codex/config.toml`):
868
+
869
+ ```toml
870
+ [mcp_servers.aria_code]
871
+ command = "python3"
872
+ args = ["/path/to/aria-code/aria_mcp_server.py"]
873
+ ```
874
+
875
+ #### Want deeper A-share quant tools too? Register a second server, don't wait for us to add them here
876
+
877
+ This server intentionally does **not** re-expose Arthera's `quant_engine` quant
878
+ tools (factor calculation, Bayesian-HMM regime detection, northbound-flow,
879
+ Kelly position sizing, options pricing, pairs-trading stats, and a much
880
+ deeper `run_backtest` than the one above — T+1 settlement, limit-up/down
881
+ filtering, `sma_cross`/`rsi_mean_revert`/`momentum` strategies, CN_A or US
882
+ market). That's a separate project (Arthera) with its own MCP server —
883
+ `packages/quant_engine/mcp_server.py` — speaking the identical MCP
884
+ 2024-11-05 stdio JSON-RPC protocol, so any client here can register it
885
+ as a second, independent server rather than this one proxying it:
886
+
887
+ ```bash
888
+ claude mcp add arthera-quant -- python3 /path/to/Arthera/packages/quant_engine/mcp_server.py
889
+ ```
890
+
891
+ We keep these two separate on purpose, not as a gap to close later: a few of
892
+ `quant_engine`'s tools (`get_ai_signal`, `get_predictions`,
893
+ `get_market_insights`) call Arthera's own internal Alibaba Cloud service and
894
+ simply won't work without that access, so folding them into this server
895
+ would mean shipping tools that error out for anyone without Arthera's
896
+ private infrastructure. If you don't have access to that repo, everything
897
+ above this section still works standalone.
898
+
807
899
  ---
808
900
 
809
901
  ## ⚙️ Configuration
@@ -888,7 +980,7 @@ converts to Apache 2.0 four years after release.
888
980
 
889
981
  <p align="center">
890
982
  <a href="https://arthera.finance">Website</a> ·
891
- <a href="https://github.com/Cinsoul/Arthera">Full Platform</a> ·
983
+ <a href="https://github.com/artherahq/aria-code">Project Repository</a> ·
892
984
  <a href="https://github.com/artherahq/aria-code/issues">Issues</a> ·
893
985
  <a href="https://github.com/artherahq/aria-code/discussions">Discussions</a>
894
986
  </p>
@@ -0,0 +1 @@
1
+ """ADK application packages shipped as optional Aria Code integrations."""
@@ -0,0 +1 @@
1
+ """Read-only Aria market-research agent for Google ADK."""
@@ -0,0 +1,31 @@
1
+ """Google ADK entrypoint: ``adk web adk_apps`` discovers ``aria_research``."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import os
6
+
7
+ from google.adk.agents.llm_agent import Agent
8
+
9
+ from packages.adk_bridge import MarketResearchTools
10
+
11
+
12
+ _tools = MarketResearchTools()
13
+
14
+ root_agent = Agent(
15
+ model=os.getenv("ARIA_ADK_MODEL", "gemini-3.5-flash"),
16
+ name="aria_research",
17
+ description="A read-only market-research assistant for Aria Code and Arthera.",
18
+ instruction="""You are Aria Research, a careful financial-research assistant.
19
+
20
+ Use get_market_snapshot for live market facts and explicitly identify its data
21
+ quality, timestamp, warnings, and source limitations. Use get_market_data_health
22
+ when a data result is missing, stale, or conflicting. Do not invent prices,
23
+ returns, news, citations, positions, or tool output.
24
+
25
+ This agent is research-only. Never claim to execute, recommend, place, modify,
26
+ or schedule trades. Do not request credentials. State clearly that your output
27
+ is research assistance, not investment advice. For quantitative conclusions,
28
+ separate observed facts from hypotheses and mention material uncertainty.
29
+ """,
30
+ tools=[_tools.get_market_snapshot, _tools.get_market_data_health],
31
+ )
@@ -10,7 +10,7 @@ from __future__ import annotations
10
10
  import logging
11
11
  from abc import ABC, abstractmethod
12
12
  from dataclasses import dataclass, field
13
- from typing import Any, Callable, Dict, List, Optional
13
+ from typing import Any, Callable, Dict, List, Optional, Generator, AsyncGenerator
14
14
 
15
15
  logger = logging.getLogger(__name__)
16
16
 
@@ -86,14 +86,21 @@ class BaseAgent(ABC):
86
86
  llm_provider=None, # BaseLLMProvider 实例(可选,None 则用模板生成)
87
87
  data_router=None, # DataRouter 实例(可选)
88
88
  on_token: Optional[Callable[[str], None]] = None, # 流式 token 回调
89
+ on_thought: Optional[Callable[[str], None]] = None, # 思考过程回调
90
+ on_tool_start: Optional[Callable[[str, Dict], None]] = None, # 工具调用开始回调
91
+ on_tool_end: Optional[Callable[[str, Any], None]] = None, # 工具调用结束回调
89
92
  config: Optional[Dict] = None,
90
93
  lang: str = "zh", # user language: "zh" | "en"
91
94
  ):
92
95
  self.llm = llm_provider
93
96
  self.data = data_router
94
97
  self.on_token = on_token
98
+ self.on_thought = on_thought
99
+ self.on_tool_start = on_tool_start
100
+ self.on_tool_end = on_tool_end
95
101
  self.config = config or {}
96
102
  self.lang = lang
103
+ self.memory = [] # Short-term conversation history for multi-turn context
97
104
 
98
105
  async def fetch_data(self, symbol: str) -> Dict[str, Any]:
99
106
  """
@@ -127,14 +134,39 @@ class BaseAgent(ABC):
127
134
  )
128
135
  return ""
129
136
 
137
+ async def _execute_tool(self, tool_name: str, tool_args: Dict[str, Any]) -> str:
138
+ """
139
+ 执行本地工具或 MCP 工具(可被子类重写扩展)。
140
+ 实际项目中可将 aria-skills 暴露为工具。
141
+ """
142
+ if self.on_tool_start:
143
+ self.on_tool_start(tool_name, tool_args)
144
+
145
+ result = None
146
+ try:
147
+ # 路由到数据层或其他 MCP Client 执行
148
+ if self.data and hasattr(self.data, "execute_tool"):
149
+ result = await self.data.execute_tool(tool_name, tool_args)
150
+ else:
151
+ result = f"Error: Tool {tool_name} not implemented or data router unavailable."
152
+ except Exception as e:
153
+ result = f"Error executing {tool_name}: {e}"
154
+
155
+ if self.on_tool_end:
156
+ self.on_tool_end(tool_name, result)
157
+
158
+ import json
159
+ return json.dumps(result, ensure_ascii=False) if not isinstance(result, str) else result
160
+
130
161
  async def _call_llm(
131
162
  self,
132
163
  system: str,
133
164
  user: str,
134
165
  max_tokens: int = 800,
135
166
  quote: Optional[Dict[str, Any]] = None,
167
+ max_tool_loops: int = 5,
136
168
  ) -> str:
137
- """调用 LLM 生成分析文本(无 LLM 时返回空字符串)"""
169
+ """调用 LLM 生成分析文本,内置 Tool Calling 的执行循环"""
138
170
  if not self.llm:
139
171
  return ""
140
172
  # Inject language rule + post-training facts + data guard into system prompt
@@ -142,28 +174,83 @@ class BaseAgent(ABC):
142
174
  _data_warn = self._data_guard(quote or {})
143
175
  system = system + self._POST_TRAINING_FACTS + _lang_rule + _data_warn
144
176
  from providers.llm.base import Message
145
- messages = [
146
- Message(role="system", content=system),
147
- Message(role="user", content=user),
148
- ]
177
+
178
+ # 自动注入 DAG pipeline 中的 upstream context
179
+ if hasattr(self, "_current_data") and self._current_data:
180
+ upstream = self._current_data.get("upstream_context")
181
+ if upstream:
182
+ user += "\n\n## ⬆️ 团队/上游 Agent 提供的背景上下文 (Upstream Insights)\n"
183
+ user += "请在分析中参考以下来自其他专家 Agent 的核心观点:\n"
184
+ user += "\n".join(upstream)
185
+
186
+ # 融入历史记忆
187
+ if not self.memory:
188
+ messages = [
189
+ Message(role="system", content=system),
190
+ Message(role="user", content=user),
191
+ ]
192
+ else:
193
+ messages = list(self.memory)
194
+ messages.append(Message(role="user", content=user))
195
+
149
196
  full_text = ""
150
- try:
151
- async for event in self.llm.stream(
152
- messages, max_tokens=max_tokens
153
- ):
154
- t = event.get("type")
155
- if t == "token":
156
- tok = event.get("text", "")
157
- full_text += tok
158
- if self.on_token:
159
- self.on_token(tok)
160
- elif t == "error":
161
- logger.warning(f"[{self.name}] LLM 错误: {event.get('message')}")
162
- break
163
- except Exception as e:
164
- logger.warning(f"[{self.name}] LLM 调用失败: {e}")
197
+ loop_count = 0
198
+
199
+ while loop_count < max_tool_loops:
200
+ loop_count += 1
201
+ current_text = ""
202
+ tool_calls = []
203
+
204
+ try:
205
+ async for event in self.llm.stream(
206
+ messages, max_tokens=max_tokens
207
+ ):
208
+ t = event.get("type")
209
+ if t == "token":
210
+ tok = event.get("text", "")
211
+ current_text += tok
212
+ full_text += tok
213
+ if self.on_token:
214
+ self.on_token(tok)
215
+ elif t == "thought" and self.on_thought:
216
+ self.on_thought(event.get("text", ""))
217
+ elif t == "tool_call":
218
+ # 记录工具调用意图
219
+ tool_calls.append({
220
+ "name": event.get("name"),
221
+ "args": event.get("args", {})
222
+ })
223
+ elif t == "tool_start" and self.on_tool_start:
224
+ self.on_tool_start(event.get("tool_name", ""), event.get("tool_args", {}))
225
+ elif t == "tool_end" and self.on_tool_end:
226
+ self.on_tool_end(event.get("tool_name", ""), event.get("tool_result", None))
227
+ elif t == "error":
228
+ logger.warning(f"[{self.name}] LLM 错误: {event.get('message')}")
229
+ break
230
+ except Exception as e:
231
+ logger.warning(f"[{self.name}] LLM 调用失败: {e}")
232
+ break
233
+
234
+ # 将当前 Assistant 的回复加入消息流
235
+ messages.append(Message(role="assistant", content=current_text))
236
+
237
+ # 如果没有工具调用,说明 LLM 完成了最终回答,跳出循环
238
+ if not tool_calls:
239
+ break
240
+
241
+ # 有工具调用,则逐一执行,并把结果喂回 LLM
242
+ for tc in tool_calls:
243
+ tool_res = await self._execute_tool(tc["name"], tc["args"])
244
+ # 注意:实际 provider 中 Message 结构可能需要 tool_call_id
245
+ # 这里假设通用 Message 能够携带 role="tool"
246
+ messages.append(Message(role="tool", name=tc["name"], content=tool_res))
247
+
248
+ # 更新短期记忆
249
+ self.memory = messages
250
+
165
251
  return full_text.strip()
166
252
 
253
+
167
254
  @abstractmethod
168
255
  async def analyze(self, symbol: str, data: Dict[str, Any]) -> AgentResult:
169
256
  """
@@ -4,9 +4,19 @@ agents/financial/fundamental.py — 基本面分析 Agent
4
4
  分析:PE/PB/ROE、营收增速、竞争壁垒、估值水位。
5
5
  """
6
6
  from __future__ import annotations
7
+ import os
8
+ import sys
7
9
  from typing import Any, Dict, List, Optional
8
10
  from ..base import BaseAgent, AgentResult
9
11
 
12
+ # 动态加载 aria_tools 中的 MCP 工具
13
+ sys.path.append("/Users/mac/Desktop/aria-code/packages")
14
+ try:
15
+ from aria_tools.financial.factors import run_factor_research
16
+ except ImportError:
17
+ async def run_factor_research(*args, **kwargs) -> str:
18
+ return "Error: run_factor_research tool is not available."
19
+
10
20
 
11
21
  class FundamentalAgent(BaseAgent):
12
22
  name = "fundamental"
@@ -19,6 +29,19 @@ class FundamentalAgent(BaseAgent):
19
29
  "Be data-driven. End with: UNDERVALUED / FAIRLY_VALUED / OVERVALUED."
20
30
  )
21
31
 
32
+ async def _execute_tool(self, tool_name: str, tool_args: Dict[str, Any]) -> str:
33
+ """拦截 factor_research 的调用,其他的交给基类"""
34
+ if tool_name == "run_factor_research":
35
+ if self.on_tool_start:
36
+ self.on_tool_start(tool_name, tool_args)
37
+ res = await run_factor_research(**tool_args)
38
+ if self.on_tool_end:
39
+ self.on_tool_end(tool_name, res)
40
+ import json
41
+ return json.dumps({"result": res}, ensure_ascii=False)
42
+
43
+ return await super()._execute_tool(tool_name, tool_args)
44
+
22
45
  async def fetch_data(self, symbol: str) -> Dict[str, Any]:
23
46
  data = await super().fetch_data(symbol)
24
47
  if self.data:
@@ -72,7 +95,12 @@ class FundamentalAgent(BaseAgent):
72
95
  "3. Growth outlook (revenue/earnings)\n"
73
96
  "4. Balance sheet and dividend\n"
74
97
  "5. Competitive moat\n"
75
- "Conclusion: UNDERVALUED / FAIRLY_VALUED / OVERVALUED"
98
+ "Conclusion: UNDERVALUED / FAIRLY_VALUED / OVERVALUED\n\n"
99
+ "## Available Tools\n"
100
+ "You have access to a tool named `run_factor_research` to evaluate factor validity.\n"
101
+ "If you need to evaluate a factor (like pe, pb, roe), output exactly in this format:\n"
102
+ "{\"type\": \"tool_call\", \"name\": \"run_factor_research\", \"args\": {\"factor_name\": \"pe\"}}\n"
103
+ "Wait for the tool result before concluding."
76
104
  )
77
105
 
78
106
  analysis = await self._call_llm(self._SYSTEM, prompt, max_tokens=500, quote=quote)
@@ -14,6 +14,17 @@ except ImportError:
14
14
  _HAS_NP = False
15
15
  np = None # type: ignore[assignment]
16
16
 
17
+ import os
18
+ import sys
19
+ import asyncio
20
+
21
+ # 动态加载 aria_tools 中的 MCP 工具
22
+ sys.path.append("/Users/mac/Desktop/aria-code/packages")
23
+ try:
24
+ from aria_tools.financial.risk_tools import run_risk_profile
25
+ except ImportError:
26
+ pass
27
+
17
28
 
18
29
  class RiskAgent(BaseAgent):
19
30
  name = "risk"
@@ -26,6 +37,19 @@ class RiskAgent(BaseAgent):
26
37
  "POSITION: <percentage> (e.g. POSITION: 10%)."
27
38
  )
28
39
 
40
+ async def _execute_tool(self, tool_name: str, tool_args: Dict[str, Any]) -> str:
41
+ """拦截 risk_profile 的调用"""
42
+ if tool_name == "run_risk_profile":
43
+ if self.on_tool_start:
44
+ self.on_tool_start(tool_name, tool_args)
45
+ res = await run_risk_profile(**tool_args)
46
+ if self.on_tool_end:
47
+ self.on_tool_end(tool_name, res)
48
+ import json
49
+ return json.dumps({"result": res}, ensure_ascii=False)
50
+
51
+ return await super()._execute_tool(tool_name, tool_args)
52
+
29
53
  async def fetch_data(self, symbol: str) -> Dict[str, Any]:
30
54
  data = await super().fetch_data(symbol)
31
55
  if self.data:
@@ -56,7 +80,12 @@ class RiskAgent(BaseAgent):
56
80
  "3. Liquidity adequacy\n"
57
81
  "4. Tail risk and black swan exposure\n"
58
82
  "5. Recommended position size for a diversified portfolio\n"
59
- "Output format: Risk Score: X/10\nPOSITION: Y%"
83
+ "Output format: Risk Score: X/10\nPOSITION: Y%\n\n"
84
+ "## Available Tools\n"
85
+ "You have access to a tool named `run_risk_profile` to run stress tests.\n"
86
+ "If you need to evaluate tail risk or run a stress test, output exactly in this format:\n"
87
+ "{\"type\": \"tool_call\", \"name\": \"run_risk_profile\", \"args\": {\"symbol\": \"AAPL\"}}\n"
88
+ "Wait for the tool result before concluding."
60
89
  )
61
90
 
62
91
  analysis = await self._call_llm(self._SYSTEM, prompt, max_tokens=400, quote=quote)
@@ -51,6 +51,7 @@ _try_import_builtin("agents.financial.debate", "debate")
51
51
  _try_import_builtin("agents.financial.earnings", "earnings")
52
52
  _try_import_builtin("agents.financial.sector", "sector")
53
53
  _try_import_builtin("agents.portfolio_agent", "portfolio")
54
+ _try_import_builtin("agents.supervisor", "supervisor")
54
55
 
55
56
  # ── 经营权共创平台 Agent 包 ────────────────────────────────────────────────────
56
57
  _try_import_builtin("agents.realty.asset_diagnosis", "asset_diagnosis")
@@ -63,6 +64,11 @@ _try_import_builtin("agents.realty.fulfillment_risk", "fulfillment_risk")
63
64
  _try_import_builtin("agents.realty.ops_optimize", "ops_optimize")
64
65
  _try_import_builtin("agents.realty.exit_settlement", "exit_settlement")
65
66
 
67
+ # ── 海外仓 ERP Agent 包 ───────────────────────────────────────────────────────
68
+ _try_import_builtin("agents.warehouse.logistics_sync", "warehouse_logistics_sync")
69
+ _try_import_builtin("agents.warehouse.inbound_exceptions", "warehouse_inbound_exceptions")
70
+ _try_import_builtin("agents.warehouse.inventory_health", "warehouse_inventory_health")
71
+
66
72
 
67
73
  class AgentRegistry:
68
74
  """