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,139 @@
1
+ """Interactive plan mode — intercept tool calls for step-by-step approval.
2
+
3
+ When plan mode is active, the agent loop asks the user to approve each tool
4
+ call before execution. A plan-mode header shows which step is being proposed.
5
+
6
+ Usage (from aria_cli.py):
7
+ from apps.cli.plan_mode import PlanModeState
8
+
9
+ _PLAN = PlanModeState() # module-level singleton
10
+
11
+ # Enter plan mode:
12
+ _PLAN.enter()
13
+
14
+ # In _confirm_tool_execution_decision:
15
+ if _PLAN.active and tool_name not in _CONFIRM_TOOLS:
16
+ return _PLAN.confirm_step(tool_name, params, console, HAS_RICH)
17
+
18
+ # Exit:
19
+ _PLAN.exit()
20
+ """
21
+
22
+ from __future__ import annotations
23
+
24
+ from dataclasses import dataclass, field
25
+ from typing import List, Optional
26
+
27
+
28
+ @dataclass
29
+ class PlanStep:
30
+ index: int
31
+ tool: str
32
+ params: dict
33
+ approved: Optional[bool] = None
34
+ skipped: bool = False
35
+
36
+
37
+ @dataclass
38
+ class PlanModeState:
39
+ active: bool = False
40
+ _steps: List[PlanStep] = field(default_factory=list)
41
+ _index: int = 0
42
+
43
+ # ── Lifecycle ─────────────────────────────────────────────────────────────
44
+
45
+ def enter(self) -> None:
46
+ self.active = True
47
+ self._steps = []
48
+ self._index = 0
49
+
50
+ def exit(self) -> None:
51
+ self.active = False
52
+ self._steps = []
53
+ self._index = 0
54
+
55
+ # ── Step tracking ─────────────────────────────────────────────────────────
56
+
57
+ def _next_index(self) -> int:
58
+ self._index += 1
59
+ return self._index
60
+
61
+ def record_step(self, tool: str, params: dict, *, approved: bool) -> PlanStep:
62
+ step = PlanStep(index=self._next_index(), tool=tool, params=params, approved=approved)
63
+ self._steps.append(step)
64
+ return step
65
+
66
+ def summary(self) -> dict:
67
+ total = len(self._steps)
68
+ approved = sum(1 for s in self._steps if s.approved is True)
69
+ rejected = sum(1 for s in self._steps if s.approved is False)
70
+ return {"total": total, "approved": approved, "rejected": rejected}
71
+
72
+ # ── Confirmation UI ───────────────────────────────────────────────────────
73
+
74
+ def confirm_step(
75
+ self,
76
+ tool_name: str,
77
+ params: dict,
78
+ *,
79
+ console,
80
+ has_rich: bool,
81
+ arrow_select_fn,
82
+ ):
83
+ """Show plan-mode confirmation prompt. Returns ApprovalDecision."""
84
+ from runtime.approval import ApprovalDecision
85
+
86
+ step_num = self._index + 1 # preview next number
87
+
88
+ if has_rich and console:
89
+ _param_preview = _format_params(params)
90
+ console.print(
91
+ f"\n [bold cyan]◆ Plan Mode[/bold cyan] "
92
+ f"[dim]Step {step_num} — tool:[/dim] [bold]{tool_name}[/bold]"
93
+ )
94
+ if _param_preview:
95
+ console.print(f" [dim]{_param_preview}[/dim]")
96
+ else:
97
+ print(f"\n [Plan Mode] Step {step_num}: {tool_name}")
98
+
99
+ options = [
100
+ ("Execute this step", "执行此工具调用"),
101
+ ("Skip this step", "跳过,继续下一步"),
102
+ ("Execute all remaining", "从此步开始自动执行所有后续工具"),
103
+ ("Abort plan", "取消整个任务"),
104
+ ]
105
+
106
+ choice = arrow_select_fn(options, selected=0, title="")
107
+
108
+ if choice == 0:
109
+ self.record_step(tool_name, params, approved=True)
110
+ return ApprovalDecision.allow()
111
+ elif choice == 1:
112
+ self.record_step(tool_name, params, approved=False)
113
+ return ApprovalDecision.deny("skipped in plan mode")
114
+ elif choice == 2:
115
+ self.record_step(tool_name, params, approved=True)
116
+ self.exit() # turn off plan mode so remaining tools auto-execute
117
+ return ApprovalDecision.allow(auto_approve_session=True)
118
+ else:
119
+ self.record_step(tool_name, params, approved=False)
120
+ self.exit()
121
+ return ApprovalDecision.deny("plan aborted by user")
122
+
123
+
124
+ def _format_params(params: dict) -> str:
125
+ """Return a short one-line preview of tool params."""
126
+ parts = []
127
+ for key in ("path", "command", "url", "query", "symbol", "action"):
128
+ if key in params:
129
+ val = str(params[key])
130
+ if len(val) > 80:
131
+ val = val[:77] + "…"
132
+ parts.append(f"{key}={val!r}")
133
+ if not parts and params:
134
+ first_key = next(iter(params))
135
+ val = str(params[first_key])
136
+ if len(val) > 80:
137
+ val = val[:77] + "…"
138
+ parts.append(f"{first_key}={val!r}")
139
+ return " ".join(parts)
@@ -0,0 +1,15 @@
1
+ """Helpers for generating offline-safe Plotly HTML fragments."""
2
+ from __future__ import annotations
3
+
4
+ from functools import lru_cache
5
+
6
+
7
+ @lru_cache(maxsize=1)
8
+ def plotly_script_tag() -> str:
9
+ """Return an inline Plotly <script> tag when the package is available."""
10
+ try:
11
+ from plotly.offline import get_plotlyjs
12
+
13
+ return f"<script>{get_plotlyjs()}</script>"
14
+ except Exception:
15
+ return '<script src="https://cdn.plot.ly/plotly-2.35.2.min.js"></script>'
@@ -0,0 +1,202 @@
1
+ """Local LLM-prediction outcome tracker — the finance ground-truth loop.
2
+
3
+ The market is an objective judge that Claude Code can't have: when Aria says
4
+ "NVDA 看多", the market settles it. We record directional/price calls at T=0,
5
+ verify them against real moves at T+N, and turn the result into a DPO signal:
6
+ correct call → "chosen" training example
7
+ wrong call → "rejected" training example
8
+
9
+ Local-first: predictions live in ~/.arthera/predictions.jsonl; settled DPO
10
+ signals are appended to the FeedbackStore (shared=False until /privacy opt-in).
11
+ Honors the ARIA_NO_TELEMETRY kill switch. Never raises into the chat flow.
12
+ """
13
+ from __future__ import annotations
14
+
15
+ import json
16
+ import os
17
+ import re
18
+ import time
19
+ from datetime import datetime, timezone
20
+ from pathlib import Path
21
+ from typing import Any, Callable, Dict, List, Optional
22
+
23
+ # Directional keywords (zh + en).
24
+ _BULL = ("看多", "看涨", "买入", "增持", "做多", "上涨", "bullish", "buy", "long", "outperform")
25
+ _BEAR = ("看空", "看跌", "卖出", "减持", "做空", "下跌", "bearish", "sell", "short", "underperform")
26
+ _NEUTRAL = ("中性", "震荡", "观望", "持有", "neutral", "hold", "sideways")
27
+
28
+ _TARGET_RE = re.compile(
29
+ r"(?:目标价|价格目标|target\s*price)[::\s]*(?:约|~)?\s*[\$¥]?\s*([\d,]+\.?\d*)",
30
+ re.IGNORECASE,
31
+ )
32
+
33
+ # Settlement threshold: a directional call is "correct" only if the move
34
+ # exceeds this magnitude (avoids crediting noise as a hit).
35
+ _MOVE_THRESHOLD = 0.01 # 1%
36
+
37
+
38
+ def detect_direction(text: str) -> str:
39
+ """Return 'bullish' | 'bearish' | 'neutral' | '' from a response."""
40
+ if not text:
41
+ return ""
42
+ t = text.lower()
43
+ bull = sum(1 for k in _BULL if k.lower() in t)
44
+ bear = sum(1 for k in _BEAR if k.lower() in t)
45
+ neut = sum(1 for k in _NEUTRAL if k.lower() in t)
46
+ if bull == 0 and bear == 0 and neut == 0:
47
+ return ""
48
+ if bull > bear and bull >= neut:
49
+ return "bullish"
50
+ if bear > bull and bear >= neut:
51
+ return "bearish"
52
+ if neut >= bull and neut >= bear:
53
+ return "neutral"
54
+ return ""
55
+
56
+
57
+ def extract_target_price(text: str) -> Optional[float]:
58
+ m = _TARGET_RE.search(text or "")
59
+ if not m:
60
+ return None
61
+ try:
62
+ return float(m.group(1).replace(",", ""))
63
+ except ValueError:
64
+ return None
65
+
66
+
67
+ class PredictionTracker:
68
+ """Records and settles LLM market calls against real prices."""
69
+
70
+ def __init__(self, config_dir: Path):
71
+ self.path = Path(config_dir) / "predictions.jsonl"
72
+
73
+ # ── record (T=0) ──────────────────────────────────────────────────────────
74
+ def record(self, *, symbol: str, response_text: str, entry_price: float,
75
+ session_id: str = "", model: str = "") -> Optional[Dict[str, Any]]:
76
+ """Record a directional call if one is detectable. Returns the entry or None."""
77
+ if os.environ.get("ARIA_NO_TELEMETRY"):
78
+ return None
79
+ if not symbol or not entry_price or entry_price <= 0:
80
+ return None
81
+ direction = detect_direction(response_text)
82
+ if not direction:
83
+ return None
84
+ entry = {
85
+ "id": f"{symbol}_{int(time.time())}",
86
+ "symbol": symbol.upper(),
87
+ "direction": direction,
88
+ "target": extract_target_price(response_text),
89
+ "entry_price": round(float(entry_price), 4),
90
+ "excerpt": (response_text or "")[:400],
91
+ "session_id": session_id,
92
+ "model": model,
93
+ "created_at": datetime.now(timezone.utc).isoformat(),
94
+ "status": "pending",
95
+ }
96
+ try:
97
+ self.path.parent.mkdir(parents=True, exist_ok=True)
98
+ with self.path.open("a", encoding="utf-8") as fh:
99
+ fh.write(json.dumps(entry, ensure_ascii=False) + "\n")
100
+ except Exception:
101
+ return None
102
+ return entry
103
+
104
+ # ── settle (T=N) ──────────────────────────────────────────────────────────
105
+ def _load(self) -> List[Dict[str, Any]]:
106
+ if not self.path.exists():
107
+ return []
108
+ out = []
109
+ try:
110
+ for line in self.path.read_text(encoding="utf-8").splitlines():
111
+ if line.strip():
112
+ out.append(json.loads(line))
113
+ except Exception:
114
+ return []
115
+ return out
116
+
117
+ def _save(self, rows: List[Dict[str, Any]]) -> None:
118
+ try:
119
+ with self.path.open("w", encoding="utf-8") as fh:
120
+ for r in rows:
121
+ fh.write(json.dumps(r, ensure_ascii=False) + "\n")
122
+ except Exception:
123
+ pass
124
+
125
+ @staticmethod
126
+ def _is_correct(direction: str, entry: float, now: float) -> Optional[bool]:
127
+ move = (now - entry) / entry if entry else 0.0
128
+ if direction == "bullish":
129
+ return move > _MOVE_THRESHOLD
130
+ if direction == "bearish":
131
+ return move < -_MOVE_THRESHOLD
132
+ if direction == "neutral":
133
+ return abs(move) <= _MOVE_THRESHOLD
134
+ return None
135
+
136
+ def verify_pending(self, quote_fn: Callable[[str], Optional[float]],
137
+ min_age_hours: float = 24.0,
138
+ emit_feedback: Optional[Callable[[str, str, str], None]] = None
139
+ ) -> Dict[str, int]:
140
+ """Settle pending predictions older than min_age_hours against live prices.
141
+
142
+ quote_fn(symbol) -> current price (or None).
143
+ emit_feedback(rating, message, comment) -> append a DPO signal (optional).
144
+ Returns {"settled": n, "correct": c, "wrong": w}.
145
+ """
146
+ if os.environ.get("ARIA_NO_TELEMETRY"):
147
+ return {"settled": 0, "correct": 0, "wrong": 0}
148
+ rows = self._load()
149
+ if not rows:
150
+ return {"settled": 0, "correct": 0, "wrong": 0}
151
+ now_ts = datetime.now(timezone.utc)
152
+ settled = correct = wrong = 0
153
+ for r in rows:
154
+ if r.get("status") != "pending":
155
+ continue
156
+ try:
157
+ created = datetime.fromisoformat(r["created_at"])
158
+ age_h = (now_ts - created).total_seconds() / 3600.0
159
+ except Exception:
160
+ continue
161
+ if age_h < min_age_hours:
162
+ continue
163
+ price_now = None
164
+ try:
165
+ price_now = quote_fn(r["symbol"])
166
+ except Exception:
167
+ price_now = None
168
+ if not price_now or price_now <= 0:
169
+ continue
170
+ ok = self._is_correct(r["direction"], r["entry_price"], float(price_now))
171
+ if ok is None:
172
+ continue
173
+ r["status"] = "correct" if ok else "wrong"
174
+ r["exit_price"] = round(float(price_now), 4)
175
+ r["settled_at"] = now_ts.isoformat()
176
+ settled += 1
177
+ correct += int(ok)
178
+ wrong += int(not ok)
179
+ if emit_feedback:
180
+ _move = (float(price_now) - r["entry_price"]) / r["entry_price"] * 100
181
+ _msg = r.get("excerpt", "")
182
+ _cmt = (f"{r['symbol']} {r['direction']} "
183
+ f"{r['entry_price']}→{price_now} ({_move:+.1f}%) "
184
+ f"= {'命中' if ok else '落空'}")
185
+ emit_feedback("prediction_correct" if ok else "prediction_wrong", _msg, _cmt)
186
+ if settled:
187
+ self._save(rows)
188
+ return {"settled": settled, "correct": correct, "wrong": wrong}
189
+
190
+ def accuracy(self) -> Dict[str, Any]:
191
+ rows = self._load()
192
+ done = [r for r in rows if r.get("status") in ("correct", "wrong")]
193
+ pend = [r for r in rows if r.get("status") == "pending"]
194
+ n = len(done)
195
+ c = sum(1 for r in done if r["status"] == "correct")
196
+ return {
197
+ "total": len(rows),
198
+ "settled": n,
199
+ "pending": len(pend),
200
+ "correct": c,
201
+ "accuracy": round(c / n, 3) if n else None,
202
+ }