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,238 @@
1
+ """Command-line entry point for the verifiable eval suites.
2
+
3
+ python3 -m aria_code.evals.runner evals/suites/core.yaml
4
+ python3 -m aria_code.evals.runner evals/suites/core.yaml --tag logistics
5
+ python3 -m aria_code.evals.runner evals/suites/core.yaml --check # no agent
6
+
7
+ ``--check`` is the mode worth knowing about. It runs every task's pre-flight
8
+ and nothing else, so it answers "is this suite still measuring anything?"
9
+ without a model, an API key, or a minute of runtime. Run it in CI: a fixture
10
+ that has drifted green is a silent scoreboard inflation, and this is what
11
+ catches it on the commit that caused it rather than a month later.
12
+ """
13
+
14
+ from __future__ import annotations
15
+
16
+ import argparse
17
+ import sys
18
+ from pathlib import Path
19
+
20
+ from .harness import (
21
+ ERROR,
22
+ FAIL,
23
+ INVALID,
24
+ PASS,
25
+ SuiteResult,
26
+ TaskResult,
27
+ load_suite,
28
+ run_suite,
29
+ write_report,
30
+ )
31
+
32
+ _ICONS = {PASS: "✓", FAIL: "✗", INVALID: "⚠", ERROR: "!"}
33
+
34
+
35
+ class _TimedOut:
36
+ """Marker: the agent was cut off before it could finish.
37
+
38
+ Carries a non-zero ``returncode`` so the harness's existing solver-failure
39
+ check classifies it as ERROR — excluded from the score — rather than as a
40
+ task the model failed.
41
+ """
42
+
43
+ returncode = 124
44
+
45
+ def __init__(self, seconds: int) -> None:
46
+ self.stderr = f"the agent was still working when the {seconds}s budget ran out"
47
+ self.stdout = ""
48
+
49
+
50
+ def check_only_solver(prompt: str, workspace: Path) -> None:
51
+ """A solver that does nothing, so only the pre-flight is exercised.
52
+
53
+ Every task should come back FAIL under it. A PASS means the fixture is
54
+ already green; anything else means the fixture or its check is broken.
55
+ """
56
+ return None
57
+
58
+
59
+ def build_agent_solver(*, model: str = "", timeout: int = 900, local: bool = False):
60
+ """Drive the real Aria agent over one task, in the task's own workspace.
61
+
62
+ The agent is invoked as a subprocess in headless mode rather than in this
63
+ process on purpose: a task that leaves the interpreter's cwd, module cache
64
+ or event loop in a strange state then cannot contaminate the next task's
65
+ score.
66
+
67
+ ``--dangerously-skip-permissions`` is not optional here, and it is safe for
68
+ the same reason the flag is dangerous everywhere else: the agent is pointed
69
+ at a throwaway copy of a fixture. Without it every write waits on an
70
+ approval prompt that no one is there to answer, so every task times out and
71
+ the suite scores zero for a reason that has nothing to do with the model.
72
+ """
73
+ import subprocess
74
+
75
+ def _solve(prompt: str, workspace: Path):
76
+ command = [
77
+ sys.executable, "-m", "aria_code.aria_cli",
78
+ "-p", prompt,
79
+ "--dangerously-skip-permissions",
80
+ "--no-banner",
81
+ ]
82
+ if model:
83
+ command.extend(["--model", model])
84
+ if local:
85
+ command.append("--local")
86
+ try:
87
+ return subprocess.run(
88
+ command,
89
+ cwd=str(workspace),
90
+ capture_output=True,
91
+ text=True,
92
+ timeout=timeout,
93
+ check=False,
94
+ )
95
+ except subprocess.TimeoutExpired:
96
+ # A truncated run is not a measured failure.
97
+ #
98
+ # I first scored this as FAIL, reasoning "it had its time and
99
+ # produced nothing". That holds only when the budget is generous
100
+ # relative to how long the work takes. It was not: the same task
101
+ # completed in 78–146s alone and exceeded 600s inside a suite,
102
+ # where back-to-back turns contend and get throttled. Scoring that
103
+ # as FAIL blamed the model for the harness cutting it off — which
104
+ # is precisely the confusion PASS/FAIL vs ERROR exists to prevent.
105
+ return _TimedOut(timeout)
106
+
107
+ return _solve
108
+
109
+
110
+ def _print_result(result: TaskResult) -> None:
111
+ icon = _ICONS.get(result.outcome, "?")
112
+ line = f" {icon} {result.task_id} ({result.seconds:.1f}s)"
113
+ if result.detail:
114
+ line += f" — {result.detail}"
115
+ print(line)
116
+ if result.outcome == FAIL and result.changed:
117
+ print(f" changed: {', '.join(result.changed)}")
118
+ if result.outcome in (FAIL, INVALID, ERROR) and result.log:
119
+ for log_line in result.log.splitlines()[-8:]:
120
+ print(f" {log_line}")
121
+
122
+
123
+ def main(argv: list[str] | None = None) -> int:
124
+ parser = argparse.ArgumentParser(prog="aria-evals", description=__doc__)
125
+ parser.add_argument("suite", help="path to a suite YAML file")
126
+ parser.add_argument("--fixtures", default="", help="fixtures root (default: <suite>/../fixtures)")
127
+ parser.add_argument("--only", nargs="*", default=[], help="run only these task ids")
128
+ parser.add_argument("--tag", nargs="*", default=[], help="run only tasks with these tags")
129
+ parser.add_argument("--check", action="store_true",
130
+ help="run only the pre-flight: verify every task still starts red")
131
+ parser.add_argument("--model", default="", help="model to pass to the agent")
132
+ parser.add_argument("--local", action="store_true",
133
+ help="run the agent local-only (Ollama), skipping the cloud backend")
134
+ parser.add_argument("--solve-timeout", type=int, default=900,
135
+ help="seconds to give the agent per task (default 900)")
136
+ parser.add_argument("--repeat", type=int, default=1, metavar="N",
137
+ help="run the suite N times; pass@1 is then passes/attempts (default 1)")
138
+ parser.add_argument("--report", default="", help="write the scoreboard to this JSON path")
139
+ parser.add_argument("--keep", action="store_true", help="keep task workspaces for inspection")
140
+ parser.add_argument("--scratch", default="", help="scratch root (implies --keep)")
141
+ args = parser.parse_args(argv)
142
+
143
+ suite_path = Path(args.suite).expanduser().resolve()
144
+ fixtures = Path(args.fixtures).expanduser().resolve() if args.fixtures else (
145
+ suite_path.parent.parent / "fixtures"
146
+ )
147
+
148
+ try:
149
+ name, tasks = load_suite(suite_path)
150
+ except Exception as exc:
151
+ print(f"could not load suite: {exc}", file=sys.stderr)
152
+ return 2
153
+
154
+ if not tasks:
155
+ print(f"suite {name} has no tasks", file=sys.stderr)
156
+ return 2
157
+
158
+ solver = check_only_solver if args.check else build_agent_solver(
159
+ model=args.model, timeout=args.solve_timeout, local=args.local,
160
+ )
161
+ mode = "pre-flight only" if args.check else f"agent{f' ({args.model})' if args.model else ''}"
162
+ print(f"\n{name} — {len(tasks)} task(s), {mode}\n")
163
+
164
+ repeats = max(1, args.repeat)
165
+ suite: SuiteResult | None = None
166
+ for attempt in range(repeats):
167
+ if repeats > 1:
168
+ print(f" — attempt {attempt + 1}/{repeats} —")
169
+ run = run_suite(
170
+ tasks,
171
+ solver=solver,
172
+ fixtures_root=fixtures,
173
+ name=name,
174
+ only=args.only,
175
+ tags=args.tag,
176
+ scratch_root=args.scratch or None,
177
+ keep_workspace=args.keep,
178
+ on_result=_print_result,
179
+ )
180
+ if suite is None:
181
+ suite = run
182
+ else:
183
+ suite.merge(run)
184
+ assert suite is not None
185
+
186
+ print(f"\n{suite.summary_line()}")
187
+ if repeats > 1:
188
+ # Print the per-task record, because an aggregate hides the tasks that
189
+ # flip. A task at 2/3 is a different engineering problem from two tasks
190
+ # at 1/1 and 1/2.
191
+ for task_id, stats in sorted(suite.per_task().items()):
192
+ if stats["attempts"]:
193
+ print(f" {task_id:<28} {stats['passed']}/{stats['attempts']}")
194
+ by_tag = suite.by_tag()
195
+ if by_tag and not args.check:
196
+ for tag, stats in by_tag.items():
197
+ if stats["scored"]:
198
+ print(f" {tag:<16} {stats['passed']}/{stats['scored']} ({stats['pass_rate']:.0%})")
199
+
200
+ if args.report:
201
+ print(f"\nreport → {write_report(suite, args.report)}")
202
+
203
+ if args.check:
204
+ # In check mode the only acceptable outcome is "every task is still
205
+ # broken". A pass here means a fixture drifted green and the suite is
206
+ # quietly measuring less than it claims.
207
+ #
208
+ # "Could not run" is reported separately from "drifted green" because
209
+ # they call for opposite responses and were previously indistinguishable:
210
+ # CI installed the package without pytest, every task errored with
211
+ # "environment is missing pytest", and the verdict said five fixtures had
212
+ # stopped being red. That reads as a fixture problem and sends whoever
213
+ # sees it to look at the fixtures, which are fine.
214
+ errored = [r for r in suite.results if r.outcome == ERROR]
215
+ drifted = [r.task_id for r in suite.results
216
+ if r.outcome != FAIL and r.outcome != ERROR]
217
+
218
+ if errored:
219
+ print(f"\n✗ {len(errored)} task(s) could not run — this is an "
220
+ f"environment problem, not a drifted fixture:")
221
+ for result in errored:
222
+ print(f" {result.task_id}: {result.detail}")
223
+ print("\n The suite declares what it needs with `requires:`. "
224
+ "Install it and run again;")
225
+ print(" `pip install -e \".[dev]\"` covers the pytest the shipped "
226
+ "suite asks for.")
227
+ if drifted:
228
+ print(f"\n✗ {len(drifted)} task(s) no longer start red: {', '.join(drifted)}")
229
+ if errored or drifted:
230
+ return 1
231
+ print(f"\n✓ all {len(suite.results)} task(s) still start red")
232
+ return 0
233
+
234
+ return 0 if suite.failed == 0 and suite.errored == 0 and suite.invalid == 0 else 1
235
+
236
+
237
+ if __name__ == "__main__":
238
+ raise SystemExit(main())
@@ -0,0 +1,115 @@
1
+ """Delegate a task to the Claude Code or Codex CLI as an external headless agent.
2
+
3
+ Complements runtime/subagent.py's spawn_task system: by default a spawned
4
+ task runs inside aria-code's own LLM loop, but a task can instead be
5
+ delegated to another agentic coding CLI already installed on the machine
6
+ (``backend="claude"`` / ``backend="codex"``), reusing whatever coding
7
+ capability that tool has. Both runners return plain text — a success/failure
8
+ string, never a raised exception — so a missing binary or a CLI-side failure
9
+ degrades the same way a normal subagent failure does (task.status="failed"
10
+ with .error set), and never crashes the background task loop.
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ import asyncio
16
+ import json
17
+ import shutil
18
+ from typing import Optional
19
+
20
+
21
+ async def _run_cli(
22
+ binary: str,
23
+ args: list[str],
24
+ *,
25
+ cwd: Optional[str],
26
+ timeout: float,
27
+ ) -> tuple[bool, str]:
28
+ """Run one CLI invocation. Returns (ok, text) — never raises."""
29
+ if not shutil.which(binary):
30
+ return False, f"{binary} CLI not found on PATH. Install it first."
31
+ try:
32
+ proc = await asyncio.create_subprocess_exec(
33
+ binary, *args,
34
+ cwd=cwd,
35
+ stdout=asyncio.subprocess.PIPE,
36
+ stderr=asyncio.subprocess.PIPE,
37
+ )
38
+ except Exception as exc:
39
+ return False, f"Failed to launch {binary}: {exc}"
40
+
41
+ try:
42
+ stdout, stderr = await asyncio.wait_for(proc.communicate(), timeout=timeout)
43
+ except asyncio.TimeoutError:
44
+ proc.kill()
45
+ return False, f"{binary} CLI timed out after {timeout:.0f}s."
46
+
47
+ out_text = stdout.decode("utf-8", errors="replace")
48
+ if proc.returncode != 0:
49
+ err_text = stderr.decode("utf-8", errors="replace")[:500]
50
+ return False, f"{binary} CLI exited {proc.returncode}: {err_text or out_text[:500]}"
51
+ return True, out_text
52
+
53
+
54
+ def _extract_json_result(raw: str, *keys: str) -> str:
55
+ """Best-effort pull of the human-readable result out of a CLI's JSON output.
56
+
57
+ Both CLIs' exact JSON shapes can vary by version, so this tries each
58
+ candidate key and falls back to the raw text — a schema drift should
59
+ degrade to "less clean output", not a crash or an empty result.
60
+ """
61
+ raw = raw.strip()
62
+ if not raw:
63
+ return "(no output)"
64
+ try:
65
+ data = json.loads(raw)
66
+ except json.JSONDecodeError:
67
+ return raw
68
+ if isinstance(data, dict):
69
+ for key in keys:
70
+ value = data.get(key)
71
+ if isinstance(value, str) and value:
72
+ return value
73
+ return raw
74
+
75
+
76
+ async def run_claude_code_headless(
77
+ prompt: str,
78
+ *,
79
+ cwd: Optional[str] = None,
80
+ timeout: float = 600.0,
81
+ ) -> str:
82
+ """Delegate `prompt` to `claude -p` (Claude Code headless mode)."""
83
+ ok, text = await _run_cli(
84
+ "claude",
85
+ ["-p", prompt, "--output-format", "json"],
86
+ cwd=cwd,
87
+ timeout=timeout,
88
+ )
89
+ if not ok:
90
+ return f"错误: {text}"
91
+ return _extract_json_result(text, "result", "response")
92
+
93
+
94
+ async def run_codex_headless(
95
+ prompt: str,
96
+ *,
97
+ cwd: Optional[str] = None,
98
+ timeout: float = 600.0,
99
+ ) -> str:
100
+ """Delegate `prompt` to `codex exec` (OpenAI Codex CLI headless mode)."""
101
+ ok, text = await _run_cli(
102
+ "codex",
103
+ ["exec", prompt, "--json"],
104
+ cwd=cwd,
105
+ timeout=timeout,
106
+ )
107
+ if not ok:
108
+ return f"错误: {text}"
109
+ return _extract_json_result(text, "result", "message", "output")
110
+
111
+
112
+ RUNNERS = {
113
+ "claude": run_claude_code_headless,
114
+ "codex": run_codex_headless,
115
+ }
@@ -0,0 +1,4 @@
1
+ """Compatibility import for :mod:`clients.figma_client`."""
2
+ from importlib import import_module as _import_module
3
+ import sys as _sys
4
+ _sys.modules[__name__] = _import_module("clients.figma_client")
@@ -0,0 +1,4 @@
1
+ """Compatibility import for :mod:`tools.file_analysis_tools`."""
2
+ from importlib import import_module as _import_module
3
+ import sys as _sys
4
+ _sys.modules[__name__] = _import_module("tools.file_analysis_tools")
@@ -0,0 +1,4 @@
1
+ """Compatibility import for :mod:`domain.finance_formulas`."""
2
+ from importlib import import_module as _import_module
3
+ import sys as _sys
4
+ _sys.modules[__name__] = _import_module("domain.finance_formulas")
@@ -0,0 +1,4 @@
1
+ """Compatibility import for :mod:`clients.football_data_client`."""
2
+ from importlib import import_module as _import_module
3
+ import sys as _sys
4
+ _sys.modules[__name__] = _import_module("clients.football_data_client")
@@ -0,0 +1,4 @@
1
+ """Compatibility import for :mod:`tools.image_gen_tools`."""
2
+ from importlib import import_module as _import_module
3
+ import sys as _sys
4
+ _sys.modules[__name__] = _import_module("tools.image_gen_tools")