aria-code 4.1.3__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. agents/__init__.py +32 -0
  2. agents/base.py +190 -0
  3. agents/deep/__init__.py +37 -0
  4. agents/deep/calibration_loop.py +144 -0
  5. agents/deep/critic.py +125 -0
  6. agents/deep/deepen.py +193 -0
  7. agents/deep/models.py +149 -0
  8. agents/deep/pipeline.py +164 -0
  9. agents/deep/quant_fusion.py +192 -0
  10. agents/deep/themes.py +95 -0
  11. agents/deep/tiers.py +106 -0
  12. agents/financial/__init__.py +10 -0
  13. agents/financial/catalyst.py +279 -0
  14. agents/financial/debate.py +145 -0
  15. agents/financial/earnings.py +303 -0
  16. agents/financial/fundamental.py +159 -0
  17. agents/financial/macro.py +99 -0
  18. agents/financial/news.py +207 -0
  19. agents/financial/risk.py +132 -0
  20. agents/financial/sector.py +279 -0
  21. agents/financial/synthesis.py +274 -0
  22. agents/financial/technical.py +258 -0
  23. agents/portfolio_agent.py +333 -0
  24. agents/realty/__init__.py +62 -0
  25. agents/realty/asset_diagnosis.py +150 -0
  26. agents/realty/business_match.py +165 -0
  27. agents/realty/cashflow_verify.py +208 -0
  28. agents/realty/contract_rules.py +209 -0
  29. agents/realty/energy_anomaly.py +188 -0
  30. agents/realty/exit_settlement.py +207 -0
  31. agents/realty/fulfillment_risk.py +205 -0
  32. agents/realty/ops_optimize.py +159 -0
  33. agents/realty/revenue_share.py +214 -0
  34. agents/registry.py +144 -0
  35. agents/sports/__init__.py +0 -0
  36. agents/sports/football_agent.py +169 -0
  37. agents/team.py +289 -0
  38. aliyun_data_client.py +660 -0
  39. apps/README.md +12 -0
  40. apps/__init__.py +2 -0
  41. apps/channels/README.md +15 -0
  42. apps/cli/README.md +13 -0
  43. apps/cli/__init__.py +2 -0
  44. apps/cli/bootstrap.py +99 -0
  45. apps/cli/codegen_paths.py +29 -0
  46. apps/cli/commands/__init__.py +16 -0
  47. apps/cli/commands/analysis_cmds.py +288 -0
  48. apps/cli/commands/backtest_cmds.py +1887 -0
  49. apps/cli/commands/broker_cmds.py +1154 -0
  50. apps/cli/commands/business_workflow_cmds.py +289 -0
  51. apps/cli/commands/catalog.py +84 -0
  52. apps/cli/commands/data_cmds.py +405 -0
  53. apps/cli/commands/diagnostic_cmds.py +179 -0
  54. apps/cli/commands/diagnostic_ops_cmds.py +696 -0
  55. apps/cli/commands/finance_render.py +12 -0
  56. apps/cli/commands/market.py +399 -0
  57. apps/cli/commands/market_cmds.py +1276 -0
  58. apps/cli/commands/market_context.py +425 -0
  59. apps/cli/commands/market_render.py +7 -0
  60. apps/cli/commands/model_cmds.py +1579 -0
  61. apps/cli/commands/ops_cmds.py +668 -0
  62. apps/cli/commands/portfolio_cmds.py +962 -0
  63. apps/cli/commands/report.py +377 -0
  64. apps/cli/commands/scaffold_templates.py +617 -0
  65. apps/cli/commands/session_cmds.py +179 -0
  66. apps/cli/commands/session_ux_cmds.py +280 -0
  67. apps/cli/commands/team.py +588 -0
  68. apps/cli/commands/team_render.py +8 -0
  69. apps/cli/commands/ui_cmds.py +358 -0
  70. apps/cli/commands/workflow_cmds.py +279 -0
  71. apps/cli/commands/workspace_cmds.py +1414 -0
  72. apps/cli/config_paths.py +70 -0
  73. apps/cli/config_store.py +61 -0
  74. apps/cli/deterministic.py +122 -0
  75. apps/cli/direct.py +48 -0
  76. apps/cli/github_app_auth.py +135 -0
  77. apps/cli/handlers/__init__.py +11 -0
  78. apps/cli/handlers/broker_handlers.py +122 -0
  79. apps/cli/handlers/chart_handlers.py +1309 -0
  80. apps/cli/handlers/market_handlers.py +2509 -0
  81. apps/cli/handlers/realty_handlers.py +114 -0
  82. apps/cli/handlers/strategy_advice.py +82 -0
  83. apps/cli/hooks.py +180 -0
  84. apps/cli/i18n.py +284 -0
  85. apps/cli/intent.py +136 -0
  86. apps/cli/intent_router.py +217 -0
  87. apps/cli/lifecycle_hooks.py +48 -0
  88. apps/cli/main.py +29 -0
  89. apps/cli/market_metadata.py +135 -0
  90. apps/cli/market_universe.py +265 -0
  91. apps/cli/message_processing.py +257 -0
  92. apps/cli/plan_mode.py +139 -0
  93. apps/cli/plotly_html.py +15 -0
  94. apps/cli/prediction_feedback.py +202 -0
  95. apps/cli/preflight.py +497 -0
  96. apps/cli/project_aria.py +60 -0
  97. apps/cli/prompts/__init__.py +0 -0
  98. apps/cli/prompts/coding.py +658 -0
  99. apps/cli/prompts/system_prompts.py +531 -0
  100. apps/cli/prompts/ui.py +434 -0
  101. apps/cli/providers/__init__.py +1 -0
  102. apps/cli/providers/base.py +271 -0
  103. apps/cli/providers/chat_routing.py +80 -0
  104. apps/cli/providers/llm/__init__.py +1 -0
  105. apps/cli/providers/llm/ollama_stream.py +1170 -0
  106. apps/cli/providers/llm/sse_stream.py +216 -0
  107. apps/cli/providers/runtime_bridge.py +185 -0
  108. apps/cli/runtime_consumer.py +489 -0
  109. apps/cli/session_export.py +87 -0
  110. apps/cli/session_jsonl.py +207 -0
  111. apps/cli/session_store.py +112 -0
  112. apps/cli/todo_tracker.py +190 -0
  113. apps/cli/tools/__init__.py +40 -0
  114. apps/cli/tools/context.py +46 -0
  115. apps/cli/tools/file_tools.py +112 -0
  116. apps/cli/tools/market_tools.py +549 -0
  117. apps/cli/tools/notebook_tools.py +111 -0
  118. apps/cli/tools/system_tools.py +669 -0
  119. apps/cli/tools/write_tools.py +715 -0
  120. apps/cli/tradingview_bridge.py +434 -0
  121. apps/cli/update_check.py +152 -0
  122. apps/cli/utils/__init__.py +0 -0
  123. apps/cli/utils/market_detect.py +1578 -0
  124. apps/daemon/README.md +14 -0
  125. apps/vscode/README.md +115 -0
  126. apps/vscode/package.json +70 -0
  127. aria_cli.py +11636 -0
  128. aria_code-4.1.3.dist-info/METADATA +952 -0
  129. aria_code-4.1.3.dist-info/RECORD +284 -0
  130. aria_code-4.1.3.dist-info/WHEEL +5 -0
  131. aria_code-4.1.3.dist-info/entry_points.txt +2 -0
  132. aria_code-4.1.3.dist-info/licenses/LICENSE +121 -0
  133. aria_code-4.1.3.dist-info/top_level.txt +50 -0
  134. aria_daemon.py +1295 -0
  135. aria_feishu_bot.py +1359 -0
  136. aria_relay_client.py +182 -0
  137. aria_relay_server.py +405 -0
  138. aria_telegram_bot.py +202 -0
  139. ariarc.py +328 -0
  140. artifacts.py +491 -0
  141. backtest_report.py +472 -0
  142. brokers/__init__.py +72 -0
  143. brokers/base.py +207 -0
  144. brokers/capabilities.py +264 -0
  145. brokers/cn/__init__.py +10 -0
  146. brokers/cn/easytrader_broker.py +193 -0
  147. brokers/cn/futu_broker.py +194 -0
  148. brokers/cn/longbridge_broker.py +190 -0
  149. brokers/cn/tiger_broker.py +196 -0
  150. brokers/cn/xtquant_broker.py +175 -0
  151. brokers/config.py +364 -0
  152. brokers/intl/__init__.py +5 -0
  153. brokers/intl/alpaca_broker.py +183 -0
  154. brokers/intl/ibkr_broker.py +215 -0
  155. brokers/intl/webull_broker.py +156 -0
  156. brokers/paper_broker.py +259 -0
  157. brokers/planning.py +296 -0
  158. brokers/registry.py +181 -0
  159. brokers/trading.py +237 -0
  160. change_store.py +127 -0
  161. command_safety.py +19 -0
  162. computer_use_tools.py +504 -0
  163. dashboard_generator.py +578 -0
  164. data_analysis_tools.py +808 -0
  165. data_cleaner.py +483 -0
  166. data_service.py +481 -0
  167. datasources/__init__.py +23 -0
  168. datasources/base.py +166 -0
  169. datasources/router.py +221 -0
  170. datasources/sources/__init__.py +15 -0
  171. datasources/sources/akshare_source.py +269 -0
  172. datasources/sources/alpha_vantage_source.py +202 -0
  173. datasources/sources/edgar_source.py +218 -0
  174. datasources/sources/finnhub_source.py +197 -0
  175. datasources/sources/fred_source.py +219 -0
  176. datasources/sources/tushare_source.py +141 -0
  177. datasources/sources/web_scraper_source.py +278 -0
  178. datasources/sources/world_bank_source.py +205 -0
  179. datasources/sources/yfinance_source.py +152 -0
  180. demo_player.py +204 -0
  181. doctor.py +508 -0
  182. file_analysis_tools.py +734 -0
  183. finance_formulas.py +389 -0
  184. football_data_client.py +1670 -0
  185. intent_classifier.py +358 -0
  186. local_finance_tools.py +3221 -0
  187. local_llm_provider.py +552 -0
  188. macro_tools.py +368 -0
  189. market_data_client.py +1899 -0
  190. mcp_client.py +506 -0
  191. memory_manager.py +245 -0
  192. model_capability.py +416 -0
  193. notification_tools.py +248 -0
  194. packages/__init__.py +23 -0
  195. packages/aria_agents/__init__.py +5 -0
  196. packages/aria_agents/manifest.py +69 -0
  197. packages/aria_core/__init__.py +34 -0
  198. packages/aria_core/architecture.py +192 -0
  199. packages/aria_core/export.py +124 -0
  200. packages/aria_core/manifest.py +65 -0
  201. packages/aria_infra/__init__.py +15 -0
  202. packages/aria_infra/arthera.py +52 -0
  203. packages/aria_infra/doctor.py +246 -0
  204. packages/aria_infra/product.py +37 -0
  205. packages/aria_mcp/__init__.py +25 -0
  206. packages/aria_mcp/bridge.py +38 -0
  207. packages/aria_mcp/config.py +97 -0
  208. packages/aria_mcp/tools.py +61 -0
  209. packages/aria_sdk/__init__.py +19 -0
  210. packages/aria_sdk/client.py +396 -0
  211. packages/aria_sdk/providers.py +70 -0
  212. packages/aria_sdk/streaming.py +73 -0
  213. packages/aria_sdk/types.py +86 -0
  214. packages/aria_services/__init__.py +55 -0
  215. packages/aria_services/context.py +258 -0
  216. packages/aria_services/data.py +11 -0
  217. packages/aria_services/provider_health.py +189 -0
  218. packages/aria_services/registry.py +213 -0
  219. packages/aria_services/usage.py +138 -0
  220. packages/aria_skills/__init__.py +5 -0
  221. packages/aria_skills/registry.py +59 -0
  222. packages/aria_tools/__init__.py +5 -0
  223. packages/aria_tools/registry.py +128 -0
  224. packages/quant_engine/__init__.py +6 -0
  225. packages/quant_engine/sports/__init__.py +72 -0
  226. packages/quant_engine/sports/calibrator.py +353 -0
  227. packages/quant_engine/sports/dixon_coles.py +234 -0
  228. packages/quant_engine/sports/elo.py +299 -0
  229. packages/quant_engine/sports/form.py +188 -0
  230. packages/quant_engine/sports/h2h.py +195 -0
  231. packages/quant_engine/sports/ml_model.py +354 -0
  232. packages/quant_engine/sports/predictor.py +311 -0
  233. packages/quant_engine/sports/tracker.py +664 -0
  234. packages/quant_engine/stochastic/__init__.py +27 -0
  235. packages/quant_engine/stochastic/gbm_enhanced.py +195 -0
  236. packages/quant_engine/stochastic/ito_calculus.py +477 -0
  237. packages/quant_engine/stochastic/kelly_criterion.py +181 -0
  238. packages/quant_engine/stochastic/monte_carlo_advanced.py +95 -0
  239. packages/quant_engine/stochastic/options_pricing.py +573 -0
  240. packages/quant_engine/stochastic/stochastic_processes.py +90 -0
  241. plan_utils.py +194 -0
  242. plugin_loader.py +328 -0
  243. portfolio_ledger.py +262 -0
  244. privacy/__init__.py +5 -0
  245. privacy/feedback.py +123 -0
  246. project_tools.py +525 -0
  247. providers/__init__.py +30 -0
  248. providers/llm/__init__.py +19 -0
  249. providers/llm/anthropic.py +184 -0
  250. providers/llm/base.py +139 -0
  251. providers/llm/ollama.py +128 -0
  252. providers/llm/openai_compat.py +282 -0
  253. providers/llm/registry.py +358 -0
  254. realty_data_tools.py +659 -0
  255. report_generator.py +1314 -0
  256. runtime/__init__.py +103 -0
  257. runtime/agent_loop.py +1183 -0
  258. runtime/approval.py +51 -0
  259. runtime/events.py +102 -0
  260. runtime/gateway.py +128 -0
  261. runtime/lsp.py +346 -0
  262. runtime/subagent.py +258 -0
  263. runtime/tool_executor.py +104 -0
  264. runtime/tool_policy.py +106 -0
  265. safety/__init__.py +21 -0
  266. safety/permissions.py +275 -0
  267. setup_wizard.py +653 -0
  268. strategy_vault.py +420 -0
  269. ui/__init__.py +100 -0
  270. ui/banner.py +310 -0
  271. ui/completer.py +391 -0
  272. ui/console.py +271 -0
  273. ui/image_render.py +243 -0
  274. ui/input_box.py +376 -0
  275. ui/picker.py +195 -0
  276. ui/render/__init__.py +11 -0
  277. ui/render/finance.py +1480 -0
  278. ui/render/market.py +225 -0
  279. ui/render/output.py +681 -0
  280. ui/render/team.py +346 -0
  281. ui/robot.py +235 -0
  282. workspace/__init__.py +6 -0
  283. workspace/files.py +170 -0
  284. workspace/verify.py +113 -0
ui/render/market.py ADDED
@@ -0,0 +1,225 @@
1
+ """Terminal renderers for market commands."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any, Callable, Iterable
6
+
7
+
8
+ ValueFormatter = Callable[..., str]
9
+
10
+
11
+ def _num_or_none(value: Any) -> float | None:
12
+ if value in (None, ""):
13
+ return None
14
+ try:
15
+ numeric = float(value)
16
+ except (TypeError, ValueError):
17
+ return None
18
+ if numeric != numeric:
19
+ return None
20
+ return numeric
21
+
22
+
23
+ def _format_quote_bound(value: Any) -> str:
24
+ numeric = _num_or_none(value)
25
+ if numeric is None:
26
+ return str(value) if value not in (None, "") else "-"
27
+ return f"{numeric:.2f}"
28
+
29
+
30
+ def compact_quote_market_cap(value: Any, currency: str = "USD") -> str:
31
+ numeric = _num_or_none(value)
32
+ if numeric is None or numeric <= 0:
33
+ return ""
34
+ curr = (currency or "USD").upper()
35
+ if curr == "CNY":
36
+ return f" Mkt Cap: ¥{numeric / 1e8:.0f}亿"
37
+ prefix = "$" if curr == "USD" else f"{curr} "
38
+ if numeric >= 1e12:
39
+ return f" Mkt Cap: {prefix}{numeric / 1e12:.2f}T"
40
+ if numeric >= 1e9:
41
+ return f" Mkt Cap: {prefix}{numeric / 1e9:.1f}B"
42
+ if numeric >= 1e6:
43
+ return f" Mkt Cap: {prefix}{numeric / 1e6:.0f}M"
44
+ return f" Mkt Cap: {prefix}{numeric:,.0f}"
45
+
46
+
47
+ def render_quote_plain(symbol: str, quote: dict[str, Any], *, name: str | None = None) -> str:
48
+ label = name or quote.get("name") or symbol
49
+ price = quote.get("price", "-")
50
+ change = _num_or_none(quote.get("change_pct")) or 0.0
51
+ sign = "+" if change >= 0 else ""
52
+ return f" {symbol:<8} {str(price):<10} {sign}{change:.2f}% {label}"
53
+
54
+
55
+ def print_quote_result(
56
+ *,
57
+ console: Any,
58
+ has_rich: bool,
59
+ symbol: str,
60
+ quote: dict[str, Any],
61
+ name: str | None = None,
62
+ ) -> None:
63
+ """Render a single quote row."""
64
+
65
+ label = name or quote.get("name") or symbol
66
+ if not quote.get("success"):
67
+ err = quote.get("error", "failed")
68
+ if has_rich:
69
+ console.print(f" [red]{symbol}: {err}[/red]")
70
+ else:
71
+ print(f" {symbol}: {err}")
72
+ return
73
+
74
+ if not has_rich:
75
+ print(render_quote_plain(symbol, quote, name=label))
76
+ return
77
+
78
+ price = quote.get("price", "-")
79
+ change = _num_or_none(quote.get("change_pct")) or 0.0
80
+ currency = quote.get("currency", "")
81
+ high = _format_quote_bound(quote.get("high", "-"))
82
+ low = _format_quote_bound(quote.get("low", "-"))
83
+ market_cap = compact_quote_market_cap(quote.get("market_cap"), currency)
84
+ color = "green" if change >= 0 else "red"
85
+ sign = "+" if change >= 0 else ""
86
+ console.print(
87
+ f" [bold]{symbol:<8}[/bold] [dim]{str(label)[:20]:<22}[/dim]"
88
+ f" [bold]{currency} {price}[/bold]"
89
+ f" [{color}]{sign}{change:.2f}%[/{color}]"
90
+ f" [dim]Hi:{high} Lo:{low}{market_cap}[/dim]"
91
+ )
92
+
93
+
94
+ def _rsi_color(value: Any) -> str:
95
+ if value is None:
96
+ return "dim"
97
+ try:
98
+ numeric = float(value)
99
+ except (TypeError, ValueError):
100
+ return "dim"
101
+ if numeric > 70:
102
+ return "red"
103
+ if numeric < 30:
104
+ return "green"
105
+ return "white"
106
+
107
+
108
+ def _rsi_label(value: Any) -> str:
109
+ try:
110
+ numeric = float(value)
111
+ except (TypeError, ValueError):
112
+ return "中性"
113
+ if numeric > 70:
114
+ return "超买"
115
+ if numeric < 30:
116
+ return "超卖"
117
+ return "中性"
118
+
119
+
120
+ def _macd_color(value: Any) -> str:
121
+ try:
122
+ numeric = float(value)
123
+ except (TypeError, ValueError):
124
+ return "red"
125
+ return "green" if numeric > 0 else "red"
126
+
127
+
128
+ def _macd_label(value: Any) -> str:
129
+ try:
130
+ numeric = float(value)
131
+ except (TypeError, ValueError):
132
+ return ""
133
+ return "金叉" if numeric > 0 else "死叉"
134
+
135
+
136
+ def _quality_line(service_result: Any) -> str:
137
+ quality = getattr(service_result, "quality", {}) or {}
138
+ missing = getattr(service_result, "missing_fields", []) or []
139
+ stale = bool(getattr(service_result, "stale", False))
140
+ return (
141
+ f"data:{quality.get('status', 'ok')} "
142
+ f"stale:{'yes' if stale else 'no'} "
143
+ f"missing:{', '.join(missing) if missing else 'none'}"
144
+ )
145
+
146
+
147
+ def render_ta_plain(symbol: str, days: int, service_result: Any, formatter: ValueFormatter) -> str:
148
+ data = getattr(service_result, "data", {}) or {}
149
+ lines = [
150
+ f"{symbol} 技术指标",
151
+ _quality_line(service_result),
152
+ (
153
+ f"价格: {formatter(data.get('price'))} "
154
+ f"RSI: {formatter(data.get('rsi'))} "
155
+ f"MACD_hist: {formatter(data.get('macd_hist'), digits=4)}"
156
+ ),
157
+ ]
158
+ ma_parts = [
159
+ f"{name.upper()}: {data[name]}"
160
+ for name in ("ma5", "ma10", "ma20", "ma60")
161
+ if data.get(name)
162
+ ]
163
+ if ma_parts:
164
+ lines.append(" ".join(ma_parts))
165
+ return "\n".join(lines)
166
+
167
+
168
+ def print_ta_result(
169
+ *,
170
+ console: Any,
171
+ has_rich: bool,
172
+ symbol: str,
173
+ days: int,
174
+ service_result: Any,
175
+ formatter: ValueFormatter,
176
+ ma_names: Iterable[str] = ("ma5", "ma10", "ma20", "ma60", "ma120"),
177
+ ) -> None:
178
+ """Render a technical-analysis service result to the active terminal."""
179
+
180
+ data = getattr(service_result, "data", {}) or {}
181
+ if not has_rich:
182
+ print(render_ta_plain(symbol, days, service_result, formatter))
183
+ return
184
+
185
+ providers = " → ".join(getattr(service_result, "provider_chain", []) or [])
186
+ console.print()
187
+ console.print(
188
+ f" [bold]{symbol}[/bold] 技术指标 "
189
+ f"[dim]{days}日数据 provider:{providers or data.get('provider', '')}[/dim]"
190
+ )
191
+ if getattr(service_result, "quality", None):
192
+ console.print(f" [dim]{_quality_line(service_result)}[/dim]")
193
+ console.print()
194
+ console.print(f" 当前价格 [bold]{formatter(data.get('price'))}[/bold]")
195
+
196
+ rsi = data.get("rsi")
197
+ rsi_color = _rsi_color(rsi)
198
+ console.print(
199
+ f" RSI(14) [{rsi_color}]{formatter(rsi)}[/{rsi_color}] {_rsi_label(rsi)}"
200
+ )
201
+
202
+ macd_hist = data.get("macd_hist")
203
+ if any(data.get(key) is not None for key in ("macd", "macd_signal", "macd_hist")):
204
+ macd_color = _macd_color(macd_hist)
205
+ console.print(
206
+ f" MACD {formatter(data.get('macd'), digits=4)} "
207
+ f"Signal:{formatter(data.get('macd_signal'), digits=4)} "
208
+ f"[{macd_color}]Hist:{formatter(macd_hist, digits=4)} "
209
+ f"{_macd_label(macd_hist)}[/{macd_color}]"
210
+ )
211
+
212
+ bb_pos = data.get("bb_position", 0.5)
213
+ if any(data.get(key) is not None for key in ("bb_upper", "bb_mid", "bb_lower")):
214
+ console.print(
215
+ f" 布林带 上:{formatter(data.get('bb_upper'))} "
216
+ f"中:{formatter(data.get('bb_mid'))} 下:{formatter(data.get('bb_lower'))} "
217
+ f"位置:{formatter(bb_pos)}"
218
+ )
219
+
220
+ console.print()
221
+ for name in ma_names:
222
+ if data.get(name):
223
+ console.print(f" {name.upper():<7} {data[name]}", end=" ")
224
+ console.print()
225
+ console.print()