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.
- aria_bots/__init__.py +7 -0
- aria_bots/channels/README.md +97 -0
- aria_bots/channels/__init__.py +1 -0
- aria_bots/channels/approvals.py +263 -0
- aria_bots/channels/conversation.py +280 -0
- aria_bots/channels/digest.py +186 -0
- aria_bots/channels/registry.py +95 -0
- aria_bots/engine.py +144 -0
- aria_bots/feishu_bot.py +1385 -0
- aria_bots/logistics/__init__.py +1 -0
- aria_bots/logistics/carriers.py +253 -0
- aria_bots/logistics/freight.py +154 -0
- aria_bots/logistics/inventory.py +242 -0
- aria_bots/logistics/mcp_server.py +156 -0
- aria_bots/logistics/records.py +119 -0
- aria_bots/logistics/tenancy.py +152 -0
- aria_bots/market.py +91 -0
- aria_bots/relay_client.py +326 -0
- aria_bots/telegram_bot.py +299 -0
- aria_code/__init__.py +111 -0
- aria_code/_bin/aria-native.exe +0 -0
- aria_code/_bin/aria-runtime.exe +0 -0
- aria_code/_version.py +20 -0
- aria_code/account_memory.py +296 -0
- aria_code/account_session.py +166 -0
- aria_code/adk_apps/__init__.py +1 -0
- aria_code/adk_apps/aria_code_review/__init__.py +1 -0
- aria_code/adk_apps/aria_code_review/agent.py +32 -0
- aria_code/adk_apps/aria_research/__init__.py +1 -0
- aria_code/adk_apps/aria_research/agent.py +31 -0
- aria_code/agents/__init__.py +49 -0
- aria_code/agents/base.py +329 -0
- aria_code/agents/code_review.py +200 -0
- aria_code/agents/deep/__init__.py +37 -0
- aria_code/agents/deep/calibration_loop.py +144 -0
- aria_code/agents/deep/critic.py +125 -0
- aria_code/agents/deep/deepen.py +193 -0
- aria_code/agents/deep/models.py +149 -0
- aria_code/agents/deep/pipeline.py +164 -0
- aria_code/agents/deep/quant_fusion.py +192 -0
- aria_code/agents/deep/themes.py +95 -0
- aria_code/agents/deep/tiers.py +106 -0
- aria_code/agents/engineering/__init__.py +14 -0
- aria_code/agents/engineering/coder.py +222 -0
- aria_code/agents/engineering/tester.py +145 -0
- aria_code/agents/financial/__init__.py +21 -0
- aria_code/agents/financial/cashflow_burn.py +119 -0
- aria_code/agents/financial/catalyst.py +279 -0
- aria_code/agents/financial/corporate_finance.py +175 -0
- aria_code/agents/financial/debate.py +224 -0
- aria_code/agents/financial/earnings.py +315 -0
- aria_code/agents/financial/fundamental.py +178 -0
- aria_code/agents/financial/macro.py +111 -0
- aria_code/agents/financial/news.py +231 -0
- aria_code/agents/financial/risk.py +146 -0
- aria_code/agents/financial/sector.py +279 -0
- aria_code/agents/financial/strategist.py +121 -0
- aria_code/agents/financial/stripe_revenue.py +127 -0
- aria_code/agents/financial/synthesis.py +274 -0
- aria_code/agents/financial/technical.py +277 -0
- aria_code/agents/orchestrator.py +44 -0
- aria_code/agents/portfolio_agent.py +392 -0
- aria_code/agents/realty/__init__.py +62 -0
- aria_code/agents/realty/asset_diagnosis.py +152 -0
- aria_code/agents/realty/business_match.py +166 -0
- aria_code/agents/realty/cashflow_verify.py +209 -0
- aria_code/agents/realty/contract_rules.py +210 -0
- aria_code/agents/realty/energy_anomaly.py +189 -0
- aria_code/agents/realty/exit_settlement.py +208 -0
- aria_code/agents/realty/fulfillment_risk.py +206 -0
- aria_code/agents/realty/ops_optimize.py +160 -0
- aria_code/agents/realty/revenue_share.py +215 -0
- aria_code/agents/registry.py +168 -0
- aria_code/agents/signal_scheme.py +111 -0
- aria_code/agents/sports/__init__.py +0 -0
- aria_code/agents/sports/football_agent.py +197 -0
- aria_code/agents/supervisor.py +113 -0
- aria_code/agents/team.py +500 -0
- aria_code/agents/video/__init__.py +16 -0
- aria_code/agents/video/director.py +376 -0
- aria_code/agents/video/qa_agent.py +143 -0
- aria_code/agents/video/script_doctor.py +112 -0
- aria_code/agents/warehouse/__init__.py +25 -0
- aria_code/agents/warehouse/contracts.py +26 -0
- aria_code/agents/warehouse/dashboard.py +155 -0
- aria_code/agents/warehouse/fulfillment_leadtime.py +95 -0
- aria_code/agents/warehouse/inbound_exceptions.py +25 -0
- aria_code/agents/warehouse/inventory_health.py +24 -0
- aria_code/agents/warehouse/local_run.py +71 -0
- aria_code/agents/warehouse/local_snapshot.py +132 -0
- aria_code/agents/warehouse/logistics_cost.py +84 -0
- aria_code/agents/warehouse/logistics_sync.py +21 -0
- aria_code/agents/warehouse/navigation.schema.json +110 -0
- aria_code/agents/warehouse/task_agent.py +172 -0
- aria_code/agents/warehouse/workflow.py +31 -0
- aria_code/aliyun_data_client.py +4 -0
- aria_code/apps/README.md +12 -0
- aria_code/apps/__init__.py +2 -0
- aria_code/apps/channels/README.md +9 -0
- aria_code/apps/channels/__init__.py +17 -0
- aria_code/apps/channels/approvals.py +11 -0
- aria_code/apps/channels/conversation.py +11 -0
- aria_code/apps/channels/digest.py +11 -0
- aria_code/apps/channels/intake.py +92 -0
- aria_code/apps/channels/registry.py +11 -0
- aria_code/apps/channels/tradingview.py +94 -0
- aria_code/apps/cli/README.md +13 -0
- aria_code/apps/cli/__init__.py +2 -0
- aria_code/apps/cli/_optional.py +120 -0
- aria_code/apps/cli/app_server.py +656 -0
- aria_code/apps/cli/auto_update.py +125 -0
- aria_code/apps/cli/bootstrap.py +206 -0
- aria_code/apps/cli/broker_render.py +206 -0
- aria_code/apps/cli/chat_turn.py +1327 -0
- aria_code/apps/cli/cloud_models.py +231 -0
- aria_code/apps/cli/codegen_paths.py +29 -0
- aria_code/apps/cli/commands/__init__.py +34 -0
- aria_code/apps/cli/commands/_business_render.py +78 -0
- aria_code/apps/cli/commands/_ui.py +71 -0
- aria_code/apps/cli/commands/analysis_cmds.py +378 -0
- aria_code/apps/cli/commands/ashare_prediction_cmds.py +327 -0
- aria_code/apps/cli/commands/auth_cmds.py +215 -0
- aria_code/apps/cli/commands/backtest_cmds.py +2518 -0
- aria_code/apps/cli/commands/broker_cmds.py +1236 -0
- aria_code/apps/cli/commands/business_workflow_cmds.py +379 -0
- aria_code/apps/cli/commands/canvas_cmds.py +77 -0
- aria_code/apps/cli/commands/catalog.py +189 -0
- aria_code/apps/cli/commands/core_cmds.py +2748 -0
- aria_code/apps/cli/commands/data_cmds.py +521 -0
- aria_code/apps/cli/commands/diagnostic_cmds.py +285 -0
- aria_code/apps/cli/commands/diagnostic_ops_cmds.py +813 -0
- aria_code/apps/cli/commands/engineering_cmds.py +399 -0
- aria_code/apps/cli/commands/file_cmds.py +312 -0
- aria_code/apps/cli/commands/finance_service_cmds.py +60 -0
- aria_code/apps/cli/commands/fx_commodity_cmds.py +123 -0
- aria_code/apps/cli/commands/market.py +544 -0
- aria_code/apps/cli/commands/market_cmds.py +1419 -0
- aria_code/apps/cli/commands/market_context.py +432 -0
- aria_code/apps/cli/commands/market_render.py +7 -0
- aria_code/apps/cli/commands/model_cmds.py +2374 -0
- aria_code/apps/cli/commands/ops_cmds.py +721 -0
- aria_code/apps/cli/commands/orchestrator_cmds.py +181 -0
- aria_code/apps/cli/commands/pdf_export_cmds.py +125 -0
- aria_code/apps/cli/commands/portfolio_cmds.py +1316 -0
- aria_code/apps/cli/commands/report.py +476 -0
- aria_code/apps/cli/commands/scaffold_templates.py +617 -0
- aria_code/apps/cli/commands/session_cmds.py +236 -0
- aria_code/apps/cli/commands/session_ux_cmds.py +359 -0
- aria_code/apps/cli/commands/team.py +723 -0
- aria_code/apps/cli/commands/team_render.py +8 -0
- aria_code/apps/cli/commands/ui_cmds.py +401 -0
- aria_code/apps/cli/commands/warehouse_cmds.py +297 -0
- aria_code/apps/cli/commands/workflow_cmds.py +629 -0
- aria_code/apps/cli/commands/workspace_cmds.py +1543 -0
- aria_code/apps/cli/config_paths.py +73 -0
- aria_code/apps/cli/config_store.py +158 -0
- aria_code/apps/cli/constants.py +88 -0
- aria_code/apps/cli/context.py +34 -0
- aria_code/apps/cli/conversation_policy.py +53 -0
- aria_code/apps/cli/deterministic.py +200 -0
- aria_code/apps/cli/direct.py +48 -0
- aria_code/apps/cli/earnings_view.py +172 -0
- aria_code/apps/cli/endpoint_migration.py +64 -0
- aria_code/apps/cli/exec_events.py +255 -0
- aria_code/apps/cli/file_references.py +155 -0
- aria_code/apps/cli/finance_service_catalog.py +111 -0
- aria_code/apps/cli/football_reports.py +231 -0
- aria_code/apps/cli/github_app_auth.py +135 -0
- aria_code/apps/cli/google_login.py +239 -0
- aria_code/apps/cli/handlers/__init__.py +11 -0
- aria_code/apps/cli/handlers/broker_handlers.py +122 -0
- aria_code/apps/cli/handlers/chart_handlers.py +1314 -0
- aria_code/apps/cli/handlers/market_handlers.py +2570 -0
- aria_code/apps/cli/handlers/realty_handlers.py +114 -0
- aria_code/apps/cli/handlers/sports_handlers.py +22 -0
- aria_code/apps/cli/handlers/strategy_advice.py +82 -0
- aria_code/apps/cli/headless.py +352 -0
- aria_code/apps/cli/helpers.py +326 -0
- aria_code/apps/cli/hooks.py +180 -0
- aria_code/apps/cli/i18n.py +310 -0
- aria_code/apps/cli/intent.py +136 -0
- aria_code/apps/cli/intent_router.py +305 -0
- aria_code/apps/cli/intent_shadow.py +72 -0
- aria_code/apps/cli/intent_signals.py +347 -0
- aria_code/apps/cli/lifecycle_hooks.py +48 -0
- aria_code/apps/cli/local_tool_schemas.py +550 -0
- aria_code/apps/cli/main.py +39 -0
- aria_code/apps/cli/market_hours.py +100 -0
- aria_code/apps/cli/market_metadata.py +135 -0
- aria_code/apps/cli/market_universe.py +487 -0
- aria_code/apps/cli/message_processing.py +310 -0
- aria_code/apps/cli/mixin_binding.py +32 -0
- aria_code/apps/cli/model_catalog.py +652 -0
- aria_code/apps/cli/model_probe.py +169 -0
- aria_code/apps/cli/model_retirement.py +65 -0
- aria_code/apps/cli/native_branding.py +12 -0
- aria_code/apps/cli/native_bridge.py +118 -0
- aria_code/apps/cli/native_entry.py +58 -0
- aria_code/apps/cli/pdf_report.py +977 -0
- aria_code/apps/cli/plan_mode.py +139 -0
- aria_code/apps/cli/plotly_html.py +15 -0
- aria_code/apps/cli/prediction_feedback.py +202 -0
- aria_code/apps/cli/preflight.py +502 -0
- aria_code/apps/cli/project_aria.py +60 -0
- aria_code/apps/cli/prompt_assembly.py +78 -0
- aria_code/apps/cli/prompts/__init__.py +0 -0
- aria_code/apps/cli/prompts/coding.py +71 -0
- aria_code/apps/cli/prompts/select.py +193 -0
- aria_code/apps/cli/prompts/system_prompts.py +562 -0
- aria_code/apps/cli/prompts/ui.py +436 -0
- aria_code/apps/cli/provider_endpoints.py +237 -0
- aria_code/apps/cli/provider_keys.py +73 -0
- aria_code/apps/cli/providers/__init__.py +1 -0
- aria_code/apps/cli/providers/base.py +775 -0
- aria_code/apps/cli/providers/chat_routing.py +139 -0
- aria_code/apps/cli/providers/collaboration.py +98 -0
- aria_code/apps/cli/providers/llm/__init__.py +1 -0
- aria_code/apps/cli/providers/llm/offline_responses.py +68 -0
- aria_code/apps/cli/providers/llm/ollama_stream.py +1574 -0
- aria_code/apps/cli/providers/llm/response_cache.py +60 -0
- aria_code/apps/cli/providers/llm/sse_stream.py +298 -0
- aria_code/apps/cli/providers/runtime_bridge.py +586 -0
- aria_code/apps/cli/providers/vertexai_stream.py +592 -0
- aria_code/apps/cli/release_download.py +159 -0
- aria_code/apps/cli/review_runner.py +111 -0
- aria_code/apps/cli/runtime_consumer.py +769 -0
- aria_code/apps/cli/sandbox.py +32 -0
- aria_code/apps/cli/session_export.py +120 -0
- aria_code/apps/cli/session_jsonl.py +208 -0
- aria_code/apps/cli/session_refresh.py +123 -0
- aria_code/apps/cli/session_store.py +125 -0
- aria_code/apps/cli/skills_catalog.py +273 -0
- aria_code/apps/cli/task_isolation.py +211 -0
- aria_code/apps/cli/terminal_chrome.py +412 -0
- aria_code/apps/cli/todo_tracker.py +190 -0
- aria_code/apps/cli/tool_executor.py +932 -0
- aria_code/apps/cli/tool_registry.py +34 -0
- aria_code/apps/cli/tool_scope.py +113 -0
- aria_code/apps/cli/tools/__init__.py +40 -0
- aria_code/apps/cli/tools/context.py +46 -0
- aria_code/apps/cli/tools/file_tools.py +181 -0
- aria_code/apps/cli/tools/market_tools.py +626 -0
- aria_code/apps/cli/tools/notebook_tools.py +111 -0
- aria_code/apps/cli/tools/system_tools.py +656 -0
- aria_code/apps/cli/tools/write_tools.py +961 -0
- aria_code/apps/cli/tradingview_bridge.py +529 -0
- aria_code/apps/cli/transactions.py +269 -0
- aria_code/apps/cli/turn_planning.py +137 -0
- aria_code/apps/cli/update_check.py +257 -0
- aria_code/apps/cli/updater.py +373 -0
- aria_code/apps/cli/utils/__init__.py +0 -0
- aria_code/apps/cli/utils/market_detect.py +1663 -0
- aria_code/apps/cli/web_login.py +136 -0
- aria_code/apps/cli/workflow_runner.py +127 -0
- aria_code/apps/cli/workspace_route.py +121 -0
- aria_code/apps/daemon/README.md +14 -0
- aria_code/apps/vscode/README.md +115 -0
- aria_code/apps/vscode/package.json +70 -0
- aria_code/aria_cli.py +5244 -0
- aria_code/aria_daemon.py +1372 -0
- aria_code/aria_feishu_bot.py +16 -0
- aria_code/aria_mcp_server.py +61 -0
- aria_code/aria_relay_client.py +4 -0
- aria_code/aria_telegram_bot.py +11 -0
- aria_code/ariarc.py +385 -0
- aria_code/artifacts.py +581 -0
- aria_code/backtest_engine.py +4 -0
- aria_code/backtest_report.py +4 -0
- aria_code/brokers/__init__.py +78 -0
- aria_code/brokers/automation.py +193 -0
- aria_code/brokers/base.py +231 -0
- aria_code/brokers/capabilities.py +264 -0
- aria_code/brokers/cn/__init__.py +10 -0
- aria_code/brokers/cn/easytrader_broker.py +193 -0
- aria_code/brokers/cn/futu_broker.py +194 -0
- aria_code/brokers/cn/longbridge_broker.py +190 -0
- aria_code/brokers/cn/tiger_broker.py +196 -0
- aria_code/brokers/cn/xtquant_broker.py +225 -0
- aria_code/brokers/config.py +414 -0
- aria_code/brokers/intl/__init__.py +5 -0
- aria_code/brokers/intl/alpaca_broker.py +183 -0
- aria_code/brokers/intl/ibkr_broker.py +215 -0
- aria_code/brokers/intl/trading212_broker.py +183 -0
- aria_code/brokers/intl/webull_broker.py +156 -0
- aria_code/brokers/paper_broker.py +266 -0
- aria_code/brokers/planning.py +296 -0
- aria_code/brokers/registry.py +213 -0
- aria_code/brokers/trading.py +267 -0
- aria_code/canva_client.py +4 -0
- aria_code/change_store.py +127 -0
- aria_code/clients/__init__.py +0 -0
- aria_code/clients/aliyun_data_client.py +660 -0
- aria_code/clients/aria_relay_client.py +16 -0
- aria_code/clients/canva_client.py +284 -0
- aria_code/clients/figma_client.py +100 -0
- aria_code/clients/football_data_client.py +1671 -0
- aria_code/clients/kling_video_client.py +182 -0
- aria_code/clients/market_data_client.py +1985 -0
- aria_code/clients/openai_image_client.py +242 -0
- aria_code/clients/runway_video_client.py +157 -0
- aria_code/clients/warehouse_erp_client.py +105 -0
- aria_code/cloud_memory.py +190 -0
- aria_code/command_safety.py +19 -0
- aria_code/computer_use_server.py +276 -0
- aria_code/computer_use_tools.py +4 -0
- aria_code/dashboard_generator.py +579 -0
- aria_code/data_analysis_tools.py +4 -0
- aria_code/data_cleaner.py +483 -0
- aria_code/data_service.py +513 -0
- aria_code/datasources/__init__.py +23 -0
- aria_code/datasources/base.py +166 -0
- aria_code/datasources/router.py +253 -0
- aria_code/datasources/sec_statements.py +217 -0
- aria_code/datasources/sources/__init__.py +15 -0
- aria_code/datasources/sources/akshare_source.py +269 -0
- aria_code/datasources/sources/alpha_vantage_source.py +203 -0
- aria_code/datasources/sources/edgar_source.py +219 -0
- aria_code/datasources/sources/finnhub_source.py +198 -0
- aria_code/datasources/sources/fred_source.py +223 -0
- aria_code/datasources/sources/tushare_source.py +143 -0
- aria_code/datasources/sources/web_scraper_source.py +278 -0
- aria_code/datasources/sources/world_bank_source.py +206 -0
- aria_code/datasources/sources/yfinance_source.py +152 -0
- aria_code/doctor.py +860 -0
- aria_code/domain/__init__.py +0 -0
- aria_code/domain/_finance_core/__init__.py +5 -0
- aria_code/domain/_finance_core/backtest_engine.py +325 -0
- aria_code/domain/_finance_core/performance_stats.py +101 -0
- aria_code/domain/backtest_engine.py +75 -0
- aria_code/domain/backtest_report.py +488 -0
- aria_code/domain/finance_formulas.py +389 -0
- aria_code/domain/performance_stats.py +6 -0
- aria_code/domain/portfolio_ledger.py +307 -0
- aria_code/domain/strategy_vault.py +421 -0
- aria_code/evals/__init__.py +37 -0
- aria_code/evals/behavior.py +113 -0
- aria_code/evals/gap.py +93 -0
- aria_code/evals/harness.py +949 -0
- aria_code/evals/review_probe.py +132 -0
- aria_code/evals/runner.py +425 -0
- aria_code/evals/scorecard.py +322 -0
- aria_code/evals/summary.py +125 -0
- aria_code/external_agent_runner.py +115 -0
- aria_code/figma_client.py +4 -0
- aria_code/file_analysis_tools.py +4 -0
- aria_code/finance_formulas.py +4 -0
- aria_code/football_data_client.py +4 -0
- aria_code/image_gen_tools.py +4 -0
- aria_code/intent_classifier.py +459 -0
- aria_code/kling_video_client.py +4 -0
- aria_code/licensing.py +151 -0
- aria_code/local_finance_tools.py +4 -0
- aria_code/local_image_provider.py +4 -0
- aria_code/local_llm_provider.py +4 -0
- aria_code/macro_tools.py +4 -0
- aria_code/markdown_pdf.py +289 -0
- aria_code/market_data_client.py +4 -0
- aria_code/mcp_client.py +744 -0
- aria_code/memory_manager.py +273 -0
- aria_code/model_capability.py +512 -0
- aria_code/notification_tools.py +4 -0
- aria_code/openai_image_client.py +4 -0
- aria_code/packages/__init__.py +26 -0
- aria_code/packages/adk_bridge/__init__.py +11 -0
- aria_code/packages/adk_bridge/code_review_tools.py +49 -0
- aria_code/packages/adk_bridge/market_tools.py +125 -0
- aria_code/packages/aria_agents/__init__.py +5 -0
- aria_code/packages/aria_agents/manifest.py +78 -0
- aria_code/packages/aria_core/__init__.py +34 -0
- aria_code/packages/aria_core/architecture.py +269 -0
- aria_code/packages/aria_core/export.py +147 -0
- aria_code/packages/aria_core/manifest.py +65 -0
- aria_code/packages/aria_core/paths.py +57 -0
- aria_code/packages/aria_core/secure_file.py +68 -0
- aria_code/packages/aria_infra/__init__.py +15 -0
- aria_code/packages/aria_infra/arthera.py +58 -0
- aria_code/packages/aria_infra/doctor.py +246 -0
- aria_code/packages/aria_infra/product.py +40 -0
- aria_code/packages/aria_mcp/__init__.py +25 -0
- aria_code/packages/aria_mcp/bridge.py +232 -0
- aria_code/packages/aria_mcp/circuit.py +82 -0
- aria_code/packages/aria_mcp/config.py +162 -0
- aria_code/packages/aria_mcp/installer.py +95 -0
- aria_code/packages/aria_mcp/server.py +1705 -0
- aria_code/packages/aria_mcp/tools.py +81 -0
- aria_code/packages/aria_sdk/__init__.py +19 -0
- aria_code/packages/aria_sdk/client.py +393 -0
- aria_code/packages/aria_sdk/providers.py +70 -0
- aria_code/packages/aria_sdk/streaming.py +75 -0
- aria_code/packages/aria_sdk/types.py +86 -0
- aria_code/packages/aria_services/__init__.py +92 -0
- aria_code/packages/aria_services/cache.py +60 -0
- aria_code/packages/aria_services/context.py +356 -0
- aria_code/packages/aria_services/context_checkpoints.py +157 -0
- aria_code/packages/aria_services/data.py +11 -0
- aria_code/packages/aria_services/provider_health.py +304 -0
- aria_code/packages/aria_services/references.py +247 -0
- aria_code/packages/aria_services/registry.py +249 -0
- aria_code/packages/aria_services/research_protocol.py +137 -0
- aria_code/packages/aria_services/research_quality.py +186 -0
- aria_code/packages/aria_services/settings.py +160 -0
- aria_code/packages/aria_services/usage.py +151 -0
- aria_code/packages/aria_skills/__init__.py +46 -0
- aria_code/packages/aria_skills/catalog.py +149 -0
- aria_code/packages/aria_skills/loader.py +455 -0
- aria_code/packages/aria_skills/registry.py +84 -0
- aria_code/packages/aria_tools/__init__.py +5 -0
- aria_code/packages/aria_tools/financial/__init__.py +5 -0
- aria_code/packages/aria_tools/financial/_paths.py +92 -0
- aria_code/packages/aria_tools/registry.py +129 -0
- aria_code/packages/quant_engine/__init__.py +33 -0
- aria_code/packages/quant_engine/_namespace.py +24 -0
- aria_code/packages/quant_engine/backtest/__init__.py +10 -0
- aria_code/packages/quant_engine/backtest/core.py +53 -0
- aria_code/packages/quant_engine/backtest/engine.py +102 -0
- aria_code/packages/quant_engine/portfolio/__init__.py +9 -0
- aria_code/packages/quant_engine/portfolio/optimizer.py +85 -0
- aria_code/packages/quant_engine/sports/__init__.py +76 -0
- aria_code/packages/quant_engine/sports/calibrator.py +354 -0
- aria_code/packages/quant_engine/sports/dixon_coles.py +234 -0
- aria_code/packages/quant_engine/sports/elo.py +300 -0
- aria_code/packages/quant_engine/sports/form.py +188 -0
- aria_code/packages/quant_engine/sports/h2h.py +195 -0
- aria_code/packages/quant_engine/sports/predictor.py +312 -0
- aria_code/packages/quant_engine/sports/tracker.py +665 -0
- aria_code/packages/quant_engine/stochastic/__init__.py +31 -0
- aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +195 -0
- aria_code/packages/quant_engine/stochastic/ito_calculus.py +477 -0
- aria_code/packages/quant_engine/stochastic/kelly_criterion.py +181 -0
- aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +95 -0
- aria_code/packages/quant_engine/stochastic/options_pricing.py +576 -0
- aria_code/packages/quant_engine/stochastic/stochastic_processes.py +90 -0
- aria_code/packs/__init__.py +85 -0
- aria_code/packs/base.py +168 -0
- aria_code/packs/finance/__init__.py +250 -0
- aria_code/packs/healthcare/__init__.py +40 -0
- aria_code/packs/logistics/__init__.py +171 -0
- aria_code/packs/payments/__init__.py +139 -0
- aria_code/packs/realty/__init__.py +190 -0
- aria_code/packs/registry.py +202 -0
- aria_code/packs/rules.py +90 -0
- aria_code/plan_utils.py +194 -0
- aria_code/plugin_loader.py +328 -0
- aria_code/portfolio_ledger.py +4 -0
- aria_code/preview_server.py +449 -0
- aria_code/privacy/__init__.py +5 -0
- aria_code/privacy/feedback.py +123 -0
- aria_code/project_review.py +278 -0
- aria_code/project_review_api.py +235 -0
- aria_code/project_review_server.py +18 -0
- aria_code/project_tools.py +4 -0
- aria_code/providers/__init__.py +30 -0
- aria_code/providers/google_video_provider.py +256 -0
- aria_code/providers/llm/__init__.py +19 -0
- aria_code/providers/llm/anthropic.py +184 -0
- aria_code/providers/llm/arthera_gateway.py +90 -0
- aria_code/providers/llm/autoconfig.py +213 -0
- aria_code/providers/llm/base.py +139 -0
- aria_code/providers/llm/custom.py +158 -0
- aria_code/providers/llm/ollama.py +137 -0
- aria_code/providers/llm/openai_compat.py +350 -0
- aria_code/providers/llm/registry.py +457 -0
- aria_code/providers/local_image_provider.py +202 -0
- aria_code/providers/local_llm_provider.py +549 -0
- aria_code/providers/ollama_models.py +79 -0
- aria_code/providers/openai_params.py +32 -0
- aria_code/providers/tool_messages.py +100 -0
- aria_code/realty_data_tools.py +4 -0
- aria_code/report_exporters.py +150 -0
- aria_code/report_generator.py +1764 -0
- aria_code/review_service.py +497 -0
- aria_code/runtime/__init__.py +176 -0
- aria_code/runtime/acceptance.py +632 -0
- aria_code/runtime/agent_loop.py +1851 -0
- aria_code/runtime/agent_profiles.py +75 -0
- aria_code/runtime/approval.py +71 -0
- aria_code/runtime/baseline.py +219 -0
- aria_code/runtime/budget.py +232 -0
- aria_code/runtime/checkpoints.py +481 -0
- aria_code/runtime/consult.py +65 -0
- aria_code/runtime/contract.py +282 -0
- aria_code/runtime/delivery.py +432 -0
- aria_code/runtime/events.py +113 -0
- aria_code/runtime/gateway.py +167 -0
- aria_code/runtime/lsp.py +484 -0
- aria_code/runtime/native_index.py +153 -0
- aria_code/runtime/orchestrator.py +55 -0
- aria_code/runtime/processes.py +343 -0
- aria_code/runtime/project_graph.py +614 -0
- aria_code/runtime/repo_map.py +712 -0
- aria_code/runtime/research_bundle.py +105 -0
- aria_code/runtime/review.py +269 -0
- aria_code/runtime/run_state.py +127 -0
- aria_code/runtime/run_store.py +522 -0
- aria_code/runtime/scoped_runs.py +113 -0
- aria_code/runtime/self_healing.py +422 -0
- aria_code/runtime/semantic_diff.py +171 -0
- aria_code/runtime/subagent.py +721 -0
- aria_code/runtime/symbol_edit.py +117 -0
- aria_code/runtime/task_brief.py +46 -0
- aria_code/runtime/task_context.py +145 -0
- aria_code/runtime/task_ledger.py +108 -0
- aria_code/runtime/task_orchestrator.py +90 -0
- aria_code/runtime/task_outcome.py +33 -0
- aria_code/runtime/task_verification.py +266 -0
- aria_code/runtime/task_worktree.py +448 -0
- aria_code/runtime/tool_executor.py +329 -0
- aria_code/runtime/tool_policy.py +107 -0
- aria_code/runtime/transactions.py +216 -0
- aria_code/runtime/windows_job.py +115 -0
- aria_code/runtime/workflows.py +222 -0
- aria_code/runtime/worktrees.py +215 -0
- aria_code/runway_video_client.py +4 -0
- aria_code/safety/__init__.py +27 -0
- aria_code/safety/client_isolation.py +178 -0
- aria_code/safety/permissions.py +339 -0
- aria_code/safety/risk.py +699 -0
- aria_code/safety/sandbox.py +148 -0
- aria_code/safety/service.py +102 -0
- aria_code/service_endpoints.py +14 -0
- aria_code/setup_wizard.py +684 -0
- aria_code/spreadsheet_tools.py +4 -0
- aria_code/strategy_vault.py +4 -0
- aria_code/tools/__init__.py +0 -0
- aria_code/tools/artifact_tools.py +252 -0
- aria_code/tools/broker_tools.py +92 -0
- aria_code/tools/build_quant_engine.py +97 -0
- aria_code/tools/code_audit_tools.py +192 -0
- aria_code/tools/computer_use_tools.py +509 -0
- aria_code/tools/data_analysis_tools.py +831 -0
- aria_code/tools/enterprise_finance_tools.py +202 -0
- aria_code/tools/extended_tools.py +240 -0
- aria_code/tools/file_analysis_tools.py +880 -0
- aria_code/tools/image_gen_tools.py +114 -0
- aria_code/tools/local_finance_tools.py +3488 -0
- aria_code/tools/logistics_carriers.py +11 -0
- aria_code/tools/logistics_inventory.py +11 -0
- aria_code/tools/logistics_io.py +11 -0
- aria_code/tools/logistics_tenancy.py +11 -0
- aria_code/tools/logistics_tools.py +11 -0
- aria_code/tools/macro_tools.py +412 -0
- aria_code/tools/notification_tools.py +249 -0
- aria_code/tools/project_tools.py +525 -0
- aria_code/tools/realty_data_tools.py +662 -0
- aria_code/tools/spreadsheet_tools.py +399 -0
- aria_code/tools/stripe_tools.py +115 -0
- aria_code/tools/video_tools.py +500 -0
- aria_code/training/__init__.py +1 -0
- aria_code/training/compare.py +117 -0
- aria_code/training/prelude_commands.py +111 -0
- aria_code/training/prelude_eval.py +390 -0
- aria_code/training/prelude_real.py +183 -0
- aria_code/training/prelude_train.py +248 -0
- aria_code/training/sft_dataset.py +230 -0
- aria_code/training/trajectory_dataset.py +263 -0
- aria_code/ui/__init__.py +105 -0
- aria_code/ui/banner.py +404 -0
- aria_code/ui/completer.py +571 -0
- aria_code/ui/console.py +285 -0
- aria_code/ui/input_box.py +505 -0
- aria_code/ui/mentions.py +206 -0
- aria_code/ui/picker.py +248 -0
- aria_code/ui/render/__init__.py +11 -0
- aria_code/ui/render/actions.py +297 -0
- aria_code/ui/render/finance.py +1732 -0
- aria_code/ui/render/market.py +253 -0
- aria_code/ui/render/output.py +954 -0
- aria_code/ui/render/responsive.py +75 -0
- aria_code/ui/render/team.py +367 -0
- aria_code/ui/robot.py +239 -0
- aria_code/ui/startup_dashboard.py +110 -0
- aria_code/video_analysis.py +147 -0
- aria_code/video_editor.py +518 -0
- aria_code/video_workflow/__init__.py +8 -0
- aria_code/video_workflow/__main__.py +61 -0
- aria_code/video_workflow/engines/__init__.py +18 -0
- aria_code/video_workflow/engines/base.py +69 -0
- aria_code/video_workflow/engines/custom_model.py +204 -0
- aria_code/video_workflow/engines/google_veo.py +94 -0
- aria_code/video_workflow/engines/local_engine.py +71 -0
- aria_code/video_workflow/engines/registry.py +98 -0
- aria_code/video_workflow/google_models.py +278 -0
- aria_code/video_workflow/music/__init__.py +5 -0
- aria_code/video_workflow/music/foley_service.py +132 -0
- aria_code/video_workflow/music/service.py +212 -0
- aria_code/video_workflow/pipeline.py +620 -0
- aria_code/video_workflow/plan.py +202 -0
- aria_code/video_workflow/session.py +297 -0
- aria_code/workspace/__init__.py +6 -0
- aria_code/workspace/files.py +219 -0
- aria_code/workspace/verify.py +167 -0
- aria_code/workspace_changes.py +199 -0
- aria_code/workspace_service.py +196 -0
- aria_code/workspace_tools.py +150 -0
- aria_code-0.167.0.dist-info/METADATA +330 -0
- aria_code-0.167.0.dist-info/RECORD +601 -0
- aria_code-0.167.0.dist-info/WHEEL +5 -0
- aria_code-0.167.0.dist-info/entry_points.txt +5 -0
- aria_code-0.167.0.dist-info/licenses/LICENSE +201 -0
- aria_code-0.167.0.dist-info/licenses/NOTICE +49 -0
- aria_code-0.167.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,247 @@
|
|
|
1
|
+
"""Typed, read-only ``@`` context references for Aria inputs.
|
|
2
|
+
|
|
3
|
+
``/`` selects an operation. ``@`` selects context for that operation or for a
|
|
4
|
+
natural-language request. This service deliberately has no terminal or LLM
|
|
5
|
+
dependency so the CLI, SDK, and future clients share the same semantics.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import re
|
|
12
|
+
import shlex
|
|
13
|
+
from dataclasses import dataclass, field
|
|
14
|
+
from pathlib import Path
|
|
15
|
+
from typing import Iterable, Iterator, Sequence
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
@dataclass(frozen=True)
|
|
19
|
+
class ReferenceKind:
|
|
20
|
+
name: str
|
|
21
|
+
label_en: str
|
|
22
|
+
label_zh: str
|
|
23
|
+
filesystem: bool = False
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
REFERENCE_KINDS: tuple[ReferenceKind, ...] = (
|
|
27
|
+
ReferenceKind("file", "File", "文件", filesystem=True),
|
|
28
|
+
ReferenceKind("folder", "Folder", "目录", filesystem=True),
|
|
29
|
+
ReferenceKind("asset", "Market asset", "市场资产"),
|
|
30
|
+
ReferenceKind("portfolio", "Portfolio", "投资组合", filesystem=True),
|
|
31
|
+
ReferenceKind("strategy", "Strategy", "策略", filesystem=True),
|
|
32
|
+
ReferenceKind("dataset", "Dataset", "数据集", filesystem=True),
|
|
33
|
+
ReferenceKind("run", "Research run", "研究运行", filesystem=True),
|
|
34
|
+
ReferenceKind("report", "Report", "报告", filesystem=True),
|
|
35
|
+
)
|
|
36
|
+
|
|
37
|
+
_KIND_MAP = {item.name: item for item in REFERENCE_KINDS}
|
|
38
|
+
_REF_RE = re.compile(
|
|
39
|
+
r"(?<![\w@])@(?:(?P<kind>[A-Za-z][A-Za-z0-9_-]*):)?"
|
|
40
|
+
r"(?P<value>\"[^\"\n]+\"|'[^'\n]+'|[^\s@]+)"
|
|
41
|
+
)
|
|
42
|
+
_TRAILING_PUNCTUATION = ",;!?,。;!?)]}"
|
|
43
|
+
_ASSET_RE = re.compile(r"^[A-Za-z0-9^._=-]{1,32}$")
|
|
44
|
+
_RESOURCE_DIRS = {
|
|
45
|
+
"portfolio": ("portfolios",),
|
|
46
|
+
"strategy": ("strategies",),
|
|
47
|
+
"dataset": ("datasets", "data"),
|
|
48
|
+
"run": ("runs", "reports"),
|
|
49
|
+
"report": ("reports", "generated"),
|
|
50
|
+
}
|
|
51
|
+
_RESOURCE_EXTENSIONS = ("", ".md", ".json", ".yaml", ".yml", ".toml", ".csv", ".html")
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def reference_search_roots(kind: str, workspace: Path, output_root: Path | None = None) -> tuple[Path, ...]:
|
|
55
|
+
"""Return deterministic search roots used by resolution and completion."""
|
|
56
|
+
roots: list[Path] = []
|
|
57
|
+
for name in _RESOURCE_DIRS.get(kind, ()):
|
|
58
|
+
roots.extend((workspace / ".aria" / name, workspace / name))
|
|
59
|
+
if output_root:
|
|
60
|
+
roots.append(output_root / name)
|
|
61
|
+
return tuple(dict.fromkeys(roots))
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
@dataclass(frozen=True)
|
|
65
|
+
class ReferencePolicy:
|
|
66
|
+
workspace: Path = field(default_factory=Path.cwd)
|
|
67
|
+
output_root: Path | None = None
|
|
68
|
+
allowed_roots: tuple[Path, ...] = ()
|
|
69
|
+
|
|
70
|
+
def normalized(self) -> "ReferencePolicy":
|
|
71
|
+
workspace = self.workspace.expanduser().resolve()
|
|
72
|
+
output_root = self.output_root.expanduser().resolve() if self.output_root else None
|
|
73
|
+
roots = [workspace]
|
|
74
|
+
if output_root:
|
|
75
|
+
roots.append(output_root)
|
|
76
|
+
roots.extend(path.expanduser().resolve() for path in self.allowed_roots)
|
|
77
|
+
return ReferencePolicy(
|
|
78
|
+
workspace=workspace,
|
|
79
|
+
output_root=output_root,
|
|
80
|
+
allowed_roots=tuple(dict.fromkeys(roots)),
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
@dataclass(frozen=True)
|
|
85
|
+
class ContextReference:
|
|
86
|
+
raw: str
|
|
87
|
+
kind: str
|
|
88
|
+
value: str
|
|
89
|
+
start: int
|
|
90
|
+
end: int
|
|
91
|
+
resolved_value: str = ""
|
|
92
|
+
path: Path | None = None
|
|
93
|
+
error: str = ""
|
|
94
|
+
|
|
95
|
+
@property
|
|
96
|
+
def ok(self) -> bool:
|
|
97
|
+
return not self.error
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@dataclass(frozen=True)
|
|
101
|
+
class PreparedReferences:
|
|
102
|
+
original_text: str
|
|
103
|
+
expanded_text: str
|
|
104
|
+
context_block: str
|
|
105
|
+
references: tuple[ContextReference, ...]
|
|
106
|
+
|
|
107
|
+
@property
|
|
108
|
+
def errors(self) -> tuple[ContextReference, ...]:
|
|
109
|
+
return tuple(ref for ref in self.references if ref.error)
|
|
110
|
+
|
|
111
|
+
@property
|
|
112
|
+
def prompt(self) -> str:
|
|
113
|
+
if not self.context_block:
|
|
114
|
+
return self.expanded_text
|
|
115
|
+
return f"{self.expanded_text}\n\n{self.context_block}"
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
def iter_reference_tokens(text: str) -> Iterator[tuple[str, str, str, int, int]]:
|
|
119
|
+
"""Yield ``(raw, kind, value, start, end)`` while ignoring email addresses."""
|
|
120
|
+
for match in _REF_RE.finditer(text):
|
|
121
|
+
kind = (match.group("kind") or "file").lower()
|
|
122
|
+
token = match.group("value")
|
|
123
|
+
end = match.end()
|
|
124
|
+
if token[:1] in {"\"", "'"} and token[-1:] == token[:1]:
|
|
125
|
+
value = token[1:-1]
|
|
126
|
+
else:
|
|
127
|
+
trailing = _TRAILING_PUNCTUATION + ("." if kind not in {"file", "folder"} else "")
|
|
128
|
+
value = token.rstrip(trailing)
|
|
129
|
+
end -= len(token) - len(value)
|
|
130
|
+
if value:
|
|
131
|
+
yield text[match.start():end], kind, value, match.start(), end
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class ReferenceService:
|
|
135
|
+
"""Resolve and prepare explicit context references without side effects."""
|
|
136
|
+
|
|
137
|
+
def __init__(self, policy: ReferencePolicy | None = None):
|
|
138
|
+
self.policy = (policy or ReferencePolicy()).normalized()
|
|
139
|
+
|
|
140
|
+
def prepare(self, text: str) -> PreparedReferences:
|
|
141
|
+
refs = tuple(self._resolve(*token) for token in iter_reference_tokens(text))
|
|
142
|
+
expanded = text
|
|
143
|
+
for ref in reversed(refs):
|
|
144
|
+
if not ref.ok:
|
|
145
|
+
continue
|
|
146
|
+
replacement = self._replacement(ref)
|
|
147
|
+
expanded = expanded[:ref.start] + replacement + expanded[ref.end:]
|
|
148
|
+
|
|
149
|
+
blocks: list[str] = []
|
|
150
|
+
for ref in refs:
|
|
151
|
+
if not ref.ok:
|
|
152
|
+
continue
|
|
153
|
+
target = str(ref.path) if ref.path is not None else ref.resolved_value
|
|
154
|
+
if ref.kind == "folder":
|
|
155
|
+
action = "Inspect on demand with list_files or search_code."
|
|
156
|
+
elif ref.kind == "asset":
|
|
157
|
+
action = "Fetch on demand with get_market_data or get_market_history."
|
|
158
|
+
else:
|
|
159
|
+
action = "Inspect on demand with read_file or analyze_file."
|
|
160
|
+
blocks.append(f"- {ref.kind}: {target}\n {action}")
|
|
161
|
+
|
|
162
|
+
context_block = ""
|
|
163
|
+
if blocks:
|
|
164
|
+
context_block = (
|
|
165
|
+
"[Aria resource references - pointers only]\n"
|
|
166
|
+
"No resource content is preloaded. Use the named tools before answering.\n"
|
|
167
|
+
+ "\n".join(blocks)
|
|
168
|
+
+ "\n[End Aria resource references]"
|
|
169
|
+
)
|
|
170
|
+
return PreparedReferences(text, expanded, context_block, refs)
|
|
171
|
+
|
|
172
|
+
def _resolve(self, raw: str, kind: str, value: str, start: int, end: int) -> ContextReference:
|
|
173
|
+
if kind not in _KIND_MAP:
|
|
174
|
+
valid = ", ".join(item.name for item in REFERENCE_KINDS)
|
|
175
|
+
return ContextReference(raw, kind, value, start, end, error=f"unknown reference type '{kind}' (use: {valid})")
|
|
176
|
+
if kind == "asset":
|
|
177
|
+
if not _ASSET_RE.fullmatch(value):
|
|
178
|
+
return ContextReference(raw, kind, value, start, end, error=f"invalid market asset '{value}'")
|
|
179
|
+
return ContextReference(raw, kind, value, start, end, resolved_value=value.upper())
|
|
180
|
+
|
|
181
|
+
path = self._resolve_path(kind, value)
|
|
182
|
+
if path is None:
|
|
183
|
+
return ContextReference(raw, kind, value, start, end, error=f"{kind} not found: {value}")
|
|
184
|
+
if not self._is_allowed(path):
|
|
185
|
+
return ContextReference(raw, kind, value, start, end, path=path, error=f"reference is outside the allowed workspace: {value}")
|
|
186
|
+
if kind == "folder" and not path.is_dir():
|
|
187
|
+
return ContextReference(raw, kind, value, start, end, path=path, error=f"folder not found: {value}")
|
|
188
|
+
if kind != "folder" and not path.is_file():
|
|
189
|
+
return ContextReference(raw, kind, value, start, end, path=path, error=f"{kind} is not a file: {value}")
|
|
190
|
+
|
|
191
|
+
return ContextReference(
|
|
192
|
+
raw, kind, value, start, end,
|
|
193
|
+
resolved_value=str(path), path=path,
|
|
194
|
+
)
|
|
195
|
+
|
|
196
|
+
def _resolve_path(self, kind: str, value: str) -> Path | None:
|
|
197
|
+
if kind in {"file", "folder"}:
|
|
198
|
+
candidate = Path(os.path.expandvars(value)).expanduser()
|
|
199
|
+
if not candidate.is_absolute():
|
|
200
|
+
candidate = self.policy.workspace / candidate
|
|
201
|
+
try:
|
|
202
|
+
return candidate.resolve()
|
|
203
|
+
except OSError:
|
|
204
|
+
return None
|
|
205
|
+
|
|
206
|
+
for root in self._resource_roots(kind):
|
|
207
|
+
for suffix in _RESOURCE_EXTENSIONS:
|
|
208
|
+
candidate = root / f"{value}{suffix}"
|
|
209
|
+
if candidate.exists():
|
|
210
|
+
return candidate.resolve()
|
|
211
|
+
if not root.is_dir():
|
|
212
|
+
continue
|
|
213
|
+
target_names = {value.lower(), *(f"{value}{suffix}".lower() for suffix in _RESOURCE_EXTENSIONS if suffix)}
|
|
214
|
+
seen = 0
|
|
215
|
+
for candidate in root.rglob("*"):
|
|
216
|
+
seen += 1
|
|
217
|
+
if seen > 2_000:
|
|
218
|
+
break
|
|
219
|
+
if candidate.is_file() and (candidate.name.lower() in target_names or candidate.stem.lower() == value.lower()):
|
|
220
|
+
return candidate.resolve()
|
|
221
|
+
return None
|
|
222
|
+
|
|
223
|
+
def _resource_roots(self, kind: str) -> Iterable[Path]:
|
|
224
|
+
yield from reference_search_roots(kind, self.policy.workspace, self.policy.output_root)
|
|
225
|
+
|
|
226
|
+
def _is_allowed(self, path: Path) -> bool:
|
|
227
|
+
resolved = path.resolve()
|
|
228
|
+
return any(resolved == root or root in resolved.parents for root in self.policy.allowed_roots)
|
|
229
|
+
|
|
230
|
+
def _replacement(self, ref: ContextReference) -> str:
|
|
231
|
+
if ref.kind == "asset":
|
|
232
|
+
return ref.resolved_value
|
|
233
|
+
if ref.path is not None:
|
|
234
|
+
return shlex.quote(str(ref.path)) if " " in str(ref.path) else str(ref.path)
|
|
235
|
+
return ref.resolved_value
|
|
236
|
+
|
|
237
|
+
def build_reference_service(
|
|
238
|
+
*,
|
|
239
|
+
workspace: Path | None = None,
|
|
240
|
+
output_root: Path | None = None,
|
|
241
|
+
allowed_roots: Sequence[Path] = (),
|
|
242
|
+
) -> ReferenceService:
|
|
243
|
+
return ReferenceService(ReferencePolicy(
|
|
244
|
+
workspace=workspace or Path.cwd(),
|
|
245
|
+
output_root=output_root,
|
|
246
|
+
allowed_roots=tuple(allowed_roots),
|
|
247
|
+
))
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
"""Product-level service contracts for Aria Code.
|
|
2
|
+
|
|
3
|
+
These manifests describe stable service boundaries. They intentionally wrap the
|
|
4
|
+
current modules instead of moving code all at once, so the CLI can migrate away
|
|
5
|
+
from the large legacy entrypoint incrementally.
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
from dataclasses import dataclass, field
|
|
11
|
+
from typing import Dict, List
|
|
12
|
+
|
|
13
|
+
from aria_code.packages.aria_core import CapabilityManifest, PackageLink, PermissionLevel, ServiceKind
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
@dataclass(frozen=True)
|
|
17
|
+
class ServiceSpec:
|
|
18
|
+
name: str
|
|
19
|
+
description: str
|
|
20
|
+
owner_package: str
|
|
21
|
+
module: str
|
|
22
|
+
capabilities: List[str] = field(default_factory=list)
|
|
23
|
+
permissions: List[PermissionLevel] = field(default_factory=list)
|
|
24
|
+
required: bool = True
|
|
25
|
+
migration_target: str = ""
|
|
26
|
+
|
|
27
|
+
def manifest(self) -> CapabilityManifest:
|
|
28
|
+
tags = ["service"]
|
|
29
|
+
if self.required:
|
|
30
|
+
tags.append("required")
|
|
31
|
+
return CapabilityManifest(
|
|
32
|
+
name=self.name,
|
|
33
|
+
kind=ServiceKind.DATA if self.name == "data" else ServiceKind.SERVICE,
|
|
34
|
+
description=self.description,
|
|
35
|
+
capabilities=self.capabilities,
|
|
36
|
+
permissions=self.permissions,
|
|
37
|
+
package_link=PackageLink(
|
|
38
|
+
package=self.owner_package,
|
|
39
|
+
module=self.module,
|
|
40
|
+
object_name=self.migration_target,
|
|
41
|
+
notes="Facade over existing modules; migrate implementation behind this boundary.",
|
|
42
|
+
),
|
|
43
|
+
tags=tags,
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def list_service_specs() -> List[ServiceSpec]:
|
|
48
|
+
"""Return stable service boundaries for the Aria Code product."""
|
|
49
|
+
|
|
50
|
+
return [
|
|
51
|
+
ServiceSpec(
|
|
52
|
+
name="gateway",
|
|
53
|
+
description="Local-first control plane for CLI, daemon, MCP, and channel entrypoints.",
|
|
54
|
+
owner_package="packages.aria_services",
|
|
55
|
+
module="apps.gateway",
|
|
56
|
+
capabilities=["session.routing", "task.queue", "mcp.routing", "channel.routing"],
|
|
57
|
+
permissions=[PermissionLevel.READ_ONLY, PermissionLevel.WORKSPACE_WRITE],
|
|
58
|
+
migration_target="GatewayService",
|
|
59
|
+
),
|
|
60
|
+
ServiceSpec(
|
|
61
|
+
name="runtime",
|
|
62
|
+
description="Agent turn loop, tool execution, approvals, traces, and parallel tool orchestration.",
|
|
63
|
+
owner_package="runtime",
|
|
64
|
+
module="runtime",
|
|
65
|
+
capabilities=["agent.loop", "tool.execution", "approval.policy", "trace"],
|
|
66
|
+
permissions=[PermissionLevel.READ_ONLY, PermissionLevel.WORKSPACE_WRITE],
|
|
67
|
+
migration_target="AgentRuntime",
|
|
68
|
+
),
|
|
69
|
+
ServiceSpec(
|
|
70
|
+
name="settings",
|
|
71
|
+
description="Configuration, secrets, model profiles, runtime flags, and permission policy resolution.",
|
|
72
|
+
owner_package="packages.aria_services",
|
|
73
|
+
module="packages.aria_services.settings",
|
|
74
|
+
capabilities=[
|
|
75
|
+
"settings.config",
|
|
76
|
+
"settings.secrets",
|
|
77
|
+
"settings.model_profiles",
|
|
78
|
+
"settings.permission_policy",
|
|
79
|
+
],
|
|
80
|
+
permissions=[PermissionLevel.READ_ONLY],
|
|
81
|
+
migration_target="SettingsService",
|
|
82
|
+
),
|
|
83
|
+
ServiceSpec(
|
|
84
|
+
name="context",
|
|
85
|
+
description="Conversation memory, context pressure checks, compaction, and resumable summary envelopes.",
|
|
86
|
+
owner_package="packages.aria_services",
|
|
87
|
+
module="packages.aria_services.context",
|
|
88
|
+
capabilities=[
|
|
89
|
+
"context.memory",
|
|
90
|
+
"context.compaction",
|
|
91
|
+
"context.resume",
|
|
92
|
+
"context.checkpoint",
|
|
93
|
+
],
|
|
94
|
+
permissions=[PermissionLevel.READ_ONLY, PermissionLevel.WORKSPACE_WRITE],
|
|
95
|
+
migration_target="ContextService",
|
|
96
|
+
),
|
|
97
|
+
ServiceSpec(
|
|
98
|
+
name="references",
|
|
99
|
+
description="Typed read-only @ references for files, folders, assets, and research artifacts.",
|
|
100
|
+
owner_package="packages.aria_services",
|
|
101
|
+
module="packages.aria_services.references",
|
|
102
|
+
capabilities=[
|
|
103
|
+
"context.reference.parse",
|
|
104
|
+
"context.reference.resolve",
|
|
105
|
+
"context.reference.tool_plan",
|
|
106
|
+
"context.reference.complete",
|
|
107
|
+
],
|
|
108
|
+
permissions=[PermissionLevel.READ_ONLY],
|
|
109
|
+
migration_target="ReferenceService",
|
|
110
|
+
),
|
|
111
|
+
ServiceSpec(
|
|
112
|
+
name="tools",
|
|
113
|
+
description="Typed tool manifests, schemas, permissions, local tool adapters, and MCP tool conversion.",
|
|
114
|
+
owner_package="packages.aria_tools",
|
|
115
|
+
module="packages.aria_tools",
|
|
116
|
+
capabilities=[
|
|
117
|
+
"tool.registry",
|
|
118
|
+
"tool.schema",
|
|
119
|
+
"tool.permissions",
|
|
120
|
+
"tool.local_adapter",
|
|
121
|
+
"tool.mcp_adapter",
|
|
122
|
+
],
|
|
123
|
+
permissions=[PermissionLevel.READ_ONLY, PermissionLevel.WORKSPACE_WRITE, PermissionLevel.NETWORK],
|
|
124
|
+
migration_target="ToolRegistry",
|
|
125
|
+
),
|
|
126
|
+
ServiceSpec(
|
|
127
|
+
name="data",
|
|
128
|
+
description="Multi-source market data with timestamps, provider attribution, and stale-data flags.",
|
|
129
|
+
owner_package="packages.aria_services",
|
|
130
|
+
module="data_service",
|
|
131
|
+
capabilities=["market.quote", "market.history", "technical.indicators", "data.quality"],
|
|
132
|
+
permissions=[PermissionLevel.NETWORK],
|
|
133
|
+
migration_target="MarketDataService",
|
|
134
|
+
),
|
|
135
|
+
ServiceSpec(
|
|
136
|
+
name="reports",
|
|
137
|
+
description="Report, chart, and artifact generation with local workspace storage policies.",
|
|
138
|
+
owner_package="packages.aria_services",
|
|
139
|
+
module="report_generator",
|
|
140
|
+
capabilities=[
|
|
141
|
+
"report.markdown",
|
|
142
|
+
"report.html",
|
|
143
|
+
"chart.render",
|
|
144
|
+
"artifact.storage",
|
|
145
|
+
],
|
|
146
|
+
permissions=[PermissionLevel.READ_ONLY, PermissionLevel.WORKSPACE_WRITE],
|
|
147
|
+
migration_target="ReportService",
|
|
148
|
+
),
|
|
149
|
+
ServiceSpec(
|
|
150
|
+
name="research_quality",
|
|
151
|
+
description="Deterministic report completion, plausibility, coverage, and provenance gates.",
|
|
152
|
+
owner_package="packages.aria_services",
|
|
153
|
+
module="packages.aria_services.research_quality",
|
|
154
|
+
capabilities=["report.quality_gate", "report.provenance", "report.plausibility"],
|
|
155
|
+
permissions=[PermissionLevel.READ_ONLY],
|
|
156
|
+
migration_target="ReportQualityAssessment",
|
|
157
|
+
),
|
|
158
|
+
ServiceSpec(
|
|
159
|
+
name="brokers",
|
|
160
|
+
description="Broker account reads, paper trading, order previews, guarded execution, and audit trails.",
|
|
161
|
+
owner_package="brokers",
|
|
162
|
+
module="brokers",
|
|
163
|
+
capabilities=[
|
|
164
|
+
"broker.account",
|
|
165
|
+
"broker.positions",
|
|
166
|
+
"broker.orders",
|
|
167
|
+
"broker.paper",
|
|
168
|
+
"broker.trade_preview",
|
|
169
|
+
"broker.confirmed_execution",
|
|
170
|
+
"broker.audit",
|
|
171
|
+
],
|
|
172
|
+
permissions=[PermissionLevel.BROKER_READ, PermissionLevel.BROKER_TRADE],
|
|
173
|
+
migration_target="BrokerService",
|
|
174
|
+
),
|
|
175
|
+
ServiceSpec(
|
|
176
|
+
name="skills",
|
|
177
|
+
description="Workflow recipes that bind tools, agents, data, reports, and brokers.",
|
|
178
|
+
owner_package="packages.aria_skills",
|
|
179
|
+
module="packages.aria_skills",
|
|
180
|
+
capabilities=[
|
|
181
|
+
"skill.registry",
|
|
182
|
+
"skill.discovery",
|
|
183
|
+
"skill.metadata_route",
|
|
184
|
+
"skill.namespace",
|
|
185
|
+
"skill.integrity",
|
|
186
|
+
"skill.activation_trace",
|
|
187
|
+
"workflow.binding",
|
|
188
|
+
],
|
|
189
|
+
permissions=[PermissionLevel.READ_ONLY],
|
|
190
|
+
migration_target="SkillRegistry",
|
|
191
|
+
),
|
|
192
|
+
ServiceSpec(
|
|
193
|
+
name="mcp",
|
|
194
|
+
description="MCP server discovery, health, tool provenance, reconnect policy, and manifest conversion.",
|
|
195
|
+
owner_package="packages.aria_mcp",
|
|
196
|
+
module="packages.aria_mcp",
|
|
197
|
+
capabilities=[
|
|
198
|
+
"mcp.discovery",
|
|
199
|
+
"mcp.health",
|
|
200
|
+
"mcp.tool_manifests",
|
|
201
|
+
"mcp.reconnect",
|
|
202
|
+
"mcp.provenance",
|
|
203
|
+
],
|
|
204
|
+
permissions=[PermissionLevel.READ_ONLY, PermissionLevel.NETWORK],
|
|
205
|
+
migration_target="MCPService",
|
|
206
|
+
),
|
|
207
|
+
ServiceSpec(
|
|
208
|
+
name="channels",
|
|
209
|
+
description="Optional external entrypoints such as daemon, relay, Feishu, Telegram, and webhooks.",
|
|
210
|
+
owner_package="apps.channels",
|
|
211
|
+
module="apps.channels",
|
|
212
|
+
capabilities=["channel.daemon", "channel.relay", "channel.feishu", "channel.telegram"],
|
|
213
|
+
permissions=[PermissionLevel.NETWORK],
|
|
214
|
+
required=False,
|
|
215
|
+
migration_target="ChannelRegistry",
|
|
216
|
+
),
|
|
217
|
+
ServiceSpec(
|
|
218
|
+
name="safety",
|
|
219
|
+
description="Sandbox, workspace permissions, command policy, privacy controls, and audit hooks.",
|
|
220
|
+
owner_package="safety",
|
|
221
|
+
module="safety",
|
|
222
|
+
capabilities=["sandbox", "command.policy", "privacy", "audit"],
|
|
223
|
+
permissions=[PermissionLevel.READ_ONLY],
|
|
224
|
+
migration_target="SafetyService",
|
|
225
|
+
),
|
|
226
|
+
ServiceSpec(
|
|
227
|
+
name="observability",
|
|
228
|
+
description="Doctor checks, runtime traces, provider health, architecture coverage, and support bundles.",
|
|
229
|
+
owner_package="packages.aria_infra",
|
|
230
|
+
module="packages.aria_infra.doctor",
|
|
231
|
+
capabilities=[
|
|
232
|
+
"doctor.checks",
|
|
233
|
+
"trace.export",
|
|
234
|
+
"provider.health",
|
|
235
|
+
"architecture.coverage",
|
|
236
|
+
"support.bundle",
|
|
237
|
+
],
|
|
238
|
+
permissions=[PermissionLevel.READ_ONLY, PermissionLevel.WORKSPACE_WRITE],
|
|
239
|
+
migration_target="ObservabilityService",
|
|
240
|
+
),
|
|
241
|
+
]
|
|
242
|
+
|
|
243
|
+
|
|
244
|
+
def service_map() -> Dict[str, ServiceSpec]:
|
|
245
|
+
return {service.name: service for service in list_service_specs()}
|
|
246
|
+
|
|
247
|
+
|
|
248
|
+
def required_service_names() -> List[str]:
|
|
249
|
+
return [service.name for service in list_service_specs() if service.required]
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
"""Financial-research grounding policy shared by Aria adapters."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import re
|
|
6
|
+
from collections.abc import Iterable, Mapping
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
_MARKET_IDENTIFIER = re.compile(
|
|
10
|
+
r"\b[A-Z]{1,5}(?:\.[A-Z]{1,4})?\b|\b\d{6}(?:\.(?:SH|SZ|SS|HK))?\b"
|
|
11
|
+
)
|
|
12
|
+
# Words that name a financial subject on their own. Everyday words used to be
|
|
13
|
+
# in this list too — market, share, option, volume, price, holding, fund, and
|
|
14
|
+
# 市场, 组合, 加密 — so "analyze the performance of the share button", "how is
|
|
15
|
+
# option parsing doing", "分析一下这个项目的市场定位" and "分析当前加密算法的风险"
|
|
16
|
+
# (加密 alone is encryption) were all gated as market questions, and refused
|
|
17
|
+
# after the turn had already done its real work, because no market-data tool
|
|
18
|
+
# had run. Only terms that mean finance wherever they appear belong here.
|
|
19
|
+
_FINANCIAL_SUBJECTS = (
|
|
20
|
+
"stock", "equity", "equities", "portfolio", "crypto", "bitcoin", "forex",
|
|
21
|
+
"etf", "dividend", "earnings", "ticker", "share price", "stock market",
|
|
22
|
+
"market cap", "trading volume", "bond yield", "mutual fund", "index fund",
|
|
23
|
+
"hedge fund", "options chain", "call option", "put option", "price target",
|
|
24
|
+
"股票", "股价", "股市", "大盘", "a股", "美股", "港股", "行情", "持仓", "基金",
|
|
25
|
+
"期权", "债券", "外汇", "加密货币", "数字货币", "币价", "成交量", "市值",
|
|
26
|
+
"财报", "基本面", "涨跌", "收盘价", "开盘价", "目标价",
|
|
27
|
+
)
|
|
28
|
+
|
|
29
|
+
# Words that are financial only some of the time: "how is the market doing
|
|
30
|
+
# today" is a market question, "这个项目的市场定位" is not. They count when the
|
|
31
|
+
# message asks about now and says nothing that places it in the user's own
|
|
32
|
+
# product or code.
|
|
33
|
+
_AMBIGUOUS_SUBJECTS = ("market", "price", "valuation", "市场", "价格", "估值")
|
|
34
|
+
_TIME_INTENTS = (
|
|
35
|
+
"today", "current", "latest", "this week", "right now", "how's", "how is",
|
|
36
|
+
"doing", "今天", "当前", "最新", "本周", "这周", "近期", "现在", "走势", "怎么样",
|
|
37
|
+
)
|
|
38
|
+
_WORKSPACE_CONTEXT = (
|
|
39
|
+
"project", "product", "code", "app", "function", "button", "feature",
|
|
40
|
+
"repo", "file", "api", "cli", "page", "plan", "pricing", "subscription",
|
|
41
|
+
"competitor", "positioning", "user",
|
|
42
|
+
"项目", "产品", "代码", "函数", "功能", "页面", "应用", "仓库", "文件",
|
|
43
|
+
"定位", "竞品", "用户", "方案", "套餐",
|
|
44
|
+
)
|
|
45
|
+
|
|
46
|
+
_EVIDENCE_INTENTS = (
|
|
47
|
+
"analyze", "analysis", "forecast", "predict", "recommend", "buy", "sell",
|
|
48
|
+
"current", "latest", "today", "trend", "risk", "target", "outlook",
|
|
49
|
+
"this week", "how's", "how is", "doing", "performance",
|
|
50
|
+
"分析", "预测", "推荐", "买入", "卖出", "最新", "当前", "今天", "走势",
|
|
51
|
+
"趋势", "风险", "目标价", "前景", "成交量", "全面分析",
|
|
52
|
+
"本周", "这周", "近期", "怎么样", "表现", "看法", "值得",
|
|
53
|
+
)
|
|
54
|
+
_GROUNDING_TOOL_FRAGMENTS = (
|
|
55
|
+
"market", "quote", "price", "ohlcv", "fundamental", "filing", "news",
|
|
56
|
+
"factor", "risk", "backtest", "portfolio", "prediction", "signal",
|
|
57
|
+
"regime", "financial", "earnings", "valuation", "macro", "flow",
|
|
58
|
+
)
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def _mentions(lowered: str, terms: Iterable[str]) -> bool:
|
|
62
|
+
"""Whether any term occurs — as a word for English, as a substring for CJK.
|
|
63
|
+
|
|
64
|
+
Substrings are wrong for short English words in both directions: "market"
|
|
65
|
+
is inside "marketing" and "equity" inside "inequity", while "app" is inside
|
|
66
|
+
"happening" and "api" inside "capital". Chinese has no spaces to bound a
|
|
67
|
+
word, so it keeps substring matching.
|
|
68
|
+
"""
|
|
69
|
+
for term in terms:
|
|
70
|
+
if term.isascii():
|
|
71
|
+
if re.search(rf"(?<![a-z]){re.escape(term)}(?![a-z])", lowered):
|
|
72
|
+
return True
|
|
73
|
+
elif term in lowered:
|
|
74
|
+
return True
|
|
75
|
+
return False
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def _names_an_instrument(text: str) -> bool:
|
|
79
|
+
"""A ticker, code or company the finance pack recognises, or a named company.
|
|
80
|
+
|
|
81
|
+
This used to be a bare regex, \\b[A-Z]{1,5}\\b: it took "API" and "CSV"
|
|
82
|
+
for tickers ("analyze the API latency trend" was gated as a market
|
|
83
|
+
question and refused without market data), and missed "分析AAPL" — no word
|
|
84
|
+
boundary between 析 and A — and every company named in Chinese.
|
|
85
|
+
"""
|
|
86
|
+
try:
|
|
87
|
+
from aria_code.packs import activate_packs, load_builtin_packs
|
|
88
|
+
|
|
89
|
+
load_builtin_packs()
|
|
90
|
+
if any(a.pack == "finance" for a in activate_packs(text)):
|
|
91
|
+
return True
|
|
92
|
+
except Exception:
|
|
93
|
+
if _MARKET_IDENTIFIER.search(text):
|
|
94
|
+
return True
|
|
95
|
+
try:
|
|
96
|
+
from aria_code.apps.cli.intent_signals import _ENTITY_TERMS
|
|
97
|
+
except Exception:
|
|
98
|
+
return False
|
|
99
|
+
lowered = text.lower()
|
|
100
|
+
return any(term in lowered for term in _ENTITY_TERMS)
|
|
101
|
+
|
|
102
|
+
|
|
103
|
+
def requires_financial_evidence(query: str) -> bool:
|
|
104
|
+
"""Return whether a request needs current external financial evidence."""
|
|
105
|
+
text = str(query or "").strip()
|
|
106
|
+
if not text:
|
|
107
|
+
return False
|
|
108
|
+
from aria_code.apps.cli.conversation_policy import is_capability_question
|
|
109
|
+
if is_capability_question(text):
|
|
110
|
+
return False
|
|
111
|
+
lowered = text.lower()
|
|
112
|
+
if not any(term in lowered for term in _EVIDENCE_INTENTS):
|
|
113
|
+
return False
|
|
114
|
+
if _mentions(lowered, _FINANCIAL_SUBJECTS) or _names_an_instrument(text):
|
|
115
|
+
return True
|
|
116
|
+
return (
|
|
117
|
+
_mentions(lowered, _AMBIGUOUS_SUBJECTS)
|
|
118
|
+
and _mentions(lowered, _TIME_INTENTS)
|
|
119
|
+
and not _mentions(lowered, _WORKSPACE_CONTEXT)
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def grounding_tool_names(tool_schemas: Iterable[Mapping]) -> frozenset[str]:
|
|
124
|
+
"""Select registered tools whose outputs can ground a financial conclusion."""
|
|
125
|
+
names: set[str] = set()
|
|
126
|
+
for schema in tool_schemas:
|
|
127
|
+
function = schema.get("function") if isinstance(schema, Mapping) else None
|
|
128
|
+
name = str(
|
|
129
|
+
(function or {}).get("name")
|
|
130
|
+
if isinstance(function, Mapping)
|
|
131
|
+
else schema.get("name", "")
|
|
132
|
+
)
|
|
133
|
+
canonical = name.rsplit("__", 1)[-1].lower()
|
|
134
|
+
if name and any(fragment in canonical for fragment in _GROUNDING_TOOL_FRAGMENTS):
|
|
135
|
+
names.add(name)
|
|
136
|
+
return frozenset(names)
|
|
137
|
+
|