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,186 @@
1
+ """Deterministic completion gates for multi-agent research reports."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import asdict, dataclass, field
6
+ from datetime import datetime, timezone
7
+ from enum import Enum
8
+ from typing import Any, Iterable
9
+
10
+
11
+ class ReportQualityDecision(str, Enum):
12
+ COMPLETE = "complete"
13
+ PARTIAL = "partial"
14
+ BLOCKED = "blocked"
15
+
16
+
17
+ def _utc_timestamp() -> str:
18
+ return datetime.now(timezone.utc).isoformat(timespec="seconds")
19
+
20
+
21
+ @dataclass(frozen=True)
22
+ class ReportQualityPolicy:
23
+ min_agent_coverage: float = 0.60
24
+ min_core_coverage: float = 2 / 3
25
+ core_agents: tuple[str, ...] = ("technical", "fundamental", "risk")
26
+ max_degraded_ratio: float = 0.50
27
+ require_quote: bool = True
28
+ allow_stale: bool = False
29
+ max_market_cap: float = 100_000_000_000_000.0
30
+ max_implied_shares: float = 100_000_000_000.0
31
+
32
+
33
+ @dataclass(frozen=True)
34
+ class ReportQualityAssessment:
35
+ decision: ReportQualityDecision
36
+ requested_agents: tuple[str, ...]
37
+ usable_agents: tuple[str, ...]
38
+ degraded_agents: tuple[str, ...]
39
+ failed_agents: tuple[str, ...]
40
+ agent_coverage: float
41
+ core_coverage: float
42
+ reasons: tuple[str, ...] = field(default_factory=tuple)
43
+ warnings: tuple[str, ...] = field(default_factory=tuple)
44
+ blocking_reasons: tuple[str, ...] = field(default_factory=tuple)
45
+ assessed_at: str = field(default_factory=_utc_timestamp)
46
+
47
+ @property
48
+ def metadata_status(self) -> str:
49
+ if self.decision is ReportQualityDecision.BLOCKED:
50
+ return "data_unavailable"
51
+ return self.decision.value
52
+
53
+ def to_dict(self) -> dict[str, Any]:
54
+ data = asdict(self)
55
+ data["decision"] = self.decision.value
56
+ data["metadata_status"] = self.metadata_status
57
+ data["core_agent_coverage"] = data["core_coverage"]
58
+ data["_contract_type"] = "ResearchQualityAssessment"
59
+ data["_contract_version"] = "1.0.0"
60
+ return data
61
+
62
+
63
+ def _as_float(value: Any) -> float | None:
64
+ try:
65
+ if value in (None, ""):
66
+ return None
67
+ return float(value)
68
+ except (TypeError, ValueError):
69
+ return None
70
+
71
+
72
+ def _unique(values: Iterable[str]) -> tuple[str, ...]:
73
+ return tuple(dict.fromkeys(value for value in values if value))
74
+
75
+
76
+ def assess_team_report(
77
+ team_result: Any,
78
+ data_bundle: Any = None,
79
+ policy: ReportQualityPolicy | None = None,
80
+ ) -> ReportQualityAssessment:
81
+ """Assess whether a report is complete, usable with caveats, or blocked."""
82
+ policy = policy or ReportQualityPolicy()
83
+ requested = _unique(
84
+ str(name)
85
+ for name in (getattr(team_result, "agents_run", None) or [])
86
+ if name not in {"synthesis", "debate"}
87
+ )
88
+ results = list(getattr(team_result, "results", None) or [])
89
+ if not requested:
90
+ requested = _unique(
91
+ str(getattr(result, "agent", ""))
92
+ for result in results
93
+ if getattr(result, "agent", "") not in {"synthesis", "debate"}
94
+ )
95
+
96
+ result_by_agent = {
97
+ str(getattr(result, "agent", "")): result
98
+ for result in results
99
+ if getattr(result, "agent", "")
100
+ }
101
+ usable = _unique(
102
+ name
103
+ for name in requested
104
+ if name in result_by_agent
105
+ and bool(getattr(result_by_agent[name], "success", False))
106
+ and bool(str(getattr(result_by_agent[name], "analysis", "") or "").strip())
107
+ )
108
+ degraded = _unique(
109
+ name for name in usable if bool(getattr(result_by_agent[name], "degraded", False))
110
+ )
111
+ failed = _unique(name for name in requested if name not in usable)
112
+ coverage = len(usable) / len(requested) if requested else 0.0
113
+ expected_core = tuple(name for name in policy.core_agents if name in requested)
114
+ core_coverage = (
115
+ sum(1 for name in expected_core if name in usable) / len(expected_core)
116
+ if expected_core else 1.0
117
+ )
118
+
119
+ warnings: list[str] = []
120
+ blocking: list[str] = []
121
+ reasons: list[str] = []
122
+
123
+ quote = dict(getattr(data_bundle, "quote", {}) or {}) if data_bundle else {}
124
+ price = _as_float(quote.get("price") or quote.get("current_price"))
125
+ volume = _as_float(quote.get("volume"))
126
+ market_cap = _as_float(quote.get("market_cap") or quote.get("marketCap"))
127
+ data_status = str(getattr(data_bundle, "status", "") or "").lower() if data_bundle else ""
128
+ stale = bool((getattr(data_bundle, "quality", {}) or {}).get("stale", False)) if data_bundle else False
129
+
130
+ if policy.require_quote and (price is None or price <= 0):
131
+ blocking.append("missing or invalid reference price")
132
+ if volume is not None and volume < 0:
133
+ blocking.append("negative volume")
134
+ if market_cap is not None:
135
+ if market_cap <= 0:
136
+ warnings.append("invalid market capitalization")
137
+ elif market_cap > policy.max_market_cap:
138
+ warnings.append("market capitalization exceeds plausibility limit")
139
+ if price and price > 0 and market_cap / price > policy.max_implied_shares:
140
+ warnings.append("implied share count exceeds plausibility limit")
141
+
142
+ if data_status in {"data_unavailable", "unavailable", "failed"}:
143
+ blocking.append("market data bundle unavailable")
144
+ elif data_status in {"partial", "stale"}:
145
+ warnings.append(f"market data status is {data_status}")
146
+ if stale and not policy.allow_stale:
147
+ warnings.append("market data is stale")
148
+ if not usable:
149
+ blocking.append("no agent produced usable analysis")
150
+ if coverage < policy.min_agent_coverage:
151
+ warnings.append(
152
+ f"agent coverage {coverage:.0%} is below {policy.min_agent_coverage:.0%}"
153
+ )
154
+ if core_coverage < policy.min_core_coverage:
155
+ warnings.append(
156
+ f"core-agent coverage {core_coverage:.0%} is below {policy.min_core_coverage:.0%}"
157
+ )
158
+ degraded_ratio = len(degraded) / len(usable) if usable else 0.0
159
+ if degraded_ratio > policy.max_degraded_ratio:
160
+ warnings.append(f"degraded-agent ratio {degraded_ratio:.0%} is too high")
161
+
162
+ if blocking:
163
+ decision = ReportQualityDecision.BLOCKED
164
+ elif warnings:
165
+ decision = ReportQualityDecision.PARTIAL
166
+ else:
167
+ decision = ReportQualityDecision.COMPLETE
168
+
169
+ reasons.append(f"usable agents: {len(usable)}/{len(requested)}")
170
+ if degraded:
171
+ reasons.append(f"degraded agents: {', '.join(degraded)}")
172
+ if failed:
173
+ reasons.append(f"failed agents: {', '.join(failed)}")
174
+
175
+ return ReportQualityAssessment(
176
+ decision=decision,
177
+ requested_agents=requested,
178
+ usable_agents=usable,
179
+ degraded_agents=degraded,
180
+ failed_agents=failed,
181
+ agent_coverage=round(coverage, 4),
182
+ core_coverage=round(core_coverage, 4),
183
+ reasons=_unique(reasons),
184
+ warnings=_unique(warnings),
185
+ blocking_reasons=_unique(blocking),
186
+ )
@@ -0,0 +1,160 @@
1
+ """SettingsService — single owner of persistent Aria configuration.
2
+
3
+ This is the concrete implementation behind the ``settings`` ServiceSpec in
4
+ ``packages.aria_services.registry`` (capability ``settings.config``). It owns
5
+ the merge/normalize/persist mechanics that previously lived in
6
+ ``apps/cli/config_store.py``; that module is now a thin CLI adapter which
7
+ constructs this service with CLI-specific hooks.
8
+
9
+ Layering: this package must stay importable by launcher, daemon, brokers and
10
+ MCP without dragging in the CLI. Anything CLI-flavored (provider-name
11
+ normalization, i18n language detection, model auto-selection, policy sync) is
12
+ injected as an optional callable rather than imported from ``apps.cli``.
13
+ """
14
+
15
+ from __future__ import annotations
16
+
17
+ import json
18
+ from collections.abc import Callable
19
+ from dataclasses import dataclass, field
20
+ from pathlib import Path
21
+ from typing import Any, Optional
22
+
23
+
24
+ # Models that no longer exist / were renamed; a saved config pointing at one
25
+ # is silently reset to the caller's default so the CLI never boots into a
26
+ # permanently-broken model selection.
27
+ STALE_ARIA_MODEL_PREFIXES = ("aria-opus", "aria-prelude", "aria-sonata:3", "aria-sonata:4")
28
+
29
+ # Keys that are session state, not configuration — never persisted.
30
+ NEVER_PERSIST = frozenset({
31
+ "conversation_history", "_session_workspace_root", "_session_write_roots",
32
+ "_session_read_roots", "_workspace_transport",
33
+ })
34
+
35
+
36
+ @dataclass
37
+ class SettingsService:
38
+ """Load, normalize, persist, and hand out the Aria config dict.
39
+
40
+ ``config_dir``/``config_file``/``sessions_dir`` duck-type
41
+ ``apps.cli.config_paths.AriaConfigPaths`` so the CLI can pass its existing
42
+ paths object fields straight through.
43
+ """
44
+
45
+ config_dir: Path
46
+ config_file: Path
47
+ sessions_dir: Path
48
+ defaults: dict = field(default_factory=dict)
49
+ # Optional environment hooks (all safe to omit):
50
+ normalize_provider: Optional[Callable[[str], str]] = None
51
+ detect_lang: Optional[Callable[[], str]] = None
52
+ # There was an auto_select_model hook here. It probed Ollama on first run
53
+ # and replaced the caller's default model with whatever was installed; see
54
+ # load(). Removed rather than left unwired, so it is not reconnected by
55
+ # someone who finds an unused hook and assumes it should be doing something.
56
+ on_loaded: Optional[Callable[[dict], None]] = None # e.g. CLI policy sync
57
+ stale_model_prefixes: tuple = STALE_ARIA_MODEL_PREFIXES
58
+
59
+ _snapshot: Optional[dict] = field(default=None, repr=False)
60
+
61
+ # ── core API ─────────────────────────────────────────────────────────────
62
+
63
+ def load(self) -> dict:
64
+ """Read config file, merge over defaults, normalize, fire on_loaded."""
65
+ self.config_dir.mkdir(parents=True, exist_ok=True)
66
+ self.sessions_dir.mkdir(parents=True, exist_ok=True)
67
+ if self.config_file.exists():
68
+ try:
69
+ saved = json.loads(self.config_file.read_text(encoding="utf-8"))
70
+ merged = {**self.defaults, **saved}
71
+ self._infer_local_provider(merged, saved)
72
+ self._reset_stale_model(merged)
73
+ self._ensure_ui_lang(merged)
74
+ self._finish_load(merged)
75
+ return merged
76
+ except Exception:
77
+ pass
78
+
79
+ # First run: the defaults stand as written. This used to probe Ollama
80
+ # here and overwrite cfg["model"] with whatever was installed, which
81
+ # contradicted the comment above DEFAULT_MODEL in apps/cli/bootstrap.py
82
+ # -- "provider configuration is the user's to make ... the code's job is
83
+ # to have a sane default and then get out of the way". It also cost a
84
+ # 3s HTTP timeout on every first start, and it was not needed for
85
+ # discoverability: the banner already reports "Ollama online · N models"
86
+ # (ui/banner.ollama_status_label), so a user with local models can see
87
+ # them and run /model.
88
+ cfg = dict(self.defaults)
89
+ try:
90
+ if self.detect_lang is not None:
91
+ cfg["ui_lang"] = self.detect_lang()
92
+ except Exception:
93
+ cfg["ui_lang"] = "en"
94
+ cfg.setdefault("ui_lang", "en")
95
+ self._finish_load(cfg)
96
+ return cfg
97
+
98
+ def save(self, cfg: dict) -> None:
99
+ self.config_dir.mkdir(parents=True, exist_ok=True)
100
+ payload = {k: v for k, v in cfg.items() if k not in NEVER_PERSIST}
101
+ # config.json holds auth_token / refresh_token from /login, so it is
102
+ # written owner-only like the other credential files.
103
+ from aria_code.packages.aria_core.secure_file import write_secret_json
104
+
105
+ write_secret_json(self.config_file, payload)
106
+ self._snapshot = dict(cfg)
107
+
108
+ def get(self, key: str, default: Any = None) -> Any:
109
+ """Read one key from the last-loaded snapshot (loads on first use)."""
110
+ if self._snapshot is None:
111
+ self.load()
112
+ return self._snapshot.get(key, default)
113
+
114
+ def set(self, key: str, value: Any) -> dict:
115
+ """Update one key and persist immediately; returns the new snapshot."""
116
+ if self._snapshot is None:
117
+ self.load()
118
+ cfg = dict(self._snapshot)
119
+ cfg[key] = value
120
+ self.save(cfg)
121
+ return cfg
122
+
123
+ def snapshot(self) -> dict:
124
+ """The last-loaded/saved config dict (loads on first use)."""
125
+ if self._snapshot is None:
126
+ self.load()
127
+ return dict(self._snapshot)
128
+
129
+ # ── normalization steps (extracted verbatim from the CLI loader) ─────────
130
+
131
+ def _infer_local_provider(self, merged: dict, saved: dict) -> None:
132
+ saved_model = merged.get("model", "")
133
+ if "local_provider" not in saved:
134
+ merged["local_provider"] = (
135
+ saved_model.split("/", 1)[0].lower() if "/" in saved_model else "ollama"
136
+ )
137
+ if self.normalize_provider is not None:
138
+ try:
139
+ merged["local_provider"] = (
140
+ self.normalize_provider(merged.get("local_provider")) or "ollama"
141
+ )
142
+ except Exception:
143
+ pass
144
+
145
+ def _reset_stale_model(self, merged: dict) -> None:
146
+ model = merged.get("model", "")
147
+ if any(model.startswith(p) for p in self.stale_model_prefixes):
148
+ merged["model"] = self.defaults.get("model", "")
149
+
150
+ def _ensure_ui_lang(self, merged: dict) -> None:
151
+ if not merged.get("ui_lang"):
152
+ try:
153
+ merged["ui_lang"] = self.detect_lang() if self.detect_lang else "en"
154
+ except Exception:
155
+ merged["ui_lang"] = "en"
156
+
157
+ def _finish_load(self, cfg: dict) -> None:
158
+ self._snapshot = dict(cfg)
159
+ if self.on_loaded is not None:
160
+ self.on_loaded(cfg)
@@ -0,0 +1,151 @@
1
+ """User-facing service usage catalog for Aria Code."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from dataclasses import dataclass
6
+
7
+
8
+ @dataclass(frozen=True)
9
+ class ServiceUsageSpec:
10
+ name: str
11
+ purpose: str
12
+ cli_entrypoints: tuple[str, ...]
13
+ package_sources: tuple[str, ...]
14
+ mcp_tools: tuple[str, ...]
15
+ next_step: str
16
+
17
+
18
+ def list_service_usage_specs() -> tuple[ServiceUsageSpec, ...]:
19
+ """Return how each project service is meant to be used from Aria."""
20
+
21
+ return (
22
+ ServiceUsageSpec(
23
+ name="agent_runtime",
24
+ purpose="模型回合、工具调用、并行/串行执行、审批、取消、LoopGuard 和 trace",
25
+ cli_entrypoints=("/chat", "-p", "aria"),
26
+ package_sources=("runtime", "packages/aria_sdk", "apps/cli/providers/runtime_bridge.py"),
27
+ mcp_tools=("aria.agent.run", "aria.tools.execute"),
28
+ next_step="/architecture --gaps 查看 runtime cutover 状态",
29
+ ),
30
+ ServiceUsageSpec(
31
+ name="settings_config",
32
+ purpose="模型配置、provider key、权限模式、网络开关、语言和 UI 偏好",
33
+ cli_entrypoints=("/config", "/model", "/apikey", "/setup"),
34
+ package_sources=("apps/cli/config_store.py", "apps/cli/config_paths.py", "config"),
35
+ mcp_tools=(),
36
+ next_step="/config list 或 /setup",
37
+ ),
38
+ ServiceUsageSpec(
39
+ name="context_memory",
40
+ purpose="上下文压力检测、自动压缩、会话恢复和用户偏好记忆",
41
+ cli_entrypoints=("/compact", "/memory", "/session"),
42
+ package_sources=("packages/aria_services/context.py", "apps/cli/message_processing.py"),
43
+ mcp_tools=("aria.context.compact",),
44
+ next_step="/status 查看 auto compact 状态",
45
+ ),
46
+ ServiceUsageSpec(
47
+ name="context_references",
48
+ purpose="使用 @ 将文件、目录、市场资产和研究产物作为只读上下文附加到请求",
49
+ cli_entrypoints=("@file:", "@folder:", "@asset:", "@portfolio:", "@strategy:", "@dataset:", "@run:", "@report:"),
50
+ package_sources=("packages/aria_services/references.py", "ui/completer.py"),
51
+ mcp_tools=(),
52
+ next_step="输入 @ 查看类型,或使用 /risk @portfolio:core",
53
+ ),
54
+ ServiceUsageSpec(
55
+ name="tool_registry",
56
+ purpose="本地工具、MCP 工具、schema、权限和 deterministic 输出封装",
57
+ cli_entrypoints=("/tools", "/mcp", "!shell"),
58
+ package_sources=("packages/aria_tools", "packages/aria_mcp", "runtime/tool_executor.py"),
59
+ mcp_tools=("read_file", "run_command", "broker_order"),
60
+ next_step="/tools 或 /packages tools arthera",
61
+ ),
62
+ ServiceUsageSpec(
63
+ name="market_data",
64
+ purpose="行情、历史K线、技术指标、数据质量标记",
65
+ cli_entrypoints=("/quote", "/market", "/ta", "/chart"),
66
+ package_sources=("packages/data", "packages/quant_engine"),
67
+ mcp_tools=("calculate_factors", "northbound_flow"),
68
+ next_step="/quote AAPL 或 /chart MC.PA 1y",
69
+ ),
70
+ ServiceUsageSpec(
71
+ name="signals_prediction",
72
+ purpose="量化信号、预测收益、市场状态和仓位建议",
73
+ cli_entrypoints=("/signal", "/predict", "/team"),
74
+ package_sources=("packages/quant_engine", "packages/ml"),
75
+ mcp_tools=("generate_signal", "get_ai_signal", "get_predictions", "kelly_position"),
76
+ next_step="/signal NVDA 或 /packages tools arthera",
77
+ ),
78
+ ServiceUsageSpec(
79
+ name="backtest",
80
+ purpose="策略回测、交易成本、胜率、夏普和最大回撤",
81
+ cli_entrypoints=("/backtest", "/strategy"),
82
+ package_sources=("packages/quant_engine/backtest",),
83
+ mcp_tools=("run_backtest",),
84
+ next_step="/backtest momentum NVDA --period 1y",
85
+ ),
86
+ ServiceUsageSpec(
87
+ name="risk_portfolio",
88
+ purpose="持仓风险、组合风险、压力测试和资金管理",
89
+ cli_entrypoints=("/risk", "/positions", "/account"),
90
+ package_sources=("brokers", "packages/quant_engine/risk", "packages/contracts"),
91
+ mcp_tools=("detect_regime", "kelly_position"),
92
+ next_step="/broker guide 然后 /positions",
93
+ ),
94
+ ServiceUsageSpec(
95
+ name="reports_artifacts",
96
+ purpose="研报、图表、看板、Pine 文件、完成度门禁和本地 artifact 管理",
97
+ cli_entrypoints=("/report", "/dashboard", "/chart", "/tv", "/artifacts"),
98
+ package_sources=("packages/reporting", "artifacts"),
99
+ mcp_tools=(
100
+ "aria.report.generate",
101
+ "aria.artifacts.list",
102
+ "research_report_assess",
103
+ "research_run_record_quality",
104
+ ),
105
+ next_step="/report MSFT --format html",
106
+ ),
107
+ ServiceUsageSpec(
108
+ name="broker_execution",
109
+ purpose="券商连接、账户只读查询、仿盘账户、订单预览、确认后执行和审计",
110
+ cli_entrypoints=("/broker", "/paper", "/trade", "/account", "/positions", "/orders"),
111
+ package_sources=("brokers", "brokers/trading.py", "brokers/paper_broker.py"),
112
+ mcp_tools=("broker_query", "broker_order"),
113
+ next_step="/paper start 100000 USD 或 /broker doctor",
114
+ ),
115
+ ServiceUsageSpec(
116
+ name="tradingview_webhook",
117
+ purpose="TradingView 图表打开、Pine 策略导出、Alert Webhook 接入",
118
+ cli_entrypoints=("/tv", "aria_daemon.py"),
119
+ package_sources=("apps/cli/tradingview_bridge.py", "aria_daemon.py"),
120
+ mcp_tools=(),
121
+ next_step="/tv NVDA --pine --txt",
122
+ ),
123
+ ServiceUsageSpec(
124
+ name="mcp_bridge",
125
+ purpose="把 Arthera QuantEngine 作为 MCP 工具暴露给 Aria/Claude/Cursor",
126
+ cli_entrypoints=("/packages connect arthera", "/mcp reload", "/packages tools arthera"),
127
+ package_sources=("packages/quant_engine/mcp_server.py",),
128
+ mcp_tools=("calculate_factors", "run_backtest", "price_option", "execution_schedule"),
129
+ next_step="/packages connect arthera --reload",
130
+ ),
131
+ ServiceUsageSpec(
132
+ name="safety_policy",
133
+ purpose="文件、shell、网络、券商交易和隐私反馈的统一权限/审计边界",
134
+ cli_entrypoints=("/permissions", "/trade preview", "/feedback"),
135
+ package_sources=("safety", "runtime/approval.py", "command_safety.py", "privacy"),
136
+ mcp_tools=("run_command", "broker_order"),
137
+ next_step="/permissions 或 /trade mode",
138
+ ),
139
+ ServiceUsageSpec(
140
+ name="observability",
141
+ purpose="doctor、架构覆盖、数据源健康、trace、manifest 和支持包",
142
+ cli_entrypoints=("/doctor", "/architecture", "/packages doctor"),
143
+ package_sources=("packages/aria_infra", "packages/aria_services/provider_health.py"),
144
+ mcp_tools=("aria.health", "aria.manifest.export"),
145
+ next_step="/doctor 或 /architecture --gaps",
146
+ ),
147
+ )
148
+
149
+
150
+ def service_usage_map() -> dict[str, ServiceUsageSpec]:
151
+ return {spec.name: spec for spec in list_service_usage_specs()}
@@ -0,0 +1,46 @@
1
+ """Skill registry facade."""
2
+
3
+ from .registry import SkillSpec, builtin_skill_specs
4
+ from .catalog import (
5
+ CatalogInstallResult,
6
+ CatalogSource,
7
+ catalog_clone_command,
8
+ default_catalog_home,
9
+ install_catalog,
10
+ parse_catalog_source,
11
+ )
12
+ from .loader import (
13
+ LoadedSkill,
14
+ SkillActivation,
15
+ SkillActivationTrace,
16
+ SkillPolicy,
17
+ activate_external_skills,
18
+ build_skill_prompt_block,
19
+ default_skill_roots,
20
+ discover_external_skills,
21
+ recent_skill_activation_traces,
22
+ select_external_skills,
23
+ skill_tree_sha256,
24
+ )
25
+
26
+ __all__ = [
27
+ "CatalogInstallResult",
28
+ "CatalogSource",
29
+ "LoadedSkill",
30
+ "SkillActivation",
31
+ "SkillActivationTrace",
32
+ "SkillPolicy",
33
+ "SkillSpec",
34
+ "activate_external_skills",
35
+ "build_skill_prompt_block",
36
+ "builtin_skill_specs",
37
+ "catalog_clone_command",
38
+ "default_catalog_home",
39
+ "default_skill_roots",
40
+ "discover_external_skills",
41
+ "install_catalog",
42
+ "parse_catalog_source",
43
+ "recent_skill_activation_traces",
44
+ "select_external_skills",
45
+ "skill_tree_sha256",
46
+ ]