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,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
|
+
]
|