aria-code 0.52.0__py3-none-any.whl

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 (478) hide show
  1. aria_code/__init__.py +42 -0
  2. aria_code/_version.py +20 -0
  3. aria_code/adk_apps/__init__.py +1 -0
  4. aria_code/adk_apps/aria_code_review/__init__.py +1 -0
  5. aria_code/adk_apps/aria_code_review/agent.py +32 -0
  6. aria_code/adk_apps/aria_research/__init__.py +1 -0
  7. aria_code/adk_apps/aria_research/agent.py +31 -0
  8. aria_code/agents/__init__.py +34 -0
  9. aria_code/agents/base.py +318 -0
  10. aria_code/agents/code_review.py +200 -0
  11. aria_code/agents/deep/__init__.py +37 -0
  12. aria_code/agents/deep/calibration_loop.py +144 -0
  13. aria_code/agents/deep/critic.py +125 -0
  14. aria_code/agents/deep/deepen.py +193 -0
  15. aria_code/agents/deep/models.py +149 -0
  16. aria_code/agents/deep/pipeline.py +164 -0
  17. aria_code/agents/deep/quant_fusion.py +192 -0
  18. aria_code/agents/deep/themes.py +95 -0
  19. aria_code/agents/deep/tiers.py +106 -0
  20. aria_code/agents/engineering/__init__.py +14 -0
  21. aria_code/agents/engineering/coder.py +222 -0
  22. aria_code/agents/engineering/tester.py +145 -0
  23. aria_code/agents/financial/__init__.py +21 -0
  24. aria_code/agents/financial/cashflow_burn.py +119 -0
  25. aria_code/agents/financial/catalyst.py +279 -0
  26. aria_code/agents/financial/corporate_finance.py +175 -0
  27. aria_code/agents/financial/debate.py +224 -0
  28. aria_code/agents/financial/earnings.py +303 -0
  29. aria_code/agents/financial/fundamental.py +191 -0
  30. aria_code/agents/financial/macro.py +99 -0
  31. aria_code/agents/financial/news.py +207 -0
  32. aria_code/agents/financial/risk.py +165 -0
  33. aria_code/agents/financial/sector.py +279 -0
  34. aria_code/agents/financial/strategist.py +121 -0
  35. aria_code/agents/financial/stripe_revenue.py +127 -0
  36. aria_code/agents/financial/synthesis.py +274 -0
  37. aria_code/agents/financial/technical.py +258 -0
  38. aria_code/agents/orchestrator.py +44 -0
  39. aria_code/agents/portfolio_agent.py +363 -0
  40. aria_code/agents/realty/__init__.py +62 -0
  41. aria_code/agents/realty/asset_diagnosis.py +152 -0
  42. aria_code/agents/realty/business_match.py +166 -0
  43. aria_code/agents/realty/cashflow_verify.py +209 -0
  44. aria_code/agents/realty/contract_rules.py +210 -0
  45. aria_code/agents/realty/energy_anomaly.py +189 -0
  46. aria_code/agents/realty/exit_settlement.py +208 -0
  47. aria_code/agents/realty/fulfillment_risk.py +206 -0
  48. aria_code/agents/realty/ops_optimize.py +160 -0
  49. aria_code/agents/realty/revenue_share.py +215 -0
  50. aria_code/agents/registry.py +158 -0
  51. aria_code/agents/signal_scheme.py +111 -0
  52. aria_code/agents/sports/__init__.py +0 -0
  53. aria_code/agents/sports/football_agent.py +197 -0
  54. aria_code/agents/supervisor.py +113 -0
  55. aria_code/agents/team.py +492 -0
  56. aria_code/agents/warehouse/__init__.py +25 -0
  57. aria_code/agents/warehouse/contracts.py +26 -0
  58. aria_code/agents/warehouse/dashboard.py +155 -0
  59. aria_code/agents/warehouse/fulfillment_leadtime.py +95 -0
  60. aria_code/agents/warehouse/inbound_exceptions.py +25 -0
  61. aria_code/agents/warehouse/inventory_health.py +24 -0
  62. aria_code/agents/warehouse/local_run.py +71 -0
  63. aria_code/agents/warehouse/local_snapshot.py +132 -0
  64. aria_code/agents/warehouse/logistics_cost.py +84 -0
  65. aria_code/agents/warehouse/logistics_sync.py +21 -0
  66. aria_code/agents/warehouse/workflow.py +31 -0
  67. aria_code/aliyun_data_client.py +4 -0
  68. aria_code/apps/README.md +12 -0
  69. aria_code/apps/__init__.py +2 -0
  70. aria_code/apps/channels/README.md +15 -0
  71. aria_code/apps/channels/__init__.py +17 -0
  72. aria_code/apps/channels/intake.py +92 -0
  73. aria_code/apps/channels/registry.py +95 -0
  74. aria_code/apps/channels/tradingview.py +94 -0
  75. aria_code/apps/cli/README.md +13 -0
  76. aria_code/apps/cli/__init__.py +2 -0
  77. aria_code/apps/cli/_optional.py +120 -0
  78. aria_code/apps/cli/bootstrap.py +145 -0
  79. aria_code/apps/cli/broker_render.py +206 -0
  80. aria_code/apps/cli/codegen_paths.py +29 -0
  81. aria_code/apps/cli/commands/__init__.py +16 -0
  82. aria_code/apps/cli/commands/_business_render.py +78 -0
  83. aria_code/apps/cli/commands/_ui.py +71 -0
  84. aria_code/apps/cli/commands/analysis_cmds.py +369 -0
  85. aria_code/apps/cli/commands/ashare_prediction_cmds.py +327 -0
  86. aria_code/apps/cli/commands/auth_cmds.py +239 -0
  87. aria_code/apps/cli/commands/backtest_cmds.py +2543 -0
  88. aria_code/apps/cli/commands/broker_cmds.py +1234 -0
  89. aria_code/apps/cli/commands/business_workflow_cmds.py +319 -0
  90. aria_code/apps/cli/commands/canvas_cmds.py +77 -0
  91. aria_code/apps/cli/commands/catalog.py +87 -0
  92. aria_code/apps/cli/commands/core_cmds.py +2520 -0
  93. aria_code/apps/cli/commands/data_cmds.py +457 -0
  94. aria_code/apps/cli/commands/diagnostic_cmds.py +230 -0
  95. aria_code/apps/cli/commands/diagnostic_ops_cmds.py +813 -0
  96. aria_code/apps/cli/commands/file_cmds.py +312 -0
  97. aria_code/apps/cli/commands/finance_service_cmds.py +60 -0
  98. aria_code/apps/cli/commands/fx_commodity_cmds.py +123 -0
  99. aria_code/apps/cli/commands/market.py +434 -0
  100. aria_code/apps/cli/commands/market_cmds.py +1381 -0
  101. aria_code/apps/cli/commands/market_context.py +425 -0
  102. aria_code/apps/cli/commands/market_render.py +7 -0
  103. aria_code/apps/cli/commands/model_cmds.py +2153 -0
  104. aria_code/apps/cli/commands/ops_cmds.py +721 -0
  105. aria_code/apps/cli/commands/orchestrator_cmds.py +179 -0
  106. aria_code/apps/cli/commands/pdf_export_cmds.py +125 -0
  107. aria_code/apps/cli/commands/portfolio_cmds.py +1278 -0
  108. aria_code/apps/cli/commands/report.py +437 -0
  109. aria_code/apps/cli/commands/scaffold_templates.py +617 -0
  110. aria_code/apps/cli/commands/session_cmds.py +236 -0
  111. aria_code/apps/cli/commands/session_ux_cmds.py +359 -0
  112. aria_code/apps/cli/commands/team.py +669 -0
  113. aria_code/apps/cli/commands/team_render.py +8 -0
  114. aria_code/apps/cli/commands/ui_cmds.py +401 -0
  115. aria_code/apps/cli/commands/warehouse_cmds.py +79 -0
  116. aria_code/apps/cli/commands/workflow_cmds.py +480 -0
  117. aria_code/apps/cli/commands/workspace_cmds.py +1494 -0
  118. aria_code/apps/cli/config_paths.py +73 -0
  119. aria_code/apps/cli/config_store.py +78 -0
  120. aria_code/apps/cli/constants.py +88 -0
  121. aria_code/apps/cli/context.py +34 -0
  122. aria_code/apps/cli/deterministic.py +191 -0
  123. aria_code/apps/cli/direct.py +48 -0
  124. aria_code/apps/cli/finance_service_catalog.py +111 -0
  125. aria_code/apps/cli/football_reports.py +231 -0
  126. aria_code/apps/cli/github_app_auth.py +135 -0
  127. aria_code/apps/cli/google_login.py +196 -0
  128. aria_code/apps/cli/handlers/__init__.py +11 -0
  129. aria_code/apps/cli/handlers/broker_handlers.py +122 -0
  130. aria_code/apps/cli/handlers/chart_handlers.py +1309 -0
  131. aria_code/apps/cli/handlers/market_handlers.py +2513 -0
  132. aria_code/apps/cli/handlers/realty_handlers.py +114 -0
  133. aria_code/apps/cli/handlers/sports_handlers.py +22 -0
  134. aria_code/apps/cli/handlers/strategy_advice.py +82 -0
  135. aria_code/apps/cli/helpers.py +302 -0
  136. aria_code/apps/cli/hooks.py +180 -0
  137. aria_code/apps/cli/i18n.py +297 -0
  138. aria_code/apps/cli/intent.py +136 -0
  139. aria_code/apps/cli/intent_router.py +276 -0
  140. aria_code/apps/cli/intent_signals.py +344 -0
  141. aria_code/apps/cli/lifecycle_hooks.py +48 -0
  142. aria_code/apps/cli/local_tool_schemas.py +536 -0
  143. aria_code/apps/cli/main.py +29 -0
  144. aria_code/apps/cli/market_metadata.py +135 -0
  145. aria_code/apps/cli/market_universe.py +487 -0
  146. aria_code/apps/cli/message_processing.py +310 -0
  147. aria_code/apps/cli/model_catalog.py +620 -0
  148. aria_code/apps/cli/pdf_report.py +977 -0
  149. aria_code/apps/cli/plan_mode.py +139 -0
  150. aria_code/apps/cli/plotly_html.py +15 -0
  151. aria_code/apps/cli/prediction_feedback.py +202 -0
  152. aria_code/apps/cli/preflight.py +502 -0
  153. aria_code/apps/cli/project_aria.py +60 -0
  154. aria_code/apps/cli/prompt_assembly.py +59 -0
  155. aria_code/apps/cli/prompts/__init__.py +0 -0
  156. aria_code/apps/cli/prompts/coding.py +53 -0
  157. aria_code/apps/cli/prompts/select.py +142 -0
  158. aria_code/apps/cli/prompts/system_prompts.py +552 -0
  159. aria_code/apps/cli/prompts/ui.py +436 -0
  160. aria_code/apps/cli/provider_endpoints.py +237 -0
  161. aria_code/apps/cli/provider_keys.py +73 -0
  162. aria_code/apps/cli/providers/__init__.py +1 -0
  163. aria_code/apps/cli/providers/base.py +521 -0
  164. aria_code/apps/cli/providers/chat_routing.py +128 -0
  165. aria_code/apps/cli/providers/collaboration.py +98 -0
  166. aria_code/apps/cli/providers/llm/__init__.py +1 -0
  167. aria_code/apps/cli/providers/llm/offline_responses.py +68 -0
  168. aria_code/apps/cli/providers/llm/ollama_stream.py +1594 -0
  169. aria_code/apps/cli/providers/llm/response_cache.py +60 -0
  170. aria_code/apps/cli/providers/llm/sse_stream.py +257 -0
  171. aria_code/apps/cli/providers/runtime_bridge.py +353 -0
  172. aria_code/apps/cli/providers/vertexai_stream.py +316 -0
  173. aria_code/apps/cli/runtime_consumer.py +657 -0
  174. aria_code/apps/cli/sandbox.py +32 -0
  175. aria_code/apps/cli/session_export.py +120 -0
  176. aria_code/apps/cli/session_jsonl.py +208 -0
  177. aria_code/apps/cli/session_store.py +112 -0
  178. aria_code/apps/cli/skills_catalog.py +273 -0
  179. aria_code/apps/cli/todo_tracker.py +190 -0
  180. aria_code/apps/cli/tool_executor.py +823 -0
  181. aria_code/apps/cli/tool_registry.py +34 -0
  182. aria_code/apps/cli/tool_scope.py +106 -0
  183. aria_code/apps/cli/tools/__init__.py +40 -0
  184. aria_code/apps/cli/tools/context.py +46 -0
  185. aria_code/apps/cli/tools/file_tools.py +180 -0
  186. aria_code/apps/cli/tools/market_tools.py +620 -0
  187. aria_code/apps/cli/tools/notebook_tools.py +111 -0
  188. aria_code/apps/cli/tools/system_tools.py +726 -0
  189. aria_code/apps/cli/tools/write_tools.py +845 -0
  190. aria_code/apps/cli/tradingview_bridge.py +529 -0
  191. aria_code/apps/cli/turn_planning.py +137 -0
  192. aria_code/apps/cli/update_check.py +153 -0
  193. aria_code/apps/cli/utils/__init__.py +0 -0
  194. aria_code/apps/cli/utils/market_detect.py +1597 -0
  195. aria_code/apps/daemon/README.md +14 -0
  196. aria_code/apps/vscode/README.md +115 -0
  197. aria_code/apps/vscode/package.json +70 -0
  198. aria_code/aria_cli.py +6743 -0
  199. aria_code/aria_daemon.py +1398 -0
  200. aria_code/aria_feishu_bot.py +1423 -0
  201. aria_code/aria_mcp_server.py +7 -0
  202. aria_code/aria_relay_client.py +4 -0
  203. aria_code/aria_relay_server.py +490 -0
  204. aria_code/aria_telegram_bot.py +202 -0
  205. aria_code/ariarc.py +385 -0
  206. aria_code/artifacts.py +581 -0
  207. aria_code/backtest_engine.py +4 -0
  208. aria_code/backtest_report.py +4 -0
  209. aria_code/brokers/__init__.py +78 -0
  210. aria_code/brokers/automation.py +193 -0
  211. aria_code/brokers/base.py +231 -0
  212. aria_code/brokers/capabilities.py +264 -0
  213. aria_code/brokers/cn/__init__.py +10 -0
  214. aria_code/brokers/cn/easytrader_broker.py +193 -0
  215. aria_code/brokers/cn/futu_broker.py +194 -0
  216. aria_code/brokers/cn/longbridge_broker.py +190 -0
  217. aria_code/brokers/cn/tiger_broker.py +196 -0
  218. aria_code/brokers/cn/xtquant_broker.py +225 -0
  219. aria_code/brokers/config.py +414 -0
  220. aria_code/brokers/intl/__init__.py +5 -0
  221. aria_code/brokers/intl/alpaca_broker.py +183 -0
  222. aria_code/brokers/intl/ibkr_broker.py +215 -0
  223. aria_code/brokers/intl/trading212_broker.py +183 -0
  224. aria_code/brokers/intl/webull_broker.py +156 -0
  225. aria_code/brokers/paper_broker.py +266 -0
  226. aria_code/brokers/planning.py +296 -0
  227. aria_code/brokers/registry.py +213 -0
  228. aria_code/brokers/trading.py +267 -0
  229. aria_code/canva_client.py +4 -0
  230. aria_code/change_store.py +127 -0
  231. aria_code/clients/__init__.py +0 -0
  232. aria_code/clients/aliyun_data_client.py +660 -0
  233. aria_code/clients/aria_relay_client.py +182 -0
  234. aria_code/clients/canva_client.py +284 -0
  235. aria_code/clients/figma_client.py +100 -0
  236. aria_code/clients/football_data_client.py +1671 -0
  237. aria_code/clients/kling_video_client.py +182 -0
  238. aria_code/clients/market_data_client.py +1976 -0
  239. aria_code/clients/openai_image_client.py +242 -0
  240. aria_code/clients/runway_video_client.py +157 -0
  241. aria_code/clients/warehouse_erp_client.py +105 -0
  242. aria_code/cloud_memory.py +181 -0
  243. aria_code/command_safety.py +19 -0
  244. aria_code/computer_use_tools.py +4 -0
  245. aria_code/dashboard_generator.py +579 -0
  246. aria_code/data_analysis_tools.py +4 -0
  247. aria_code/data_cleaner.py +483 -0
  248. aria_code/data_service.py +513 -0
  249. aria_code/datasources/__init__.py +23 -0
  250. aria_code/datasources/base.py +166 -0
  251. aria_code/datasources/router.py +253 -0
  252. aria_code/datasources/sources/__init__.py +15 -0
  253. aria_code/datasources/sources/akshare_source.py +269 -0
  254. aria_code/datasources/sources/alpha_vantage_source.py +203 -0
  255. aria_code/datasources/sources/edgar_source.py +219 -0
  256. aria_code/datasources/sources/finnhub_source.py +198 -0
  257. aria_code/datasources/sources/fred_source.py +223 -0
  258. aria_code/datasources/sources/tushare_source.py +143 -0
  259. aria_code/datasources/sources/web_scraper_source.py +278 -0
  260. aria_code/datasources/sources/world_bank_source.py +206 -0
  261. aria_code/datasources/sources/yfinance_source.py +152 -0
  262. aria_code/demo_player.py +207 -0
  263. aria_code/doctor.py +813 -0
  264. aria_code/domain/__init__.py +0 -0
  265. aria_code/domain/backtest_engine.py +354 -0
  266. aria_code/domain/backtest_report.py +472 -0
  267. aria_code/domain/finance_formulas.py +389 -0
  268. aria_code/domain/portfolio_ledger.py +307 -0
  269. aria_code/domain/strategy_vault.py +421 -0
  270. aria_code/evals/__init__.py +37 -0
  271. aria_code/evals/harness.py +598 -0
  272. aria_code/evals/runner.py +238 -0
  273. aria_code/external_agent_runner.py +115 -0
  274. aria_code/figma_client.py +4 -0
  275. aria_code/file_analysis_tools.py +4 -0
  276. aria_code/finance_formulas.py +4 -0
  277. aria_code/football_data_client.py +4 -0
  278. aria_code/image_gen_tools.py +4 -0
  279. aria_code/intent_classifier.py +386 -0
  280. aria_code/kling_video_client.py +4 -0
  281. aria_code/licensing.py +151 -0
  282. aria_code/local_finance_tools.py +4 -0
  283. aria_code/local_image_provider.py +4 -0
  284. aria_code/local_llm_provider.py +4 -0
  285. aria_code/macro_tools.py +4 -0
  286. aria_code/markdown_pdf.py +289 -0
  287. aria_code/market_data_client.py +4 -0
  288. aria_code/mcp_client.py +639 -0
  289. aria_code/memory_manager.py +246 -0
  290. aria_code/model_capability.py +486 -0
  291. aria_code/notification_tools.py +4 -0
  292. aria_code/openai_image_client.py +4 -0
  293. aria_code/packages/__init__.py +23 -0
  294. aria_code/packages/adk_bridge/__init__.py +11 -0
  295. aria_code/packages/adk_bridge/code_review_tools.py +49 -0
  296. aria_code/packages/adk_bridge/market_tools.py +125 -0
  297. aria_code/packages/aria_agents/__init__.py +5 -0
  298. aria_code/packages/aria_agents/manifest.py +78 -0
  299. aria_code/packages/aria_core/__init__.py +34 -0
  300. aria_code/packages/aria_core/architecture.py +269 -0
  301. aria_code/packages/aria_core/export.py +147 -0
  302. aria_code/packages/aria_core/manifest.py +65 -0
  303. aria_code/packages/aria_core/paths.py +57 -0
  304. aria_code/packages/aria_core/secure_file.py +68 -0
  305. aria_code/packages/aria_infra/__init__.py +15 -0
  306. aria_code/packages/aria_infra/arthera.py +52 -0
  307. aria_code/packages/aria_infra/doctor.py +246 -0
  308. aria_code/packages/aria_infra/product.py +40 -0
  309. aria_code/packages/aria_mcp/__init__.py +25 -0
  310. aria_code/packages/aria_mcp/bridge.py +201 -0
  311. aria_code/packages/aria_mcp/circuit.py +82 -0
  312. aria_code/packages/aria_mcp/config.py +111 -0
  313. aria_code/packages/aria_mcp/installer.py +95 -0
  314. aria_code/packages/aria_mcp/server.py +1550 -0
  315. aria_code/packages/aria_mcp/tools.py +81 -0
  316. aria_code/packages/aria_sdk/__init__.py +19 -0
  317. aria_code/packages/aria_sdk/client.py +396 -0
  318. aria_code/packages/aria_sdk/providers.py +70 -0
  319. aria_code/packages/aria_sdk/streaming.py +79 -0
  320. aria_code/packages/aria_sdk/types.py +86 -0
  321. aria_code/packages/aria_services/__init__.py +92 -0
  322. aria_code/packages/aria_services/cache.py +60 -0
  323. aria_code/packages/aria_services/context.py +356 -0
  324. aria_code/packages/aria_services/context_checkpoints.py +157 -0
  325. aria_code/packages/aria_services/data.py +11 -0
  326. aria_code/packages/aria_services/provider_health.py +268 -0
  327. aria_code/packages/aria_services/references.py +247 -0
  328. aria_code/packages/aria_services/registry.py +249 -0
  329. aria_code/packages/aria_services/research_protocol.py +57 -0
  330. aria_code/packages/aria_services/research_quality.py +186 -0
  331. aria_code/packages/aria_services/settings.py +157 -0
  332. aria_code/packages/aria_services/usage.py +151 -0
  333. aria_code/packages/aria_skills/__init__.py +46 -0
  334. aria_code/packages/aria_skills/catalog.py +149 -0
  335. aria_code/packages/aria_skills/loader.py +455 -0
  336. aria_code/packages/aria_skills/registry.py +84 -0
  337. aria_code/packages/aria_tools/__init__.py +5 -0
  338. aria_code/packages/aria_tools/financial/__init__.py +8 -0
  339. aria_code/packages/aria_tools/financial/_paths.py +130 -0
  340. aria_code/packages/aria_tools/financial/compliance.py +31 -0
  341. aria_code/packages/aria_tools/financial/factors.py +33 -0
  342. aria_code/packages/aria_tools/financial/risk_tools.py +33 -0
  343. aria_code/packages/aria_tools/financial/strategy.py +31 -0
  344. aria_code/packages/aria_tools/registry.py +128 -0
  345. aria_code/packages/quant_engine/__init__.py +34 -0
  346. aria_code/packages/quant_engine/_namespace.py +62 -0
  347. aria_code/packages/quant_engine/backtest/__init__.py +14 -0
  348. aria_code/packages/quant_engine/backtest/core.py +53 -0
  349. aria_code/packages/quant_engine/backtest/engine.py +96 -0
  350. aria_code/packages/quant_engine/portfolio/__init__.py +13 -0
  351. aria_code/packages/quant_engine/portfolio/optimizer.py +85 -0
  352. aria_code/packages/quant_engine/sports/__init__.py +80 -0
  353. aria_code/packages/quant_engine/sports/calibrator.py +354 -0
  354. aria_code/packages/quant_engine/sports/dixon_coles.py +234 -0
  355. aria_code/packages/quant_engine/sports/elo.py +300 -0
  356. aria_code/packages/quant_engine/sports/form.py +188 -0
  357. aria_code/packages/quant_engine/sports/h2h.py +195 -0
  358. aria_code/packages/quant_engine/sports/ml_model.py +377 -0
  359. aria_code/packages/quant_engine/sports/predictor.py +312 -0
  360. aria_code/packages/quant_engine/sports/tracker.py +665 -0
  361. aria_code/packages/quant_engine/stochastic/__init__.py +35 -0
  362. aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +195 -0
  363. aria_code/packages/quant_engine/stochastic/ito_calculus.py +477 -0
  364. aria_code/packages/quant_engine/stochastic/kelly_criterion.py +181 -0
  365. aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +95 -0
  366. aria_code/packages/quant_engine/stochastic/options_pricing.py +576 -0
  367. aria_code/packages/quant_engine/stochastic/stochastic_processes.py +90 -0
  368. aria_code/packs/__init__.py +85 -0
  369. aria_code/packs/base.py +168 -0
  370. aria_code/packs/finance/__init__.py +250 -0
  371. aria_code/packs/logistics/__init__.py +169 -0
  372. aria_code/packs/payments/__init__.py +139 -0
  373. aria_code/packs/realty/__init__.py +190 -0
  374. aria_code/packs/registry.py +202 -0
  375. aria_code/packs/rules.py +90 -0
  376. aria_code/plan_utils.py +194 -0
  377. aria_code/plugin_loader.py +328 -0
  378. aria_code/portfolio_ledger.py +4 -0
  379. aria_code/preview_server.py +449 -0
  380. aria_code/privacy/__init__.py +5 -0
  381. aria_code/privacy/feedback.py +123 -0
  382. aria_code/project_review.py +278 -0
  383. aria_code/project_review_api.py +235 -0
  384. aria_code/project_review_server.py +18 -0
  385. aria_code/project_tools.py +4 -0
  386. aria_code/providers/__init__.py +30 -0
  387. aria_code/providers/llm/__init__.py +19 -0
  388. aria_code/providers/llm/anthropic.py +184 -0
  389. aria_code/providers/llm/autoconfig.py +213 -0
  390. aria_code/providers/llm/base.py +139 -0
  391. aria_code/providers/llm/custom.py +158 -0
  392. aria_code/providers/llm/ollama.py +129 -0
  393. aria_code/providers/llm/openai_compat.py +313 -0
  394. aria_code/providers/llm/registry.py +444 -0
  395. aria_code/providers/local_image_provider.py +202 -0
  396. aria_code/providers/local_llm_provider.py +589 -0
  397. aria_code/realty_data_tools.py +4 -0
  398. aria_code/report_exporters.py +150 -0
  399. aria_code/report_generator.py +1764 -0
  400. aria_code/runtime/__init__.py +169 -0
  401. aria_code/runtime/acceptance.py +481 -0
  402. aria_code/runtime/agent_loop.py +1520 -0
  403. aria_code/runtime/approval.py +57 -0
  404. aria_code/runtime/budget.py +232 -0
  405. aria_code/runtime/checkpoints.py +432 -0
  406. aria_code/runtime/crash_report.py +174 -0
  407. aria_code/runtime/events.py +113 -0
  408. aria_code/runtime/gateway.py +150 -0
  409. aria_code/runtime/lsp.py +484 -0
  410. aria_code/runtime/orchestrator.py +55 -0
  411. aria_code/runtime/repo_map.py +700 -0
  412. aria_code/runtime/run_state.py +127 -0
  413. aria_code/runtime/run_store.py +450 -0
  414. aria_code/runtime/self_healing.py +422 -0
  415. aria_code/runtime/subagent.py +547 -0
  416. aria_code/runtime/task_ledger.py +86 -0
  417. aria_code/runtime/task_orchestrator.py +90 -0
  418. aria_code/runtime/tool_executor.py +217 -0
  419. aria_code/runtime/tool_policy.py +107 -0
  420. aria_code/runtime/worktrees.py +215 -0
  421. aria_code/runway_video_client.py +4 -0
  422. aria_code/safety/__init__.py +23 -0
  423. aria_code/safety/permissions.py +306 -0
  424. aria_code/safety/service.py +102 -0
  425. aria_code/setup_wizard.py +673 -0
  426. aria_code/spreadsheet_tools.py +4 -0
  427. aria_code/strategy_vault.py +4 -0
  428. aria_code/tools/__init__.py +0 -0
  429. aria_code/tools/artifact_tools.py +252 -0
  430. aria_code/tools/broker_tools.py +92 -0
  431. aria_code/tools/build_quant_engine.py +97 -0
  432. aria_code/tools/code_audit_tools.py +192 -0
  433. aria_code/tools/computer_use_tools.py +504 -0
  434. aria_code/tools/data_analysis_tools.py +809 -0
  435. aria_code/tools/enterprise_finance_tools.py +156 -0
  436. aria_code/tools/extended_tools.py +240 -0
  437. aria_code/tools/file_analysis_tools.py +885 -0
  438. aria_code/tools/image_gen_tools.py +114 -0
  439. aria_code/tools/local_finance_tools.py +3417 -0
  440. aria_code/tools/logistics_tools.py +135 -0
  441. aria_code/tools/macro_tools.py +369 -0
  442. aria_code/tools/notification_tools.py +249 -0
  443. aria_code/tools/project_tools.py +525 -0
  444. aria_code/tools/realty_data_tools.py +659 -0
  445. aria_code/tools/spreadsheet_tools.py +388 -0
  446. aria_code/tools/stripe_tools.py +115 -0
  447. aria_code/ui/__init__.py +105 -0
  448. aria_code/ui/banner.py +508 -0
  449. aria_code/ui/completer.py +501 -0
  450. aria_code/ui/console.py +281 -0
  451. aria_code/ui/image_render.py +243 -0
  452. aria_code/ui/input_box.py +488 -0
  453. aria_code/ui/picker.py +201 -0
  454. aria_code/ui/render/__init__.py +11 -0
  455. aria_code/ui/render/finance.py +1705 -0
  456. aria_code/ui/render/market.py +225 -0
  457. aria_code/ui/render/output.py +775 -0
  458. aria_code/ui/render/responsive.py +75 -0
  459. aria_code/ui/render/team.py +354 -0
  460. aria_code/ui/robot.py +235 -0
  461. aria_code/ui/startup_dashboard.py +109 -0
  462. aria_code/utils/vscode_uri.py +37 -0
  463. aria_code/video_analysis.py +147 -0
  464. aria_code/video_editor.py +271 -0
  465. aria_code/workspace/__init__.py +6 -0
  466. aria_code/workspace/files.py +193 -0
  467. aria_code/workspace/verify.py +113 -0
  468. aria_code/workspace_changes.py +199 -0
  469. aria_code/workspace_context.py +233 -0
  470. aria_code/workspace_service.py +196 -0
  471. aria_code/workspace_tools.py +150 -0
  472. aria_code-0.52.0.dist-info/METADATA +237 -0
  473. aria_code-0.52.0.dist-info/RECORD +478 -0
  474. aria_code-0.52.0.dist-info/WHEEL +5 -0
  475. aria_code-0.52.0.dist-info/entry_points.txt +3 -0
  476. aria_code-0.52.0.dist-info/licenses/LICENSE +201 -0
  477. aria_code-0.52.0.dist-info/licenses/NOTICE +49 -0
  478. aria_code-0.52.0.dist-info/top_level.txt +1 -0
@@ -0,0 +1,166 @@
1
+ """
2
+ datasources/base.py — 数据源统一接口
3
+ =====================================
4
+ 所有数据源实现 BaseDataSource,输出统一 schema,
5
+ 上层代码不关心具体是 akshare / yfinance / tushare。
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ from abc import ABC, abstractmethod
11
+ from dataclasses import dataclass, field
12
+ from typing import Any, Dict, List, Optional
13
+
14
+
15
+ # ── 统一输出 schema ────────────────────────────────────────────────────────────
16
+
17
+ @dataclass
18
+ class QuoteResult:
19
+ symbol: str
20
+ name: str = ""
21
+ price: float = 0.0
22
+ change: float = 0.0
23
+ change_pct: float = 0.0
24
+ volume: float = 0.0
25
+ market_cap: float = 0.0
26
+ pe_ttm: float = 0.0
27
+ pb: float = 0.0
28
+ high_52w: float = 0.0
29
+ low_52w: float = 0.0
30
+ currency: str = "CNY"
31
+ market: str = "" # "a_share" | "us" | "hk" | "crypto"
32
+ source: str = "" # 实际使用的数据源名称
33
+ timestamp: str = ""
34
+ extra: Dict[str, Any] = field(default_factory=dict)
35
+
36
+ def to_dict(self) -> Dict:
37
+ return {
38
+ "symbol": self.symbol, "name": self.name,
39
+ "price": self.price, "change": self.change,
40
+ "change_pct": self.change_pct, "volume": self.volume,
41
+ "market_cap": self.market_cap, "pe_ttm": self.pe_ttm,
42
+ "pb": self.pb, "high_52w": self.high_52w, "low_52w": self.low_52w,
43
+ "currency": self.currency, "market": self.market,
44
+ "source": self.source, "timestamp": self.timestamp,
45
+ **self.extra,
46
+ }
47
+
48
+
49
+ @dataclass
50
+ class HistoryResult:
51
+ symbol: str
52
+ data: Any = None # pandas DataFrame
53
+ source: str = ""
54
+ interval: str = "1d"
55
+
56
+
57
+ @dataclass
58
+ class FundamentalsResult:
59
+ symbol: str
60
+ pe_ttm: Optional[float] = None
61
+ pb: Optional[float] = None
62
+ roe: Optional[float] = None
63
+ revenue_growth: Optional[float] = None
64
+ net_profit_growth: Optional[float] = None
65
+ dividend_yield: Optional[float] = None
66
+ total_mv: Optional[float] = None
67
+ source: str = ""
68
+
69
+
70
+ # ── 基类 ──────────────────────────────────────────────────────────────────────
71
+
72
+ class BaseDataSource(ABC):
73
+ """
74
+ 所有数据源的抽象基类。
75
+
76
+ 子类实现 `supports()` 判断是否支持该 symbol,
77
+ 再实现具体的 `quote()` / `history()` / `fundamentals()`。
78
+ """
79
+
80
+ name: str = "base" # 数据源唯一标识
81
+ markets: List[str] = [] # 支持的市场: "a_share", "us", "hk", "crypto"
82
+ requires_key: bool = False # 是否需要 API key
83
+
84
+ def __init__(self, config: Dict[str, Any] = None):
85
+ self.config = config or {}
86
+ self._available: Optional[bool] = None
87
+
88
+ def supports(self, symbol: str) -> bool:
89
+ """判断该数据源是否能处理这个 symbol(子类可覆盖)"""
90
+ market = _detect_market(symbol)
91
+ return market in self.markets
92
+
93
+ def is_configured(self) -> bool:
94
+ """数据源是否已配置好(有 key 等)"""
95
+ return True
96
+
97
+ @abstractmethod
98
+ def quote(self, symbol: str) -> Optional[QuoteResult]:
99
+ """获取实时行情(同步)"""
100
+ ...
101
+
102
+ def history(
103
+ self,
104
+ symbol: str,
105
+ days: int = 90,
106
+ interval: str = "1d",
107
+ ) -> Optional[HistoryResult]:
108
+ """获取历史 OHLCV(同步,子类按需实现)"""
109
+ return None
110
+
111
+ def fundamentals(self, symbol: str) -> Optional[FundamentalsResult]:
112
+ """获取基本面数据(子类按需实现)"""
113
+ return None
114
+
115
+
116
+ # ── 工具函数 ──────────────────────────────────────────────────────────────────
117
+
118
+ def _detect_market(symbol: str) -> str:
119
+ """简单推断 symbol 所属市场"""
120
+ s = symbol.upper().replace(" ", "")
121
+
122
+ # 加密货币
123
+ if "/" in s or s in ("BTC", "ETH", "SOL", "DOGE", "BNB", "ADA", "XRP"):
124
+ return "crypto"
125
+ if s.endswith(("-USD", "-USDT", "-BTC")) or s.endswith("USDT"):
126
+ return "crypto"
127
+
128
+ # 大宗商品
129
+ _COMMODITIES = {"WTI", "BRENT", "GOLD", "SILVER", "COPPER",
130
+ "ALUMINUM", "WHEAT", "CORN", "SOYBEAN", "NATGAS", "GAS"}
131
+ if s in _COMMODITIES:
132
+ return "commodity"
133
+
134
+ # 外汇(格式: USDCNY, USD/CNY, EURUSD 等)
135
+ _FX_CURRENCIES = {"USD", "EUR", "GBP", "JPY", "CNY", "HKD",
136
+ "AUD", "CAD", "CHF", "KRW", "SGD", "INR"}
137
+ if len(s) == 6 and s[:3] in _FX_CURRENCIES and s[3:] in _FX_CURRENCIES:
138
+ return "forex"
139
+ if "/" in s:
140
+ parts = s.split("/")
141
+ if len(parts) == 2 and parts[0] in _FX_CURRENCIES and parts[1] in _FX_CURRENCIES:
142
+ return "forex"
143
+
144
+ # A股:数字代码 or 带前缀
145
+ if s.startswith(("SH", "SZ", "BJ")):
146
+ return "a_share"
147
+ try:
148
+ int(s[:6])
149
+ if len(s) == 6 or (len(s) > 6 and not s[6:].isalpha()):
150
+ return "a_share"
151
+ except ValueError:
152
+ pass
153
+
154
+ # 港股
155
+ if s.endswith(".HK") or (s.isdigit() and len(s) == 5):
156
+ return "hk"
157
+
158
+ # 宏观指标
159
+ _MACRO = {"GDP", "CPI", "CPIYOY", "PCE", "UNRATE", "NFP", "FEDFUNDS",
160
+ "US10Y", "US2Y", "US3M", "VIX", "M2", "MORTGAGE", "HOUSING",
161
+ "SP500", "NASDAQ", "WILSHIRE", "USDCNY", "USDINR", "USDEUR"}
162
+ if s in _MACRO:
163
+ return "macro"
164
+
165
+ # 默认美股
166
+ return "us"
@@ -0,0 +1,253 @@
1
+ """
2
+ datasources/router.py — 数据源路由器
3
+ =====================================
4
+ 读取 ~/.aria/datasources.yaml 配置,按优先级依次尝试每个数据源,
5
+ 首个成功的结果直接返回;所有失败则返回 None。
6
+
7
+ 配置示例 (~/.aria/datasources.yaml):
8
+ a_shares:
9
+ - akshare
10
+ - tushare
11
+ us_stocks:
12
+ - yfinance
13
+ - finnhub
14
+ crypto:
15
+ - ccxt/binance
16
+ - yfinance
17
+ """
18
+
19
+ from __future__ import annotations
20
+
21
+ import logging
22
+ import threading
23
+ from pathlib import Path
24
+ from typing import Any, Dict, List, Optional, Type
25
+
26
+ from .base import (
27
+ BaseDataSource, QuoteResult, HistoryResult, FundamentalsResult, _detect_market
28
+ )
29
+ from .sources import (
30
+ AkshareSource, YFinanceSource, TushareSource,
31
+ FREDSource, EDGARSource, AlphaVantageSource, WorldBankSource,
32
+ FinnhubSource, WebScraperSource,
33
+ )
34
+
35
+ logger = logging.getLogger(__name__)
36
+
37
+ # ── 数据源目录 ────────────────────────────────────────────────────────────────
38
+ _SOURCE_REGISTRY: Dict[str, Type[BaseDataSource]] = {
39
+ "akshare": AkshareSource,
40
+ "yfinance": YFinanceSource,
41
+ "finnhub": FinnhubSource,
42
+ "tushare": TushareSource,
43
+ "fred": FREDSource,
44
+ "edgar": EDGARSource,
45
+ "alpha_vantage": AlphaVantageSource,
46
+ "world_bank": WorldBankSource,
47
+ "web_scraper": WebScraperSource,
48
+ }
49
+
50
+
51
+ def register_datasource(name: str, cls: Type[BaseDataSource]) -> None:
52
+ """注册自定义数据源(供插件/用户扩展)"""
53
+ _SOURCE_REGISTRY[name.lower()] = cls
54
+ logger.info(f"✓ 注册自定义数据源: {name}")
55
+
56
+
57
+ # ── 默认优先级链 ──────────────────────────────────────────────────────────────
58
+ _DEFAULT_CHAINS: Dict[str, List[str]] = {
59
+ "a_share": ["tushare", "akshare"],
60
+ "us": ["yfinance", "finnhub", "alpha_vantage", "edgar"],
61
+ "hk": ["yfinance", "finnhub", "akshare"],
62
+ "crypto": ["yfinance"],
63
+ "macro": ["fred", "world_bank"],
64
+ "forex": ["alpha_vantage", "yfinance"],
65
+ "commodity": ["alpha_vantage"],
66
+ }
67
+
68
+ # ── 配置文件路径 ──────────────────────────────────────────────────────────────
69
+ _CONFIG_PATHS = [
70
+ Path.home() / ".aria" / "datasources.yaml",
71
+ Path.home() / ".aria" / "datasources.json",
72
+ Path(".aria.json"),
73
+ ]
74
+
75
+
76
+ def _load_user_chains() -> Dict[str, List[str]]:
77
+ for p in _CONFIG_PATHS:
78
+ if not p.exists():
79
+ continue
80
+ try:
81
+ if p.suffix in (".yaml", ".yml"):
82
+ import yaml
83
+ with open(p, encoding="utf-8") as f:
84
+ data = yaml.safe_load(f) or {}
85
+ else:
86
+ import json
87
+ with open(p, encoding="utf-8") as f:
88
+ data = json.load(f)
89
+ ds = data.get("datasources", data)
90
+ if isinstance(ds, dict):
91
+ chains = {}
92
+ key_map = {
93
+ "a_shares": "a_share", "a_share": "a_share",
94
+ "us_stocks": "us", "us": "us",
95
+ "hk_stocks": "hk", "hk": "hk",
96
+ "crypto": "crypto",
97
+ }
98
+ for k, v in ds.items():
99
+ market = key_map.get(k.lower(), k.lower())
100
+ if isinstance(v, list):
101
+ chains[market] = v
102
+ return chains
103
+ except Exception as e:
104
+ logger.debug(f"加载 datasources 配置 {p} 失败: {e}")
105
+ return {}
106
+
107
+
108
+ class DataRouter:
109
+ """
110
+ 统一数据路由器。线程安全(内部缓存用锁保护)。
111
+
112
+ 用法:
113
+ router = DataRouter()
114
+ q = router.quote("600519")
115
+ h = router.history("AAPL", days=90)
116
+ f = router.fundamentals("000858")
117
+ """
118
+
119
+ def __init__(self):
120
+ self._user_chains = _load_user_chains()
121
+ # name → instance, or None for "cannot serve" (unknown, unconfigured,
122
+ # or failed to construct). Caching the negative case is what stops a
123
+ # rebuild on every call; see invalidate_sources() for the escape hatch.
124
+ self._source_cache: Dict[str, Optional[BaseDataSource]] = {}
125
+ self._lock = threading.Lock()
126
+
127
+ def _get_chain(self, market: str) -> List[str]:
128
+ user = self._user_chains.get(market) or self._user_chains.get(
129
+ {"a_share": "a_shares"}.get(market, market)
130
+ )
131
+ if user:
132
+ return user
133
+ return _DEFAULT_CHAINS.get(market, ["yfinance"])
134
+
135
+ def _get_source(self, name: str) -> Optional[BaseDataSource]:
136
+ """The live instance for *name*, or None if it cannot serve.
137
+
138
+ Negative results are cached too. Only successes used to be, so an
139
+ unconfigured source was constructed again on every single call — for a
140
+ chain with two unkeyed providers ahead of a working one, that is two
141
+ wasted constructions per quote, forever. Some sources read files or
142
+ probe the environment in __init__, which makes it more than a
143
+ micro-cost.
144
+ """
145
+ with self._lock:
146
+ if name in self._source_cache:
147
+ return self._source_cache[name]
148
+
149
+ cls = _SOURCE_REGISTRY.get(name.lower())
150
+ if not cls:
151
+ logger.debug(f"未知数据源: {name}")
152
+ self._source_cache[name] = None
153
+ return None
154
+ try:
155
+ src = cls()
156
+ except Exception as exc:
157
+ # A source whose constructor raises must not take down the
158
+ # chain; the next provider is very likely fine.
159
+ logger.debug(f"数据源 {name} 初始化失败: {exc}")
160
+ self._source_cache[name] = None
161
+ return None
162
+ if not src.is_configured():
163
+ logger.debug(f"数据源 {name} 未配置(缺少 API key)")
164
+ self._source_cache[name] = None
165
+ return None
166
+ self._source_cache[name] = src
167
+ return src
168
+
169
+ def invalidate_sources(self) -> None:
170
+ """Forget what is configured, after credentials change at runtime.
171
+
172
+ Without this the negative cache above would outlive an /apikey set for
173
+ the whole session.
174
+ """
175
+ with self._lock:
176
+ self._source_cache.clear()
177
+
178
+ def quote(self, symbol: str) -> Optional[QuoteResult]:
179
+ market = _detect_market(symbol)
180
+ for src_name in self._get_chain(market):
181
+ if src_name == "edgar":
182
+ continue
183
+ src = self._get_source(src_name)
184
+ if not src or not src.supports(symbol):
185
+ continue
186
+ try:
187
+ result = src.quote(symbol)
188
+ try:
189
+ valid_price = result is not None and float(getattr(result, "price", 0) or 0) > 0
190
+ except Exception:
191
+ valid_price = False
192
+ if result and valid_price:
193
+ logger.debug(f"quote({symbol}) ← {src_name}")
194
+ return result
195
+ except Exception as e:
196
+ logger.debug(f"[{src_name}] quote {symbol} 异常: {e}")
197
+ logger.debug(f"所有数据源均无法获取 {symbol} 行情")
198
+ return None
199
+
200
+ def history(
201
+ self, symbol: str, days: int = 90, interval: str = "1d"
202
+ ) -> Optional[HistoryResult]:
203
+ market = _detect_market(symbol)
204
+ for src_name in self._get_chain(market):
205
+ src = self._get_source(src_name)
206
+ if not src or not src.supports(symbol):
207
+ continue
208
+ try:
209
+ result = src.history(symbol, days=days, interval=interval)
210
+ if result is not None:
211
+ logger.debug(f"history({symbol}) ← {src_name}")
212
+ return result
213
+ except Exception as e:
214
+ logger.debug(f"[{src_name}] history {symbol} 异常: {e}")
215
+ return None
216
+
217
+ def fundamentals(self, symbol: str) -> Optional[FundamentalsResult]:
218
+ market = _detect_market(symbol)
219
+ for src_name in self._get_chain(market):
220
+ src = self._get_source(src_name)
221
+ if not src or not src.supports(symbol):
222
+ continue
223
+ try:
224
+ result = src.fundamentals(symbol)
225
+ if result:
226
+ logger.debug(f"fundamentals({symbol}) ← {src_name}")
227
+ return result
228
+ except Exception as e:
229
+ logger.debug(f"[{src_name}] fundamentals {symbol} 异常: {e}")
230
+ return None
231
+
232
+ def list_sources(self) -> List[Dict[str, Any]]:
233
+ """列出所有数据源及其状态(用于 /config 展示)"""
234
+ result = []
235
+ for name, cls in _SOURCE_REGISTRY.items():
236
+ src = cls()
237
+ result.append({
238
+ "name": name,
239
+ "markets": cls.markets,
240
+ "needs_key": cls.requires_key,
241
+ "configured": src.is_configured(),
242
+ })
243
+ return result
244
+
245
+
246
+ # ── 单例 ──────────────────────────────────────────────────────────────────────
247
+ _router: Optional[DataRouter] = None
248
+
249
+ def get_router() -> DataRouter:
250
+ global _router
251
+ if _router is None:
252
+ _router = DataRouter()
253
+ return _router
@@ -0,0 +1,15 @@
1
+ from .akshare_source import AkshareSource
2
+ from .yfinance_source import YFinanceSource
3
+ from .tushare_source import TushareSource
4
+ from .fred_source import FREDSource
5
+ from .edgar_source import EDGARSource
6
+ from .alpha_vantage_source import AlphaVantageSource
7
+ from .world_bank_source import WorldBankSource
8
+ from .web_scraper_source import WebScraperSource
9
+ from .finnhub_source import FinnhubSource
10
+
11
+ __all__ = [
12
+ "AkshareSource", "YFinanceSource", "TushareSource",
13
+ "FREDSource", "EDGARSource", "AlphaVantageSource",
14
+ "WorldBankSource", "WebScraperSource", "FinnhubSource",
15
+ ]