aria-code 0.167.0__py3-none-win_amd64.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 (601) hide show
  1. aria_bots/__init__.py +7 -0
  2. aria_bots/channels/README.md +97 -0
  3. aria_bots/channels/__init__.py +1 -0
  4. aria_bots/channels/approvals.py +263 -0
  5. aria_bots/channels/conversation.py +280 -0
  6. aria_bots/channels/digest.py +186 -0
  7. aria_bots/channels/registry.py +95 -0
  8. aria_bots/engine.py +144 -0
  9. aria_bots/feishu_bot.py +1385 -0
  10. aria_bots/logistics/__init__.py +1 -0
  11. aria_bots/logistics/carriers.py +253 -0
  12. aria_bots/logistics/freight.py +154 -0
  13. aria_bots/logistics/inventory.py +242 -0
  14. aria_bots/logistics/mcp_server.py +156 -0
  15. aria_bots/logistics/records.py +119 -0
  16. aria_bots/logistics/tenancy.py +152 -0
  17. aria_bots/market.py +91 -0
  18. aria_bots/relay_client.py +326 -0
  19. aria_bots/telegram_bot.py +299 -0
  20. aria_code/__init__.py +111 -0
  21. aria_code/_bin/aria-native.exe +0 -0
  22. aria_code/_bin/aria-runtime.exe +0 -0
  23. aria_code/_version.py +20 -0
  24. aria_code/account_memory.py +296 -0
  25. aria_code/account_session.py +166 -0
  26. aria_code/adk_apps/__init__.py +1 -0
  27. aria_code/adk_apps/aria_code_review/__init__.py +1 -0
  28. aria_code/adk_apps/aria_code_review/agent.py +32 -0
  29. aria_code/adk_apps/aria_research/__init__.py +1 -0
  30. aria_code/adk_apps/aria_research/agent.py +31 -0
  31. aria_code/agents/__init__.py +49 -0
  32. aria_code/agents/base.py +329 -0
  33. aria_code/agents/code_review.py +200 -0
  34. aria_code/agents/deep/__init__.py +37 -0
  35. aria_code/agents/deep/calibration_loop.py +144 -0
  36. aria_code/agents/deep/critic.py +125 -0
  37. aria_code/agents/deep/deepen.py +193 -0
  38. aria_code/agents/deep/models.py +149 -0
  39. aria_code/agents/deep/pipeline.py +164 -0
  40. aria_code/agents/deep/quant_fusion.py +192 -0
  41. aria_code/agents/deep/themes.py +95 -0
  42. aria_code/agents/deep/tiers.py +106 -0
  43. aria_code/agents/engineering/__init__.py +14 -0
  44. aria_code/agents/engineering/coder.py +222 -0
  45. aria_code/agents/engineering/tester.py +145 -0
  46. aria_code/agents/financial/__init__.py +21 -0
  47. aria_code/agents/financial/cashflow_burn.py +119 -0
  48. aria_code/agents/financial/catalyst.py +279 -0
  49. aria_code/agents/financial/corporate_finance.py +175 -0
  50. aria_code/agents/financial/debate.py +224 -0
  51. aria_code/agents/financial/earnings.py +315 -0
  52. aria_code/agents/financial/fundamental.py +178 -0
  53. aria_code/agents/financial/macro.py +111 -0
  54. aria_code/agents/financial/news.py +231 -0
  55. aria_code/agents/financial/risk.py +146 -0
  56. aria_code/agents/financial/sector.py +279 -0
  57. aria_code/agents/financial/strategist.py +121 -0
  58. aria_code/agents/financial/stripe_revenue.py +127 -0
  59. aria_code/agents/financial/synthesis.py +274 -0
  60. aria_code/agents/financial/technical.py +277 -0
  61. aria_code/agents/orchestrator.py +44 -0
  62. aria_code/agents/portfolio_agent.py +392 -0
  63. aria_code/agents/realty/__init__.py +62 -0
  64. aria_code/agents/realty/asset_diagnosis.py +152 -0
  65. aria_code/agents/realty/business_match.py +166 -0
  66. aria_code/agents/realty/cashflow_verify.py +209 -0
  67. aria_code/agents/realty/contract_rules.py +210 -0
  68. aria_code/agents/realty/energy_anomaly.py +189 -0
  69. aria_code/agents/realty/exit_settlement.py +208 -0
  70. aria_code/agents/realty/fulfillment_risk.py +206 -0
  71. aria_code/agents/realty/ops_optimize.py +160 -0
  72. aria_code/agents/realty/revenue_share.py +215 -0
  73. aria_code/agents/registry.py +168 -0
  74. aria_code/agents/signal_scheme.py +111 -0
  75. aria_code/agents/sports/__init__.py +0 -0
  76. aria_code/agents/sports/football_agent.py +197 -0
  77. aria_code/agents/supervisor.py +113 -0
  78. aria_code/agents/team.py +500 -0
  79. aria_code/agents/video/__init__.py +16 -0
  80. aria_code/agents/video/director.py +376 -0
  81. aria_code/agents/video/qa_agent.py +143 -0
  82. aria_code/agents/video/script_doctor.py +112 -0
  83. aria_code/agents/warehouse/__init__.py +25 -0
  84. aria_code/agents/warehouse/contracts.py +26 -0
  85. aria_code/agents/warehouse/dashboard.py +155 -0
  86. aria_code/agents/warehouse/fulfillment_leadtime.py +95 -0
  87. aria_code/agents/warehouse/inbound_exceptions.py +25 -0
  88. aria_code/agents/warehouse/inventory_health.py +24 -0
  89. aria_code/agents/warehouse/local_run.py +71 -0
  90. aria_code/agents/warehouse/local_snapshot.py +132 -0
  91. aria_code/agents/warehouse/logistics_cost.py +84 -0
  92. aria_code/agents/warehouse/logistics_sync.py +21 -0
  93. aria_code/agents/warehouse/navigation.schema.json +110 -0
  94. aria_code/agents/warehouse/task_agent.py +172 -0
  95. aria_code/agents/warehouse/workflow.py +31 -0
  96. aria_code/aliyun_data_client.py +4 -0
  97. aria_code/apps/README.md +12 -0
  98. aria_code/apps/__init__.py +2 -0
  99. aria_code/apps/channels/README.md +9 -0
  100. aria_code/apps/channels/__init__.py +17 -0
  101. aria_code/apps/channels/approvals.py +11 -0
  102. aria_code/apps/channels/conversation.py +11 -0
  103. aria_code/apps/channels/digest.py +11 -0
  104. aria_code/apps/channels/intake.py +92 -0
  105. aria_code/apps/channels/registry.py +11 -0
  106. aria_code/apps/channels/tradingview.py +94 -0
  107. aria_code/apps/cli/README.md +13 -0
  108. aria_code/apps/cli/__init__.py +2 -0
  109. aria_code/apps/cli/_optional.py +120 -0
  110. aria_code/apps/cli/app_server.py +656 -0
  111. aria_code/apps/cli/auto_update.py +125 -0
  112. aria_code/apps/cli/bootstrap.py +206 -0
  113. aria_code/apps/cli/broker_render.py +206 -0
  114. aria_code/apps/cli/chat_turn.py +1327 -0
  115. aria_code/apps/cli/cloud_models.py +231 -0
  116. aria_code/apps/cli/codegen_paths.py +29 -0
  117. aria_code/apps/cli/commands/__init__.py +34 -0
  118. aria_code/apps/cli/commands/_business_render.py +78 -0
  119. aria_code/apps/cli/commands/_ui.py +71 -0
  120. aria_code/apps/cli/commands/analysis_cmds.py +378 -0
  121. aria_code/apps/cli/commands/ashare_prediction_cmds.py +327 -0
  122. aria_code/apps/cli/commands/auth_cmds.py +215 -0
  123. aria_code/apps/cli/commands/backtest_cmds.py +2518 -0
  124. aria_code/apps/cli/commands/broker_cmds.py +1236 -0
  125. aria_code/apps/cli/commands/business_workflow_cmds.py +379 -0
  126. aria_code/apps/cli/commands/canvas_cmds.py +77 -0
  127. aria_code/apps/cli/commands/catalog.py +189 -0
  128. aria_code/apps/cli/commands/core_cmds.py +2748 -0
  129. aria_code/apps/cli/commands/data_cmds.py +521 -0
  130. aria_code/apps/cli/commands/diagnostic_cmds.py +285 -0
  131. aria_code/apps/cli/commands/diagnostic_ops_cmds.py +813 -0
  132. aria_code/apps/cli/commands/engineering_cmds.py +399 -0
  133. aria_code/apps/cli/commands/file_cmds.py +312 -0
  134. aria_code/apps/cli/commands/finance_service_cmds.py +60 -0
  135. aria_code/apps/cli/commands/fx_commodity_cmds.py +123 -0
  136. aria_code/apps/cli/commands/market.py +544 -0
  137. aria_code/apps/cli/commands/market_cmds.py +1419 -0
  138. aria_code/apps/cli/commands/market_context.py +432 -0
  139. aria_code/apps/cli/commands/market_render.py +7 -0
  140. aria_code/apps/cli/commands/model_cmds.py +2374 -0
  141. aria_code/apps/cli/commands/ops_cmds.py +721 -0
  142. aria_code/apps/cli/commands/orchestrator_cmds.py +181 -0
  143. aria_code/apps/cli/commands/pdf_export_cmds.py +125 -0
  144. aria_code/apps/cli/commands/portfolio_cmds.py +1316 -0
  145. aria_code/apps/cli/commands/report.py +476 -0
  146. aria_code/apps/cli/commands/scaffold_templates.py +617 -0
  147. aria_code/apps/cli/commands/session_cmds.py +236 -0
  148. aria_code/apps/cli/commands/session_ux_cmds.py +359 -0
  149. aria_code/apps/cli/commands/team.py +723 -0
  150. aria_code/apps/cli/commands/team_render.py +8 -0
  151. aria_code/apps/cli/commands/ui_cmds.py +401 -0
  152. aria_code/apps/cli/commands/warehouse_cmds.py +297 -0
  153. aria_code/apps/cli/commands/workflow_cmds.py +629 -0
  154. aria_code/apps/cli/commands/workspace_cmds.py +1543 -0
  155. aria_code/apps/cli/config_paths.py +73 -0
  156. aria_code/apps/cli/config_store.py +158 -0
  157. aria_code/apps/cli/constants.py +88 -0
  158. aria_code/apps/cli/context.py +34 -0
  159. aria_code/apps/cli/conversation_policy.py +53 -0
  160. aria_code/apps/cli/deterministic.py +200 -0
  161. aria_code/apps/cli/direct.py +48 -0
  162. aria_code/apps/cli/earnings_view.py +172 -0
  163. aria_code/apps/cli/endpoint_migration.py +64 -0
  164. aria_code/apps/cli/exec_events.py +255 -0
  165. aria_code/apps/cli/file_references.py +155 -0
  166. aria_code/apps/cli/finance_service_catalog.py +111 -0
  167. aria_code/apps/cli/football_reports.py +231 -0
  168. aria_code/apps/cli/github_app_auth.py +135 -0
  169. aria_code/apps/cli/google_login.py +239 -0
  170. aria_code/apps/cli/handlers/__init__.py +11 -0
  171. aria_code/apps/cli/handlers/broker_handlers.py +122 -0
  172. aria_code/apps/cli/handlers/chart_handlers.py +1314 -0
  173. aria_code/apps/cli/handlers/market_handlers.py +2570 -0
  174. aria_code/apps/cli/handlers/realty_handlers.py +114 -0
  175. aria_code/apps/cli/handlers/sports_handlers.py +22 -0
  176. aria_code/apps/cli/handlers/strategy_advice.py +82 -0
  177. aria_code/apps/cli/headless.py +352 -0
  178. aria_code/apps/cli/helpers.py +326 -0
  179. aria_code/apps/cli/hooks.py +180 -0
  180. aria_code/apps/cli/i18n.py +310 -0
  181. aria_code/apps/cli/intent.py +136 -0
  182. aria_code/apps/cli/intent_router.py +305 -0
  183. aria_code/apps/cli/intent_shadow.py +72 -0
  184. aria_code/apps/cli/intent_signals.py +347 -0
  185. aria_code/apps/cli/lifecycle_hooks.py +48 -0
  186. aria_code/apps/cli/local_tool_schemas.py +550 -0
  187. aria_code/apps/cli/main.py +39 -0
  188. aria_code/apps/cli/market_hours.py +100 -0
  189. aria_code/apps/cli/market_metadata.py +135 -0
  190. aria_code/apps/cli/market_universe.py +487 -0
  191. aria_code/apps/cli/message_processing.py +310 -0
  192. aria_code/apps/cli/mixin_binding.py +32 -0
  193. aria_code/apps/cli/model_catalog.py +652 -0
  194. aria_code/apps/cli/model_probe.py +169 -0
  195. aria_code/apps/cli/model_retirement.py +65 -0
  196. aria_code/apps/cli/native_branding.py +12 -0
  197. aria_code/apps/cli/native_bridge.py +118 -0
  198. aria_code/apps/cli/native_entry.py +58 -0
  199. aria_code/apps/cli/pdf_report.py +977 -0
  200. aria_code/apps/cli/plan_mode.py +139 -0
  201. aria_code/apps/cli/plotly_html.py +15 -0
  202. aria_code/apps/cli/prediction_feedback.py +202 -0
  203. aria_code/apps/cli/preflight.py +502 -0
  204. aria_code/apps/cli/project_aria.py +60 -0
  205. aria_code/apps/cli/prompt_assembly.py +78 -0
  206. aria_code/apps/cli/prompts/__init__.py +0 -0
  207. aria_code/apps/cli/prompts/coding.py +71 -0
  208. aria_code/apps/cli/prompts/select.py +193 -0
  209. aria_code/apps/cli/prompts/system_prompts.py +562 -0
  210. aria_code/apps/cli/prompts/ui.py +436 -0
  211. aria_code/apps/cli/provider_endpoints.py +237 -0
  212. aria_code/apps/cli/provider_keys.py +73 -0
  213. aria_code/apps/cli/providers/__init__.py +1 -0
  214. aria_code/apps/cli/providers/base.py +775 -0
  215. aria_code/apps/cli/providers/chat_routing.py +139 -0
  216. aria_code/apps/cli/providers/collaboration.py +98 -0
  217. aria_code/apps/cli/providers/llm/__init__.py +1 -0
  218. aria_code/apps/cli/providers/llm/offline_responses.py +68 -0
  219. aria_code/apps/cli/providers/llm/ollama_stream.py +1574 -0
  220. aria_code/apps/cli/providers/llm/response_cache.py +60 -0
  221. aria_code/apps/cli/providers/llm/sse_stream.py +298 -0
  222. aria_code/apps/cli/providers/runtime_bridge.py +586 -0
  223. aria_code/apps/cli/providers/vertexai_stream.py +592 -0
  224. aria_code/apps/cli/release_download.py +159 -0
  225. aria_code/apps/cli/review_runner.py +111 -0
  226. aria_code/apps/cli/runtime_consumer.py +769 -0
  227. aria_code/apps/cli/sandbox.py +32 -0
  228. aria_code/apps/cli/session_export.py +120 -0
  229. aria_code/apps/cli/session_jsonl.py +208 -0
  230. aria_code/apps/cli/session_refresh.py +123 -0
  231. aria_code/apps/cli/session_store.py +125 -0
  232. aria_code/apps/cli/skills_catalog.py +273 -0
  233. aria_code/apps/cli/task_isolation.py +211 -0
  234. aria_code/apps/cli/terminal_chrome.py +412 -0
  235. aria_code/apps/cli/todo_tracker.py +190 -0
  236. aria_code/apps/cli/tool_executor.py +932 -0
  237. aria_code/apps/cli/tool_registry.py +34 -0
  238. aria_code/apps/cli/tool_scope.py +113 -0
  239. aria_code/apps/cli/tools/__init__.py +40 -0
  240. aria_code/apps/cli/tools/context.py +46 -0
  241. aria_code/apps/cli/tools/file_tools.py +181 -0
  242. aria_code/apps/cli/tools/market_tools.py +626 -0
  243. aria_code/apps/cli/tools/notebook_tools.py +111 -0
  244. aria_code/apps/cli/tools/system_tools.py +656 -0
  245. aria_code/apps/cli/tools/write_tools.py +961 -0
  246. aria_code/apps/cli/tradingview_bridge.py +529 -0
  247. aria_code/apps/cli/transactions.py +269 -0
  248. aria_code/apps/cli/turn_planning.py +137 -0
  249. aria_code/apps/cli/update_check.py +257 -0
  250. aria_code/apps/cli/updater.py +373 -0
  251. aria_code/apps/cli/utils/__init__.py +0 -0
  252. aria_code/apps/cli/utils/market_detect.py +1663 -0
  253. aria_code/apps/cli/web_login.py +136 -0
  254. aria_code/apps/cli/workflow_runner.py +127 -0
  255. aria_code/apps/cli/workspace_route.py +121 -0
  256. aria_code/apps/daemon/README.md +14 -0
  257. aria_code/apps/vscode/README.md +115 -0
  258. aria_code/apps/vscode/package.json +70 -0
  259. aria_code/aria_cli.py +5244 -0
  260. aria_code/aria_daemon.py +1372 -0
  261. aria_code/aria_feishu_bot.py +16 -0
  262. aria_code/aria_mcp_server.py +61 -0
  263. aria_code/aria_relay_client.py +4 -0
  264. aria_code/aria_telegram_bot.py +11 -0
  265. aria_code/ariarc.py +385 -0
  266. aria_code/artifacts.py +581 -0
  267. aria_code/backtest_engine.py +4 -0
  268. aria_code/backtest_report.py +4 -0
  269. aria_code/brokers/__init__.py +78 -0
  270. aria_code/brokers/automation.py +193 -0
  271. aria_code/brokers/base.py +231 -0
  272. aria_code/brokers/capabilities.py +264 -0
  273. aria_code/brokers/cn/__init__.py +10 -0
  274. aria_code/brokers/cn/easytrader_broker.py +193 -0
  275. aria_code/brokers/cn/futu_broker.py +194 -0
  276. aria_code/brokers/cn/longbridge_broker.py +190 -0
  277. aria_code/brokers/cn/tiger_broker.py +196 -0
  278. aria_code/brokers/cn/xtquant_broker.py +225 -0
  279. aria_code/brokers/config.py +414 -0
  280. aria_code/brokers/intl/__init__.py +5 -0
  281. aria_code/brokers/intl/alpaca_broker.py +183 -0
  282. aria_code/brokers/intl/ibkr_broker.py +215 -0
  283. aria_code/brokers/intl/trading212_broker.py +183 -0
  284. aria_code/brokers/intl/webull_broker.py +156 -0
  285. aria_code/brokers/paper_broker.py +266 -0
  286. aria_code/brokers/planning.py +296 -0
  287. aria_code/brokers/registry.py +213 -0
  288. aria_code/brokers/trading.py +267 -0
  289. aria_code/canva_client.py +4 -0
  290. aria_code/change_store.py +127 -0
  291. aria_code/clients/__init__.py +0 -0
  292. aria_code/clients/aliyun_data_client.py +660 -0
  293. aria_code/clients/aria_relay_client.py +16 -0
  294. aria_code/clients/canva_client.py +284 -0
  295. aria_code/clients/figma_client.py +100 -0
  296. aria_code/clients/football_data_client.py +1671 -0
  297. aria_code/clients/kling_video_client.py +182 -0
  298. aria_code/clients/market_data_client.py +1985 -0
  299. aria_code/clients/openai_image_client.py +242 -0
  300. aria_code/clients/runway_video_client.py +157 -0
  301. aria_code/clients/warehouse_erp_client.py +105 -0
  302. aria_code/cloud_memory.py +190 -0
  303. aria_code/command_safety.py +19 -0
  304. aria_code/computer_use_server.py +276 -0
  305. aria_code/computer_use_tools.py +4 -0
  306. aria_code/dashboard_generator.py +579 -0
  307. aria_code/data_analysis_tools.py +4 -0
  308. aria_code/data_cleaner.py +483 -0
  309. aria_code/data_service.py +513 -0
  310. aria_code/datasources/__init__.py +23 -0
  311. aria_code/datasources/base.py +166 -0
  312. aria_code/datasources/router.py +253 -0
  313. aria_code/datasources/sec_statements.py +217 -0
  314. aria_code/datasources/sources/__init__.py +15 -0
  315. aria_code/datasources/sources/akshare_source.py +269 -0
  316. aria_code/datasources/sources/alpha_vantage_source.py +203 -0
  317. aria_code/datasources/sources/edgar_source.py +219 -0
  318. aria_code/datasources/sources/finnhub_source.py +198 -0
  319. aria_code/datasources/sources/fred_source.py +223 -0
  320. aria_code/datasources/sources/tushare_source.py +143 -0
  321. aria_code/datasources/sources/web_scraper_source.py +278 -0
  322. aria_code/datasources/sources/world_bank_source.py +206 -0
  323. aria_code/datasources/sources/yfinance_source.py +152 -0
  324. aria_code/doctor.py +860 -0
  325. aria_code/domain/__init__.py +0 -0
  326. aria_code/domain/_finance_core/__init__.py +5 -0
  327. aria_code/domain/_finance_core/backtest_engine.py +325 -0
  328. aria_code/domain/_finance_core/performance_stats.py +101 -0
  329. aria_code/domain/backtest_engine.py +75 -0
  330. aria_code/domain/backtest_report.py +488 -0
  331. aria_code/domain/finance_formulas.py +389 -0
  332. aria_code/domain/performance_stats.py +6 -0
  333. aria_code/domain/portfolio_ledger.py +307 -0
  334. aria_code/domain/strategy_vault.py +421 -0
  335. aria_code/evals/__init__.py +37 -0
  336. aria_code/evals/behavior.py +113 -0
  337. aria_code/evals/gap.py +93 -0
  338. aria_code/evals/harness.py +949 -0
  339. aria_code/evals/review_probe.py +132 -0
  340. aria_code/evals/runner.py +425 -0
  341. aria_code/evals/scorecard.py +322 -0
  342. aria_code/evals/summary.py +125 -0
  343. aria_code/external_agent_runner.py +115 -0
  344. aria_code/figma_client.py +4 -0
  345. aria_code/file_analysis_tools.py +4 -0
  346. aria_code/finance_formulas.py +4 -0
  347. aria_code/football_data_client.py +4 -0
  348. aria_code/image_gen_tools.py +4 -0
  349. aria_code/intent_classifier.py +459 -0
  350. aria_code/kling_video_client.py +4 -0
  351. aria_code/licensing.py +151 -0
  352. aria_code/local_finance_tools.py +4 -0
  353. aria_code/local_image_provider.py +4 -0
  354. aria_code/local_llm_provider.py +4 -0
  355. aria_code/macro_tools.py +4 -0
  356. aria_code/markdown_pdf.py +289 -0
  357. aria_code/market_data_client.py +4 -0
  358. aria_code/mcp_client.py +744 -0
  359. aria_code/memory_manager.py +273 -0
  360. aria_code/model_capability.py +512 -0
  361. aria_code/notification_tools.py +4 -0
  362. aria_code/openai_image_client.py +4 -0
  363. aria_code/packages/__init__.py +26 -0
  364. aria_code/packages/adk_bridge/__init__.py +11 -0
  365. aria_code/packages/adk_bridge/code_review_tools.py +49 -0
  366. aria_code/packages/adk_bridge/market_tools.py +125 -0
  367. aria_code/packages/aria_agents/__init__.py +5 -0
  368. aria_code/packages/aria_agents/manifest.py +78 -0
  369. aria_code/packages/aria_core/__init__.py +34 -0
  370. aria_code/packages/aria_core/architecture.py +269 -0
  371. aria_code/packages/aria_core/export.py +147 -0
  372. aria_code/packages/aria_core/manifest.py +65 -0
  373. aria_code/packages/aria_core/paths.py +57 -0
  374. aria_code/packages/aria_core/secure_file.py +68 -0
  375. aria_code/packages/aria_infra/__init__.py +15 -0
  376. aria_code/packages/aria_infra/arthera.py +58 -0
  377. aria_code/packages/aria_infra/doctor.py +246 -0
  378. aria_code/packages/aria_infra/product.py +40 -0
  379. aria_code/packages/aria_mcp/__init__.py +25 -0
  380. aria_code/packages/aria_mcp/bridge.py +232 -0
  381. aria_code/packages/aria_mcp/circuit.py +82 -0
  382. aria_code/packages/aria_mcp/config.py +162 -0
  383. aria_code/packages/aria_mcp/installer.py +95 -0
  384. aria_code/packages/aria_mcp/server.py +1705 -0
  385. aria_code/packages/aria_mcp/tools.py +81 -0
  386. aria_code/packages/aria_sdk/__init__.py +19 -0
  387. aria_code/packages/aria_sdk/client.py +393 -0
  388. aria_code/packages/aria_sdk/providers.py +70 -0
  389. aria_code/packages/aria_sdk/streaming.py +75 -0
  390. aria_code/packages/aria_sdk/types.py +86 -0
  391. aria_code/packages/aria_services/__init__.py +92 -0
  392. aria_code/packages/aria_services/cache.py +60 -0
  393. aria_code/packages/aria_services/context.py +356 -0
  394. aria_code/packages/aria_services/context_checkpoints.py +157 -0
  395. aria_code/packages/aria_services/data.py +11 -0
  396. aria_code/packages/aria_services/provider_health.py +304 -0
  397. aria_code/packages/aria_services/references.py +247 -0
  398. aria_code/packages/aria_services/registry.py +249 -0
  399. aria_code/packages/aria_services/research_protocol.py +137 -0
  400. aria_code/packages/aria_services/research_quality.py +186 -0
  401. aria_code/packages/aria_services/settings.py +160 -0
  402. aria_code/packages/aria_services/usage.py +151 -0
  403. aria_code/packages/aria_skills/__init__.py +46 -0
  404. aria_code/packages/aria_skills/catalog.py +149 -0
  405. aria_code/packages/aria_skills/loader.py +455 -0
  406. aria_code/packages/aria_skills/registry.py +84 -0
  407. aria_code/packages/aria_tools/__init__.py +5 -0
  408. aria_code/packages/aria_tools/financial/__init__.py +5 -0
  409. aria_code/packages/aria_tools/financial/_paths.py +92 -0
  410. aria_code/packages/aria_tools/registry.py +129 -0
  411. aria_code/packages/quant_engine/__init__.py +33 -0
  412. aria_code/packages/quant_engine/_namespace.py +24 -0
  413. aria_code/packages/quant_engine/backtest/__init__.py +10 -0
  414. aria_code/packages/quant_engine/backtest/core.py +53 -0
  415. aria_code/packages/quant_engine/backtest/engine.py +102 -0
  416. aria_code/packages/quant_engine/portfolio/__init__.py +9 -0
  417. aria_code/packages/quant_engine/portfolio/optimizer.py +85 -0
  418. aria_code/packages/quant_engine/sports/__init__.py +76 -0
  419. aria_code/packages/quant_engine/sports/calibrator.py +354 -0
  420. aria_code/packages/quant_engine/sports/dixon_coles.py +234 -0
  421. aria_code/packages/quant_engine/sports/elo.py +300 -0
  422. aria_code/packages/quant_engine/sports/form.py +188 -0
  423. aria_code/packages/quant_engine/sports/h2h.py +195 -0
  424. aria_code/packages/quant_engine/sports/predictor.py +312 -0
  425. aria_code/packages/quant_engine/sports/tracker.py +665 -0
  426. aria_code/packages/quant_engine/stochastic/__init__.py +31 -0
  427. aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +195 -0
  428. aria_code/packages/quant_engine/stochastic/ito_calculus.py +477 -0
  429. aria_code/packages/quant_engine/stochastic/kelly_criterion.py +181 -0
  430. aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +95 -0
  431. aria_code/packages/quant_engine/stochastic/options_pricing.py +576 -0
  432. aria_code/packages/quant_engine/stochastic/stochastic_processes.py +90 -0
  433. aria_code/packs/__init__.py +85 -0
  434. aria_code/packs/base.py +168 -0
  435. aria_code/packs/finance/__init__.py +250 -0
  436. aria_code/packs/healthcare/__init__.py +40 -0
  437. aria_code/packs/logistics/__init__.py +171 -0
  438. aria_code/packs/payments/__init__.py +139 -0
  439. aria_code/packs/realty/__init__.py +190 -0
  440. aria_code/packs/registry.py +202 -0
  441. aria_code/packs/rules.py +90 -0
  442. aria_code/plan_utils.py +194 -0
  443. aria_code/plugin_loader.py +328 -0
  444. aria_code/portfolio_ledger.py +4 -0
  445. aria_code/preview_server.py +449 -0
  446. aria_code/privacy/__init__.py +5 -0
  447. aria_code/privacy/feedback.py +123 -0
  448. aria_code/project_review.py +278 -0
  449. aria_code/project_review_api.py +235 -0
  450. aria_code/project_review_server.py +18 -0
  451. aria_code/project_tools.py +4 -0
  452. aria_code/providers/__init__.py +30 -0
  453. aria_code/providers/google_video_provider.py +256 -0
  454. aria_code/providers/llm/__init__.py +19 -0
  455. aria_code/providers/llm/anthropic.py +184 -0
  456. aria_code/providers/llm/arthera_gateway.py +90 -0
  457. aria_code/providers/llm/autoconfig.py +213 -0
  458. aria_code/providers/llm/base.py +139 -0
  459. aria_code/providers/llm/custom.py +158 -0
  460. aria_code/providers/llm/ollama.py +137 -0
  461. aria_code/providers/llm/openai_compat.py +350 -0
  462. aria_code/providers/llm/registry.py +457 -0
  463. aria_code/providers/local_image_provider.py +202 -0
  464. aria_code/providers/local_llm_provider.py +549 -0
  465. aria_code/providers/ollama_models.py +79 -0
  466. aria_code/providers/openai_params.py +32 -0
  467. aria_code/providers/tool_messages.py +100 -0
  468. aria_code/realty_data_tools.py +4 -0
  469. aria_code/report_exporters.py +150 -0
  470. aria_code/report_generator.py +1764 -0
  471. aria_code/review_service.py +497 -0
  472. aria_code/runtime/__init__.py +176 -0
  473. aria_code/runtime/acceptance.py +632 -0
  474. aria_code/runtime/agent_loop.py +1851 -0
  475. aria_code/runtime/agent_profiles.py +75 -0
  476. aria_code/runtime/approval.py +71 -0
  477. aria_code/runtime/baseline.py +219 -0
  478. aria_code/runtime/budget.py +232 -0
  479. aria_code/runtime/checkpoints.py +481 -0
  480. aria_code/runtime/consult.py +65 -0
  481. aria_code/runtime/contract.py +282 -0
  482. aria_code/runtime/delivery.py +432 -0
  483. aria_code/runtime/events.py +113 -0
  484. aria_code/runtime/gateway.py +167 -0
  485. aria_code/runtime/lsp.py +484 -0
  486. aria_code/runtime/native_index.py +153 -0
  487. aria_code/runtime/orchestrator.py +55 -0
  488. aria_code/runtime/processes.py +343 -0
  489. aria_code/runtime/project_graph.py +614 -0
  490. aria_code/runtime/repo_map.py +712 -0
  491. aria_code/runtime/research_bundle.py +105 -0
  492. aria_code/runtime/review.py +269 -0
  493. aria_code/runtime/run_state.py +127 -0
  494. aria_code/runtime/run_store.py +522 -0
  495. aria_code/runtime/scoped_runs.py +113 -0
  496. aria_code/runtime/self_healing.py +422 -0
  497. aria_code/runtime/semantic_diff.py +171 -0
  498. aria_code/runtime/subagent.py +721 -0
  499. aria_code/runtime/symbol_edit.py +117 -0
  500. aria_code/runtime/task_brief.py +46 -0
  501. aria_code/runtime/task_context.py +145 -0
  502. aria_code/runtime/task_ledger.py +108 -0
  503. aria_code/runtime/task_orchestrator.py +90 -0
  504. aria_code/runtime/task_outcome.py +33 -0
  505. aria_code/runtime/task_verification.py +266 -0
  506. aria_code/runtime/task_worktree.py +448 -0
  507. aria_code/runtime/tool_executor.py +329 -0
  508. aria_code/runtime/tool_policy.py +107 -0
  509. aria_code/runtime/transactions.py +216 -0
  510. aria_code/runtime/windows_job.py +115 -0
  511. aria_code/runtime/workflows.py +222 -0
  512. aria_code/runtime/worktrees.py +215 -0
  513. aria_code/runway_video_client.py +4 -0
  514. aria_code/safety/__init__.py +27 -0
  515. aria_code/safety/client_isolation.py +178 -0
  516. aria_code/safety/permissions.py +339 -0
  517. aria_code/safety/risk.py +699 -0
  518. aria_code/safety/sandbox.py +148 -0
  519. aria_code/safety/service.py +102 -0
  520. aria_code/service_endpoints.py +14 -0
  521. aria_code/setup_wizard.py +684 -0
  522. aria_code/spreadsheet_tools.py +4 -0
  523. aria_code/strategy_vault.py +4 -0
  524. aria_code/tools/__init__.py +0 -0
  525. aria_code/tools/artifact_tools.py +252 -0
  526. aria_code/tools/broker_tools.py +92 -0
  527. aria_code/tools/build_quant_engine.py +97 -0
  528. aria_code/tools/code_audit_tools.py +192 -0
  529. aria_code/tools/computer_use_tools.py +509 -0
  530. aria_code/tools/data_analysis_tools.py +831 -0
  531. aria_code/tools/enterprise_finance_tools.py +202 -0
  532. aria_code/tools/extended_tools.py +240 -0
  533. aria_code/tools/file_analysis_tools.py +880 -0
  534. aria_code/tools/image_gen_tools.py +114 -0
  535. aria_code/tools/local_finance_tools.py +3488 -0
  536. aria_code/tools/logistics_carriers.py +11 -0
  537. aria_code/tools/logistics_inventory.py +11 -0
  538. aria_code/tools/logistics_io.py +11 -0
  539. aria_code/tools/logistics_tenancy.py +11 -0
  540. aria_code/tools/logistics_tools.py +11 -0
  541. aria_code/tools/macro_tools.py +412 -0
  542. aria_code/tools/notification_tools.py +249 -0
  543. aria_code/tools/project_tools.py +525 -0
  544. aria_code/tools/realty_data_tools.py +662 -0
  545. aria_code/tools/spreadsheet_tools.py +399 -0
  546. aria_code/tools/stripe_tools.py +115 -0
  547. aria_code/tools/video_tools.py +500 -0
  548. aria_code/training/__init__.py +1 -0
  549. aria_code/training/compare.py +117 -0
  550. aria_code/training/prelude_commands.py +111 -0
  551. aria_code/training/prelude_eval.py +390 -0
  552. aria_code/training/prelude_real.py +183 -0
  553. aria_code/training/prelude_train.py +248 -0
  554. aria_code/training/sft_dataset.py +230 -0
  555. aria_code/training/trajectory_dataset.py +263 -0
  556. aria_code/ui/__init__.py +105 -0
  557. aria_code/ui/banner.py +404 -0
  558. aria_code/ui/completer.py +571 -0
  559. aria_code/ui/console.py +285 -0
  560. aria_code/ui/input_box.py +505 -0
  561. aria_code/ui/mentions.py +206 -0
  562. aria_code/ui/picker.py +248 -0
  563. aria_code/ui/render/__init__.py +11 -0
  564. aria_code/ui/render/actions.py +297 -0
  565. aria_code/ui/render/finance.py +1732 -0
  566. aria_code/ui/render/market.py +253 -0
  567. aria_code/ui/render/output.py +954 -0
  568. aria_code/ui/render/responsive.py +75 -0
  569. aria_code/ui/render/team.py +367 -0
  570. aria_code/ui/robot.py +239 -0
  571. aria_code/ui/startup_dashboard.py +110 -0
  572. aria_code/video_analysis.py +147 -0
  573. aria_code/video_editor.py +518 -0
  574. aria_code/video_workflow/__init__.py +8 -0
  575. aria_code/video_workflow/__main__.py +61 -0
  576. aria_code/video_workflow/engines/__init__.py +18 -0
  577. aria_code/video_workflow/engines/base.py +69 -0
  578. aria_code/video_workflow/engines/custom_model.py +204 -0
  579. aria_code/video_workflow/engines/google_veo.py +94 -0
  580. aria_code/video_workflow/engines/local_engine.py +71 -0
  581. aria_code/video_workflow/engines/registry.py +98 -0
  582. aria_code/video_workflow/google_models.py +278 -0
  583. aria_code/video_workflow/music/__init__.py +5 -0
  584. aria_code/video_workflow/music/foley_service.py +132 -0
  585. aria_code/video_workflow/music/service.py +212 -0
  586. aria_code/video_workflow/pipeline.py +620 -0
  587. aria_code/video_workflow/plan.py +202 -0
  588. aria_code/video_workflow/session.py +297 -0
  589. aria_code/workspace/__init__.py +6 -0
  590. aria_code/workspace/files.py +219 -0
  591. aria_code/workspace/verify.py +167 -0
  592. aria_code/workspace_changes.py +199 -0
  593. aria_code/workspace_service.py +196 -0
  594. aria_code/workspace_tools.py +150 -0
  595. aria_code-0.167.0.dist-info/METADATA +330 -0
  596. aria_code-0.167.0.dist-info/RECORD +601 -0
  597. aria_code-0.167.0.dist-info/WHEEL +5 -0
  598. aria_code-0.167.0.dist-info/entry_points.txt +5 -0
  599. aria_code-0.167.0.dist-info/licenses/LICENSE +201 -0
  600. aria_code-0.167.0.dist-info/licenses/NOTICE +49 -0
  601. aria_code-0.167.0.dist-info/top_level.txt +2 -0
@@ -0,0 +1,652 @@
1
+ """模型目录 —— 从 aria_cli.py 抽出的纯数据。
2
+
3
+ MODELS / MODEL_ALIASES / _MODEL_FALLBACK_PREFIXES 三个字面量原本在
4
+ aria_cli.py 的 1158-1551 行,合计约 390 行,占该文件的 4.5%,且完全没有
5
+ 行为——已用 AST 核实过:零外部名字引用、零 lambda、零函数调用。
6
+
7
+ 与 football_reports / broker_render 不同,这里**不需要**
8
+ _rebind_module_function_globals:那套机制解决的是函数 __globals__ 的绑定
9
+ 问题,而这里是数据。aria_cli 用普通 `from ... import` 就会把名字放进自己的
10
+ 命名空间,diagnostic_cmds / model_cmds 等 mixin 的裸名引用照常解析。
11
+ """
12
+
13
+ from __future__ import annotations
14
+
15
+ MODELS = {
16
+ # ════════════════════════════════════════════════════════════════════
17
+ # ── Google Gemini 平台核心默认模型(Google Cloud)───────────────────────
18
+ # ════════════════════════════════════════════════════════════════════
19
+ # Gemini 2.5 retires in October 2026 (model_retirement.py). Google's release
20
+ # notes (checked 2026-10-19) deprecated gemini-3.5-flash on 8 October (it is
21
+ # routed to 3.6 Flash), so the default is 3.8 Flash, the GA Flash flagship.
22
+ # /model also lists everything each provider serves today.
23
+ "gemini-flash": {
24
+ "id": "google/gemini-3.8-flash",
25
+ "name": "Gemini 3.8 Flash",
26
+ "version": "3.8",
27
+ "tag": "Platform",
28
+ "speed": "★★★★★",
29
+ "intelligence": "★★★★★",
30
+ "description": "平台默认(2026-09 GA):Flash 旗舰,工程与智能体工作流,百万级上下文",
31
+ "capabilities": ["multimodal", "1M context", "tool calls", "quant", "code"],
32
+ "thinking": True, "tools": True,
33
+ "max_tokens": 8192, "num_ctx": 1048576, "temperature": 0.2,
34
+ "badge": "Default",
35
+ },
36
+ "gemini-pro": {
37
+ "id": "google/gemini-3.1-pro-preview",
38
+ "name": "Gemini 3.1 Pro (preview)",
39
+ "version": "3.1",
40
+ "tag": "Platform",
41
+ "speed": "★★★★",
42
+ "intelligence": "★★★★★",
43
+ "description": "Pro 级推理(预览版):复杂分析与长文档,比 Flash 慢且贵",
44
+ "capabilities": ["multimodal", "1M context", "tool calls", "quant", "code"],
45
+ "thinking": True, "tools": True,
46
+ "max_tokens": 8192, "num_ctx": 1048576, "temperature": 0.2,
47
+ "badge": "Pro",
48
+ },
49
+ "gemini-4": {
50
+ "id": "google/gemini-4-argon",
51
+ "name": "Gemini 4 Argon",
52
+ "version": "4",
53
+ "tag": "Platform",
54
+ "speed": "★★★★",
55
+ "intelligence": "★★★★★",
56
+ "description": "Google 最新旗舰(2026-10-13 GA):复杂编码、智能体、数学与科学;比 Flash 贵",
57
+ "capabilities": ["multimodal", "1M context", "tool calls", "quant", "code"],
58
+ "thinking": True, "tools": True,
59
+ "max_tokens": 8192, "num_ctx": 1048576, "temperature": 0.2,
60
+ "badge": "Flagship",
61
+ },
62
+ "gemini-lite": {
63
+ "id": "google/gemini-3.5-flash-lite",
64
+ "name": "Gemini Flash-Lite",
65
+ "version": "3.5",
66
+ "tag": "Platform",
67
+ "speed": "★★★★★",
68
+ "intelligence": "★★★★",
69
+ "description": "极速低价:低延迟、适合批量与实时行情",
70
+ "capabilities": ["fast inference", "1M context", "tool calls", "low latency"],
71
+ "thinking": False, "tools": True,
72
+ "max_tokens": 8192, "num_ctx": 1048576, "temperature": 0.2,
73
+ "badge": "Fast",
74
+ },
75
+ # ════════════════════════════════════════════════════════════════════
76
+ # ── Qwen 家族(阿里巴巴)────────────────────────────────────────────
77
+ # ════════════════════════════════════════════════════════════════════
78
+ "qwen7b": {
79
+ "id": "qwen2.5:7b",
80
+ "name": "Qwen 2.5",
81
+ "version": "7B",
82
+ "tag": "Default",
83
+ "speed": "★★★★",
84
+ "intelligence": "★★★★★",
85
+ "description": "主力推荐:中英双语最强 7B,工具调用稳定,金融/代码俱佳",
86
+ "capabilities": ["chat", "tool calls", "financial analysis", "coding", "Chinese"],
87
+ "thinking": False, "tools": True,
88
+ "max_tokens": 4096, "num_ctx": 32768, "temperature": 0.3,
89
+ "badge": "Default",
90
+ },
91
+ "qwen-coder": {
92
+ "id": "qwen2.5-coder:7b",
93
+ "name": "Qwen Coder",
94
+ "version": "7B",
95
+ "tag": "Code",
96
+ "speed": "★★★★",
97
+ "intelligence": "★★★★★",
98
+ "description": "代码专精:量化策略生成、回测脚本、Python 金融工具",
99
+ "capabilities": ["strategy code", "backtest", "Python", "quant development"],
100
+ "thinking": False, "tools": True,
101
+ "max_tokens": 4096, "num_ctx": 32768, "temperature": 0.2,
102
+ "badge": "Code",
103
+ },
104
+ "qwen14b": {
105
+ "id": "qwen2.5:14b",
106
+ "name": "Qwen 2.5",
107
+ "version": "14B",
108
+ "tag": "Pro",
109
+ "speed": "★★★",
110
+ "intelligence": "★★★★★",
111
+ "description": "高质量推理:需 ~10GB VRAM,复杂分析/长文档首选",
112
+ "capabilities": ["complex analysis", "long context", "Chinese"],
113
+ "thinking": False, "tools": True,
114
+ "max_tokens": 8192, "num_ctx": 32768, "temperature": 0.3,
115
+ "badge": "Pro",
116
+ },
117
+ "qwen32b": {
118
+ "id": "qwen2.5:32b",
119
+ "name": "Qwen 2.5",
120
+ "version": "32B",
121
+ "tag": "Max",
122
+ "speed": "★★",
123
+ "intelligence": "★★★★★",
124
+ "description": "旗舰本地:需 ~20GB VRAM,媲美 GPT-4o 水平",
125
+ "capabilities": ["flagship reasoning", "long context", "deep analysis"],
126
+ "thinking": False, "tools": True,
127
+ "max_tokens": 8192, "num_ctx": 32768, "temperature": 0.3,
128
+ "badge": "Max",
129
+ },
130
+ "qwen3-8b": {
131
+ "id": "qwen3:8b",
132
+ "name": "Qwen 3",
133
+ "version": "8B",
134
+ "tag": "Latest",
135
+ "speed": "★★★★",
136
+ "intelligence": "★★★★★",
137
+ "description": "Qwen3 最新一代:混合推理模式,/think 开启深度思考",
138
+ "capabilities": ["hybrid reasoning", "thinking mode", "chat", "code"],
139
+ "thinking": True, "tools": True,
140
+ "max_tokens": 8192, "num_ctx": 32768, "temperature": 0.6,
141
+ "badge": "Latest",
142
+ },
143
+ "qwen3-30b": {
144
+ "id": "qwen3:30b-a3b",
145
+ "name": "Qwen 3 MoE",
146
+ "version": "30B-A3B",
147
+ "tag": "MoE",
148
+ "speed": "★★★★",
149
+ "intelligence": "★★★★★",
150
+ "description": "混合专家 MoE:30B参数激活3B,速度与质量双赢",
151
+ "capabilities": ["MoE", "fast reasoning", "tool calls"],
152
+ "thinking": True, "tools": True,
153
+ "max_tokens": 8192, "num_ctx": 32768, "temperature": 0.6,
154
+ "badge": "MoE",
155
+ },
156
+ "qwen-fast": {
157
+ "id": "qwen2.5-coder:1.5b",
158
+ "name": "Qwen Fast",
159
+ "version": "1.5B",
160
+ "tag": "Fast",
161
+ "speed": "★★★★★",
162
+ "intelligence": "★★★",
163
+ "description": "超快响应:简单问答、实时报价、快速指令,~1GB RAM",
164
+ "capabilities": ["fast chat", "simple queries", "ultra-low latency"],
165
+ "thinking": False, "tools": False,
166
+ "max_tokens": 2048, "num_ctx": 8192, "temperature": 0.3,
167
+ "badge": "Fast",
168
+ },
169
+ # ════════════════════════════════════════════════════════════════════
170
+ # ── DeepSeek 家族──────────────────────────────────────────────────
171
+ # ════════════════════════════════════════════════════════════════════
172
+ "deepseek-r1": {
173
+ "id": "deepseek-r1:7b",
174
+ "name": "DeepSeek R1",
175
+ "version": "7B",
176
+ "tag": "Think",
177
+ "speed": "★★★",
178
+ "intelligence": "★★★★★",
179
+ "description": "深度推理:复杂投资决策、多步骤分析、Chain-of-Thought",
180
+ "capabilities": ["deep reasoning", "chain-of-thought", "complex quant"],
181
+ "thinking": True, "tools": False,
182
+ "max_tokens": 4096, "num_ctx": 32768, "temperature": 0.3,
183
+ "badge": "Think",
184
+ },
185
+ "deepseek-r1-1.5b": {
186
+ "id": "deepseek-r1:1.5b",
187
+ "name": "DeepSeek R1",
188
+ "version": "1.5B",
189
+ "tag": "Tiny",
190
+ "speed": "★★★★★",
191
+ "intelligence": "★★★",
192
+ "description": "最小推理模型:~1GB,边缘设备/低内存机器首选",
193
+ "capabilities": ["lightweight reasoning", "simple CoT"],
194
+ "thinking": True, "tools": False,
195
+ "max_tokens": 2048, "num_ctx": 8192, "temperature": 0.3,
196
+ "badge": "Fast",
197
+ },
198
+ "deepseek-r1-14b": {
199
+ "id": "deepseek-r1:14b",
200
+ "name": "DeepSeek R1",
201
+ "version": "14B",
202
+ "tag": "Pro",
203
+ "speed": "★★★",
204
+ "intelligence": "★★★★★",
205
+ "description": "强化推理 14B:数学/代码/金融逻辑最强本地选择",
206
+ "capabilities": ["strong reasoning", "math", "code analysis"],
207
+ "thinking": True, "tools": False,
208
+ "max_tokens": 8192, "num_ctx": 32768, "temperature": 0.3,
209
+ "badge": "Think",
210
+ },
211
+ # ════════════════════════════════════════════════════════════════════
212
+ # ── Meta Llama 家族 ───────────────────────────────────────────────
213
+ # ════════════════════════════════════════════════════════════════════
214
+ "llama3.2-3b": {
215
+ "id": "llama3.2:3b",
216
+ "name": "Llama 3.2",
217
+ "version": "3B",
218
+ "tag": "Light",
219
+ "speed": "★★★★★",
220
+ "intelligence": "★★★",
221
+ "description": "Meta 轻量级:~2GB,快速对话,英文性能出色",
222
+ "capabilities": ["fast chat", "English", "summarization"],
223
+ "thinking": False, "tools": True,
224
+ "max_tokens": 4096, "num_ctx": 8192, "temperature": 0.3,
225
+ "badge": "Fast",
226
+ },
227
+ "llama3.1-8b": {
228
+ "id": "llama3.1:8b",
229
+ "name": "Llama 3.1",
230
+ "version": "8B",
231
+ "tag": "Standard",
232
+ "speed": "★★★★",
233
+ "intelligence": "★★★★",
234
+ "description": "Meta 主力 8B:英文任务顶级,工具调用完整支持",
235
+ "capabilities": ["chat", "tool calls", "English", "reasoning"],
236
+ "thinking": False, "tools": True,
237
+ "max_tokens": 4096, "num_ctx": 131072, "temperature": 0.3,
238
+ "badge": "Default",
239
+ },
240
+ "llama3.3-70b": {
241
+ "id": "llama3.3:70b",
242
+ "name": "Llama 3.3",
243
+ "version": "70B",
244
+ "tag": "Large",
245
+ "speed": "★★",
246
+ "intelligence": "★★★★★",
247
+ "description": "Meta 最强开源:70B 需 ~40GB VRAM,媲美 GPT-4o",
248
+ "capabilities": ["flagship English", "complex reasoning", "long context"],
249
+ "thinking": False, "tools": True,
250
+ "max_tokens": 8192, "num_ctx": 131072, "temperature": 0.3,
251
+ "badge": "Pro",
252
+ },
253
+ # ════════════════════════════════════════════════════════════════════
254
+ # ── Mistral / Mixtral 家族 ────────────────────────────────────────
255
+ # ════════════════════════════════════════════════════════════════════
256
+ "mistral-7b": {
257
+ "id": "mistral:7b",
258
+ "name": "Mistral",
259
+ "version": "7B",
260
+ "tag": "EU",
261
+ "speed": "★★★★",
262
+ "intelligence": "★★★★",
263
+ "description": "欧洲顶级开源:结构化输出强,JSON 工具调用稳定",
264
+ "capabilities": ["structured output", "tool calls", "JSON", "English"],
265
+ "thinking": False, "tools": True,
266
+ "max_tokens": 4096, "num_ctx": 32768, "temperature": 0.3,
267
+ "badge": "Default",
268
+ },
269
+ "mistral-nemo": {
270
+ "id": "mistral-nemo:12b",
271
+ "name": "Mistral Nemo",
272
+ "version": "12B",
273
+ "tag": "Balanced",
274
+ "speed": "★★★★",
275
+ "intelligence": "★★★★★",
276
+ "description": "Mistral × Nvidia:128K上下文,多语言支持佳",
277
+ "capabilities": ["long context", "multilingual", "tool calls"],
278
+ "thinking": False, "tools": True,
279
+ "max_tokens": 8192, "num_ctx": 131072, "temperature": 0.3,
280
+ "badge": "Pro",
281
+ },
282
+ # ════════════════════════════════════════════════════════════════════
283
+ # ── Microsoft Phi 家族 ────────────────────────────────────────────
284
+ # ════════════════════════════════════════════════════════════════════
285
+ "phi4": {
286
+ "id": "phi4:14b",
287
+ "name": "Phi-4",
288
+ "version": "14B",
289
+ "tag": "STEM",
290
+ "speed": "★★★",
291
+ "intelligence": "★★★★★",
292
+ "description": "微软 STEM 旗舰:数学/代码/科学推理超越同级,14B 需 ~8GB",
293
+ "capabilities": ["math", "STEM", "code", "science reasoning"],
294
+ "thinking": False, "tools": True,
295
+ "max_tokens": 8192, "num_ctx": 16384, "temperature": 0.3,
296
+ "badge": "STEM",
297
+ },
298
+ "phi4-mini": {
299
+ "id": "phi4-mini:3.8b",
300
+ "name": "Phi-4 Mini",
301
+ "version": "3.8B",
302
+ "tag": "Compact",
303
+ "speed": "★★★★★",
304
+ "intelligence": "★★★★",
305
+ "description": "微软精简版:3.8B 打败多数 7B,数学/代码能力突出",
306
+ "capabilities": ["math", "code", "compact", "fast"],
307
+ "thinking": False, "tools": True,
308
+ "max_tokens": 4096, "num_ctx": 16384, "temperature": 0.3,
309
+ "badge": "Fast",
310
+ },
311
+ # ════════════════════════════════════════════════════════════════════
312
+ # ── Google Gemma 3 家族 ───────────────────────────────────────────
313
+ # ════════════════════════════════════════════════════════════════════
314
+ "gemma3-4b": {
315
+ "id": "gemma3:4b",
316
+ "name": "Gemma 3",
317
+ "version": "4B",
318
+ "tag": "Google",
319
+ "speed": "★★★★★",
320
+ "intelligence": "★★★★",
321
+ "description": "Google 轻量:4B 支持图像理解,多模态能力出色",
322
+ "capabilities": ["multimodal", "vision", "fast chat", "Google"],
323
+ "vision": True, "thinking": False, "tools": True,
324
+ "max_tokens": 4096, "num_ctx": 8192, "temperature": 0.3,
325
+ "badge": "Fast",
326
+ },
327
+ "gemma3-12b": {
328
+ "id": "gemma3:12b",
329
+ "name": "Gemma 3",
330
+ "version": "12B",
331
+ "tag": "Vision",
332
+ "speed": "★★★★",
333
+ "intelligence": "★★★★★",
334
+ "description": "Google 中型:12B 视觉+文本综合能力强,~8GB VRAM",
335
+ "capabilities": ["multimodal", "vision", "reasoning", "multilingual"],
336
+ "vision": True, "thinking": False, "tools": True,
337
+ "max_tokens": 8192, "num_ctx": 16384, "temperature": 0.3,
338
+ "badge": "Vision",
339
+ },
340
+ # ════════════════════════════════════════════════════════════════════
341
+ # ── Cloud 路由(需订阅或 API Key)────────────────────────────────
342
+ # ════════════════════════════════════════════════════════════════════
343
+ "gpt-oss-120b": {
344
+ "id": "gpt-oss:120b-cloud",
345
+ "name": "GPT-OSS",
346
+ "version": "120B",
347
+ "tag": "Cloud·120B",
348
+ "speed": "★★★",
349
+ "intelligence": "★★★★★",
350
+ "description": "云端 120B 中继:机构级分析,复杂金融报告",
351
+ "capabilities": ["institutional analysis", "long-form reports", "complex reasoning"],
352
+ "thinking": True, "tools": True,
353
+ "max_tokens": 8192, "num_ctx": 131072, "temperature": 0.3,
354
+ "badge": "Cloud",
355
+ },
356
+ "deepseek-v3-cloud": {
357
+ "id": "deepseek-v3.1:671b-cloud",
358
+ "name": "DeepSeek V3",
359
+ "version": "671B",
360
+ "tag": "Cloud·671B",
361
+ "speed": "★★★",
362
+ "intelligence": "★★★★★",
363
+ "description": "云端 671B 旗舰:最强推理,研报级分析,需订阅",
364
+ "capabilities": ["flagship reasoning", "research report", "quant strategy"],
365
+ "thinking": True, "tools": True,
366
+ "max_tokens": 8192, "num_ctx": 163840, "temperature": 0.3,
367
+ "badge": "Cloud",
368
+ },
369
+ }
370
+
371
+ # Model aliases: short names / Ollama IDs → MODELS key
372
+ MODEL_ALIASES = {
373
+ # ── Google Gemini ─────────────────────────────────────────────────
374
+ "gemini": "gemini-flash", "gemini-pro": "gemini-pro", "gemini2.5": "gemini-flash", "gpro": "gemini-pro",
375
+ "gemini-latest": "gemini-pro", "glatest": "gemini-pro",
376
+ "gemini-flash": "gemini-flash", "gflash": "gemini-flash", "flash": "gemini-flash",
377
+ "gemini-lite": "gemini-lite", "glite": "gemini-lite",
378
+ # ── Qwen 2.5 ──────────────────────────────────────────────────────
379
+ "qwen7b": "qwen7b", "q7": "qwen7b", "sonata": "qwen7b", "s": "qwen7b",
380
+ "qwen14b": "qwen14b", "q14": "qwen14b",
381
+ "qwen32b": "qwen32b", "q32": "qwen32b",
382
+ "qwen-coder": "qwen-coder", "coder": "qwen-coder", "c": "qwen-coder",
383
+ "qwen-fast": "qwen-fast", "fast": "qwen-fast", "prelude": "qwen-fast", "p": "qwen-fast",
384
+ # ── Qwen 3 ────────────────────────────────────────────────────────
385
+ "qwen3": "qwen3-8b", "q3": "qwen3-8b", "qwen3-8b": "qwen3-8b",
386
+ "qwen3-30b": "qwen3-30b", "q3-moe": "qwen3-30b", "moe": "qwen3-30b",
387
+ # ── DeepSeek ──────────────────────────────────────────────────────
388
+ "deepseek-r1": "deepseek-r1", "r1": "deepseek-r1", "r1-7b": "deepseek-r1",
389
+ "r1-1.5b": "deepseek-r1-1.5b", "r1-tiny": "deepseek-r1-1.5b",
390
+ "r1-14b": "deepseek-r1-14b", "r1-pro": "deepseek-r1-14b",
391
+ # ── Llama ─────────────────────────────────────────────────────────
392
+ "llama3.2": "llama3.2-3b", "llama3": "llama3.2-3b", "l3": "llama3.2-3b",
393
+ "llama3.1": "llama3.1-8b", "llama3.1-8b": "llama3.1-8b", "l31": "llama3.1-8b",
394
+ "llama3.3": "llama3.3-70b", "llama70b": "llama3.3-70b", "l33": "llama3.3-70b",
395
+ # ── Mistral ───────────────────────────────────────────────────────
396
+ "mistral": "mistral-7b", "m7": "mistral-7b",
397
+ "nemo": "mistral-nemo", "mistral12b": "mistral-nemo",
398
+ # ── Phi (Microsoft) ───────────────────────────────────────────────
399
+ "phi4": "phi4", "phi": "phi4",
400
+ "phi4-mini": "phi4-mini", "phi-mini": "phi4-mini",
401
+ # ── Gemma (Google) ────────────────────────────────────────────────
402
+ "gemma": "gemma3-4b", "gemma3": "gemma3-4b", "g4": "gemma3-4b",
403
+ "gemma12b": "gemma3-12b", "gemma3-12b": "gemma3-12b",
404
+ # ── Cloud relay ───────────────────────────────────────────────────
405
+ "gpt-oss": "gpt-oss-120b", "120b": "gpt-oss-120b",
406
+ "deepseek-v3": "deepseek-v3-cloud", "v3": "deepseek-v3-cloud", "671b": "deepseek-v3-cloud",
407
+ # ── 旧名向后兼容 ──────────────────────────────────────────────────
408
+ "sonata-thinking": "deepseek-r1", "st": "deepseek-r1",
409
+ "sonata-verbose": "qwen7b", "sv": "qwen7b",
410
+ # ── Ollama model ID → registry key ────────────────────────────────
411
+ "qwen2.5:7b": "qwen7b",
412
+ "qwen2.5:14b": "qwen14b",
413
+ "qwen2.5:32b": "qwen32b",
414
+ "qwen2.5:3b": "qwen-fast",
415
+ "qwen2.5-coder:7b": "qwen-coder",
416
+ "qwen2.5-coder:14b": "qwen-coder",
417
+ "qwen2.5-coder:1.5b": "qwen-fast",
418
+ "qwen3:8b": "qwen3-8b",
419
+ "qwen3:30b-a3b": "qwen3-30b",
420
+ "deepseek-r1:7b": "deepseek-r1",
421
+ "deepseek-r1:1.5b": "deepseek-r1-1.5b",
422
+ "deepseek-r1:14b": "deepseek-r1-14b",
423
+ "llama3.2:3b": "llama3.2-3b",
424
+ "llama3.1:8b": "llama3.1-8b",
425
+ "llama3.3:70b": "llama3.3-70b",
426
+ "mistral:7b": "mistral-7b",
427
+ "mistral-nemo:12b": "mistral-nemo",
428
+ "phi4:14b": "phi4",
429
+ "phi4-mini:3.8b": "phi4-mini",
430
+ "gemma3:4b": "gemma3-4b",
431
+ "gemma3:12b": "gemma3-12b",
432
+ "gpt-oss:120b-cloud": "gpt-oss-120b",
433
+ "deepseek-v3.1:671b-cloud": "deepseek-v3-cloud",
434
+ # ── 旧 aria 模型 ID ───────────────────────────────────────────────
435
+ "aria-sonata:4.5": "qwen7b",
436
+ "aria-sonata:4.5-thinking": "deepseek-r1",
437
+ "aria-sonata:4.5-verbose": "qwen7b",
438
+ "aria-sonata:4.6": "qwen7b",
439
+ "aria-sonata:4.6-thinking": "deepseek-r1",
440
+ "aria-prelude:4.3": "qwen-fast",
441
+ "aria-prelude:1.5b": "qwen-fast",
442
+ }
443
+
444
+ # ── 模型降级优先级(单一事实源:预检 / 运行时 fallback 共用)────────────────
445
+ # 按能力/稳定性排序:先选大容量本地模型,再退化到轻量模型
446
+ _MODEL_FALLBACK_PREFIXES = [
447
+ # 首选:7B+ 本地全能模型
448
+ "qwen3:8b", # Qwen3 最新,混合推理
449
+ "qwen3:30b-a3b", # Qwen3 MoE,快速
450
+ "qwen2.5:14b", # Qwen2.5 高质量
451
+ "qwen2.5:7b", # Qwen2.5 主力
452
+ "qwen2.5-coder:7b", # 代码专精
453
+ # 次选:其他家族本地模型
454
+ "llama3.3:70b", # Meta 旗舰(需大 VRAM)
455
+ "llama3.1:8b", # Meta 8B 稳定
456
+ "mistral-nemo:12b", # Mistral 12B
457
+ "mistral:7b", # Mistral 7B
458
+ "phi4:14b", # Microsoft Phi-4
459
+ "phi4-mini:3.8b", # Microsoft Phi-4 Mini
460
+ "gemma3:12b", # Google Gemma 12B
461
+ "gemma3:4b", # Google Gemma 4B
462
+ "deepseek-r1:14b", # DeepSeek R1 推理
463
+ "deepseek-r1:7b", # DeepSeek R1 7B
464
+ # 轻量回落
465
+ "qwen2.5-coder:3b", # 小模型
466
+ "qwen2.5:3b", # 小模型
467
+ "llama3.2:3b", # Meta 轻量
468
+ "deepseek-r1:1.5b", # 极小推理
469
+ # Cloud relay(需订阅)
470
+ "gpt-oss",
471
+ "deepseek-v3.1",
472
+ ]
473
+
474
+
475
+ # ── Lookups ───────────────────────────────────────────────────────────────────
476
+ # These two read MODELS / MODEL_ALIASES and nothing else from aria_cli, so they
477
+ # belong beside the data rather than in the CLI module. Four mixins were
478
+ # importing them from aria_cli purely because that is where they were written.
479
+ #
480
+ # model_capability is optional, guarded the same way aria_cli guards it. The
481
+ # bare import form is deliberate: it is the form every other caller in the tree
482
+ # uses, and the package is reachable under two roots whose module objects are
483
+ # distinct.
484
+ try:
485
+ from model_capability import get_model_capability
486
+
487
+ _HAS_MODEL_CAP = True
488
+ except ImportError: # pragma: no cover - exercised only without model_capability
489
+ get_model_capability = None # type: ignore[assignment]
490
+ _HAS_MODEL_CAP = False
491
+
492
+
493
+ _MODEL_ID_INDEX: dict[str, str] | None = None
494
+
495
+
496
+ def _model_id_index() -> dict[str, str]:
497
+ """Lazily build a lowercase {model id -> MODELS key} index.
498
+
499
+ The config stores the provider-qualified *id* ("google/gemini-3.8-flash")
500
+ while MODELS is keyed by short name ("gemini-pro"), so without this lookup
501
+ a registered model resolves to "_community_" and its own registry entry is
502
+ never used.
503
+
504
+ Measured, rather than assumed: when model_capability knows the model it
505
+ guesses the same tools/context, so the visible damage is limited. The real
506
+ exposure is a model model_capability does not know, or an install without
507
+ it at all (_HAS_MODEL_CAP False), where get_model_cfg falls back to
508
+ sonata's settings for an unrelated model.
509
+ """
510
+ global _MODEL_ID_INDEX
511
+ if _MODEL_ID_INDEX is None:
512
+ index: dict[str, str] = {}
513
+ for key, cfg in MODELS.items():
514
+ model_id = str(cfg.get("id") or "").strip().lower()
515
+ if model_id and model_id not in index:
516
+ index[model_id] = key
517
+ _MODEL_ID_INDEX = index
518
+ return _MODEL_ID_INDEX
519
+
520
+
521
+ def resolve_model_key(model_str: str) -> str:
522
+ """Resolve any model alias/ID/key to a MODELS key.
523
+
524
+ Lookup order: exact key -> alias -> registered model id (case-insensitive).
525
+
526
+ For community Ollama models (qwen2.5-coder, llama3.2, deepseek-r1, etc.)
527
+ that are NOT in the MODELS registry, returns the sentinel "_community_"
528
+ so callers know to use model_capability.get_model_capability() instead
529
+ of falling back to hardcoded "prelude" settings.
530
+ """
531
+ if model_str in MODELS:
532
+ return model_str
533
+ if model_str in MODEL_ALIASES:
534
+ return MODEL_ALIASES[model_str]
535
+ normalized = str(model_str or "").strip().lower()
536
+ if normalized in MODELS:
537
+ return normalized
538
+ if normalized in MODEL_ALIASES:
539
+ return MODEL_ALIASES[normalized]
540
+ mapped = _model_id_index().get(normalized)
541
+ if mapped:
542
+ return mapped
543
+ # Community/custom Ollama model — not in registry
544
+ return "_community_"
545
+
546
+
547
+ def get_model_cfg(model_str: str) -> dict:
548
+ """Return the best available config dict for *model_str*.
549
+
550
+ For registered models (MODELS table): returns the table entry.
551
+ For community Ollama models: synthesizes a config from model_capability.
552
+ Never silently falls back to 'prelude' settings for an unrelated model.
553
+ """
554
+ key = resolve_model_key(model_str)
555
+ if key in MODELS:
556
+ return MODELS[key]
557
+ # Community model — build config from model_capability registry
558
+ if _HAS_MODEL_CAP:
559
+ cap = get_model_capability(model_str)
560
+ return {
561
+ "id": model_str,
562
+ "name": model_str,
563
+ "num_ctx": cap.context_window,
564
+ "temperature": cap.temperature,
565
+ "max_tokens": min(cap.context_window // 4, 8192),
566
+ "thinking": cap.thinking,
567
+ "tools": cap.tool_calls,
568
+ }
569
+ # Last resort fallback — use qwen7b (sonata) settings as a safe default
570
+ return MODELS.get("sonata", MODELS.get("qwen7b", next(iter(MODELS.values()))))
571
+
572
+
573
+ # ── Choosing a local model when the configured one is not installed ──────────
574
+ # This used to live in aria_cli as _pick_best_installed_model, and it ended with
575
+ # `return sorted(installed)[0]`. Two things went wrong with that.
576
+ #
577
+ # First, the caller in print_header() asks "is config['model'] in the set Ollama
578
+ # reports?" — and a cloud id is NEVER in that set, because Ollama only lists
579
+ # local models. So for anyone running google/gemini-2.5-pro (the shipped
580
+ # default) with Ollama installed, the answer was always no, the "heal" branch
581
+ # always fired, and print_header() then persisted the result with save_config().
582
+ # A deliberate `/model google/gemini-2.5-pro` was overwritten on every startup.
583
+ #
584
+ # Second, the alphabetical last resort answered with whatever sorted first.
585
+ # Measured before the fix, with google/gemini-2.5-pro configured:
586
+ #
587
+ # installed {qwen2.5:7b, llama3.2:3b} -> qwen2.5:7b
588
+ # installed {aardvark-tiny:1b, zzz-exp:0.5b} -> aardvark-tiny:1b
589
+ # installed {llama3.2:1b}, claude-sonnet-4 cfg -> llama3.2:1b
590
+ #
591
+ # A 0.5B model that sorts early becoming the agent's brain is not a fallback,
592
+ # it is a silent downgrade to something that cannot hold a tool call together.
593
+ #
594
+ # So: cloud choices are never healed from a local list, and a model only
595
+ # qualifies if the capability registry says it can handle coding. When nothing
596
+ # qualifies, this returns None and the caller leaves the configuration alone.
597
+
598
+ def is_provider_qualified(model: str) -> bool:
599
+ """True for ids that name their own provider ("google/gemini-2.5-pro").
600
+
601
+ Ollama serves namespaced community models such as "hf.co/user/model", whose
602
+ first segment is a host rather than a backend — those are local, so the
603
+ check is against the known provider prefixes, not merely against "/".
604
+ """
605
+ name = (model or "").strip().lower()
606
+ if "/" not in name:
607
+ return False
608
+ head = name.split("/", 1)[0]
609
+ return head in _KNOWN_PROVIDER_PREFIXES
610
+
611
+
612
+ _KNOWN_PROVIDER_PREFIXES = frozenset({
613
+ "openai", "anthropic", "google", "xai", "deepseek", "groq", "together",
614
+ "dashscope", "lmstudio", "siliconflow", "moonshot", "zhipu", "mistral",
615
+ "cohere", "perplexity", "baidu", "ernie", "qianfan", "ollama",
616
+ })
617
+
618
+
619
+ def _is_capable_enough(model: str) -> bool:
620
+ """True if the capability registry vouches for *model* on coding work."""
621
+ if not _HAS_MODEL_CAP:
622
+ # Without the registry there is no basis for vouching, so don't.
623
+ return False
624
+ from model_capability import can_handle_coding, is_unknown_model
625
+
626
+ cap = get_model_capability(model)
627
+ return not is_unknown_model(cap) and can_handle_coding(cap)
628
+
629
+
630
+ def pick_best_installed_model(installed, preferred: str = "") -> str | None:
631
+ """Pick a local model to use when *preferred* is not installed.
632
+
633
+ Returns None — meaning "leave the configuration alone" — when *preferred*
634
+ names a cloud provider, or when no installed model is one the capability
635
+ registry vouches for.
636
+ """
637
+ if not installed:
638
+ return None
639
+ if preferred and preferred in installed:
640
+ return preferred
641
+ # A cloud model's absence from the local list says nothing about the user's
642
+ # intent, so it is not grounds for switching them to a local model.
643
+ if is_provider_qualified(preferred):
644
+ return None
645
+ for prefix in _MODEL_FALLBACK_PREFIXES:
646
+ match = next((m for m in sorted(installed) if m.startswith(prefix)), None)
647
+ if match:
648
+ return match
649
+ # No curated match. Take a capable installed model if there is one, in a
650
+ # deterministic order; otherwise decline rather than guess.
651
+ capable = sorted(m for m in installed if _is_capable_enough(m))
652
+ return capable[0] if capable else None