aria-code 4.4.0__tar.gz → 4.4.1__tar.gz
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_code-4.4.0/aria_code.egg-info → aria_code-4.4.1}/PKG-INFO +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/portfolio_agent.py +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/fulfillment_risk.py +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/ashare_prediction_cmds.py +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/backtest_cmds.py +30 -17
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/broker_cmds.py +4 -2
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/core_cmds.py +25 -6
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/diagnostic_ops_cmds.py +3 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/market_cmds.py +5 -5
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/model_cmds.py +56 -7
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/portfolio_cmds.py +3 -3
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/workflow_cmds.py +4 -4
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/workspace_cmds.py +23 -16
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/football_reports.py +4 -4
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/handlers/market_handlers.py +15 -12
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/handlers/realty_handlers.py +2 -2
- aria_code-4.4.1/apps/cli/local_tool_schemas.py +473 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/market_universe.py +18 -0
- aria_code-4.4.1/apps/cli/provider_endpoints.py +237 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/providers/llm/ollama_stream.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tool_executor.py +2 -2
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tools/write_tools.py +5 -4
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/utils/market_detect.py +9 -6
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_cli.py +35 -653
- {aria_code-4.4.0 → aria_code-4.4.1/aria_code.egg-info}/PKG-INFO +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_code.egg-info/SOURCES.txt +16 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_daemon.py +4 -4
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_feishu_bot.py +16 -12
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_relay_server.py +88 -3
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/cn/xtquant_broker.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/football_data_client.py +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/market_data_client.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/data_service.py +3 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/edgar_source.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/fred_source.py +5 -2
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/tushare_source.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/web_scraper_source.py +4 -4
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/world_bank_source.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/demo_player.py +4 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/memory_manager.py +1 -1
- aria_code-4.4.1/packages/adk_bridge/__init__.py +11 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/adk_bridge/code_review_tools.py +6 -2
- aria_code-4.4.1/packages/quant_engine/_namespace.py +62 -0
- aria_code-4.4.1/packages/quant_engine/backtest/__init__.py +14 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/backtest/engine.py +4 -1
- aria_code-4.4.1/packages/quant_engine/portfolio/__init__.py +13 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/__init__.py +8 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/stochastic/__init__.py +8 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/stochastic/gbm_enhanced.py +13 -13
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/stochastic/monte_carlo_advanced.py +11 -11
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/stochastic/stochastic_processes.py +6 -6
- aria_code-4.4.1/providers/llm/autoconfig.py +213 -0
- aria_code-4.4.1/providers/llm/custom.py +158 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/llm/ollama.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/llm/registry.py +76 -2
- {aria_code-4.4.0 → aria_code-4.4.1}/pyproject.toml +34 -5
- {aria_code-4.4.0 → aria_code-4.4.1}/report_generator.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/agent_loop.py +50 -4
- aria_code-4.4.1/runtime/budget.py +232 -0
- aria_code-4.4.1/runtime/crash_report.py +174 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/setup_wizard.py +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_aria_mcp_server.py +14 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_ashare_prediction_cmds.py +29 -0
- aria_code-4.4.1/tests/test_budget.py +131 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_channels.py +2 -1
- aria_code-4.4.1/tests/test_crash_report.py +95 -0
- aria_code-4.4.1/tests/test_custom_providers.py +107 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_local_image_provider.py +7 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_new_modules.py +3 -1
- aria_code-4.4.1/tests/test_no_uncommitted_imports.py +134 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_openai_image_client.py +7 -0
- aria_code-4.4.1/tests/test_provider_autoconfig.py +97 -0
- aria_code-4.4.1/tests/test_quant_engine_namespace.py +82 -0
- aria_code-4.4.1/tests/test_rebind_namespace_contract.py +109 -0
- aria_code-4.4.1/tests/test_relay_event_verification.py +126 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_report_charts.py +18 -0
- aria_code-4.4.1/tests/test_root_module_budget.py +105 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_agent_loop.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_safety_service.py +2 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_version_consistency.py +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/local_finance_tools.py +6 -3
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/picker.py +1 -1
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/render/finance.py +8 -8
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/render/output.py +3 -3
- aria_code-4.4.0/packages/adk_bridge/__init__.py +0 -11
- aria_code-4.4.0/packages/quant_engine/backtest/__init__.py +0 -6
- aria_code-4.4.0/packages/quant_engine/portfolio/__init__.py +0 -5
- {aria_code-4.4.0 → aria_code-4.4.1}/LICENSE +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/README.md +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/adk_apps/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/adk_apps/aria_code_review/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/adk_apps/aria_code_review/agent.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/adk_apps/aria_research/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/adk_apps/aria_research/agent.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/base.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/code_review.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/calibration_loop.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/critic.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/deepen.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/models.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/pipeline.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/quant_fusion.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/themes.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/deep/tiers.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/catalyst.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/debate.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/earnings.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/fundamental.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/macro.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/news.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/risk.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/sector.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/synthesis.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/financial/technical.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/asset_diagnosis.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/business_match.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/cashflow_verify.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/contract_rules.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/energy_anomaly.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/exit_settlement.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/ops_optimize.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/realty/revenue_share.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/registry.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/signal_scheme.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/sports/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/sports/football_agent.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/supervisor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/team.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/contracts.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/dashboard.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/inbound_exceptions.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/inventory_health.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/local_run.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/local_snapshot.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/logistics_sync.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/agents/warehouse/workflow.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aliyun_data_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/README.md +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/channels/README.md +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/channels/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/channels/intake.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/channels/registry.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/channels/tradingview.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/README.md +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/bootstrap.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/broker_render.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/codegen_paths.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/analysis_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/auth_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/business_workflow_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/canvas_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/catalog.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/data_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/diagnostic_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/file_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/finance_service_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/fx_commodity_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/market.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/market_context.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/market_render.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/ops_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/orchestrator_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/pdf_export_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/report.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/scaffold_templates.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/session_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/session_ux_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/team.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/team_render.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/ui_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/commands/warehouse_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/config_paths.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/config_store.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/deterministic.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/direct.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/finance_service_catalog.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/github_app_auth.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/handlers/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/handlers/broker_handlers.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/handlers/chart_handlers.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/handlers/strategy_advice.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/hooks.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/i18n.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/intent.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/intent_router.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/lifecycle_hooks.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/main.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/market_metadata.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/message_processing.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/model_catalog.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/pdf_report.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/plan_mode.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/plotly_html.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/prediction_feedback.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/preflight.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/project_aria.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/prompt_assembly.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/prompts/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/prompts/coding.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/prompts/system_prompts.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/prompts/ui.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/providers/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/providers/base.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/providers/chat_routing.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/providers/collaboration.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/providers/llm/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/providers/llm/sse_stream.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/providers/runtime_bridge.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/runtime_consumer.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/session_export.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/session_jsonl.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/session_store.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/skills_catalog.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/todo_tracker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tools/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tools/context.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tools/file_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tools/market_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tools/notebook_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tools/system_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/tradingview_bridge.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/turn_planning.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/update_check.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/cli/utils/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/daemon/README.md +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/vscode/README.md +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/apps/vscode/package.json +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_code.egg-info/dependency_links.txt +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_code.egg-info/entry_points.txt +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_code.egg-info/requires.txt +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_code.egg-info/top_level.txt +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_mcp_server.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_relay_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/aria_telegram_bot.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ariarc.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/artifacts.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/backtest_engine.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/backtest_report.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/automation.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/base.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/capabilities.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/cn/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/cn/easytrader_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/cn/futu_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/cn/longbridge_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/cn/tiger_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/config.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/intl/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/intl/alpaca_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/intl/ibkr_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/intl/trading212_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/intl/webull_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/paper_broker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/planning.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/registry.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/brokers/trading.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/canva_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/change_store.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/aliyun_data_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/aria_relay_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/canva_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/figma_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/kling_video_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/openai_image_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/runway_video_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/clients/warehouse_erp_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/command_safety.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/computer_use_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/dashboard_generator.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/data_analysis_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/data_cleaner.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/base.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/router.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/akshare_source.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/alpha_vantage_source.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/finnhub_source.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/datasources/sources/yfinance_source.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/doctor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/domain/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/domain/backtest_engine.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/domain/backtest_report.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/domain/finance_formulas.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/domain/portfolio_ledger.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/domain/strategy_vault.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/external_agent_runner.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/figma_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/file_analysis_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/finance_formulas.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/football_data_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/image_gen_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/intent_classifier.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/kling_video_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/licensing.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/local_finance_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/local_image_provider.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/local_llm_provider.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/macro_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/markdown_pdf.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/market_data_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/mcp_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/model_capability.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/notification_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/openai_image_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/adk_bridge/market_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_agents/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_agents/manifest.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_core/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_core/architecture.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_core/export.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_core/manifest.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_core/paths.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_infra/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_infra/arthera.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_infra/doctor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_infra/product.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_mcp/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_mcp/bridge.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_mcp/circuit.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_mcp/config.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_mcp/server.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_mcp/tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_sdk/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_sdk/client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_sdk/providers.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_sdk/streaming.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_sdk/types.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/cache.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/context.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/context_checkpoints.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/data.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/provider_health.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/references.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/registry.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/research_protocol.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/research_quality.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/settings.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_services/usage.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_skills/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_skills/catalog.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_skills/loader.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_skills/registry.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_tools/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_tools/financial/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_tools/financial/_paths.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_tools/financial/compliance.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_tools/financial/factors.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_tools/financial/risk_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_tools/financial/strategy.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/aria_tools/registry.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/backtest/core.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/portfolio/optimizer.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/calibrator.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/dixon_coles.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/elo.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/form.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/h2h.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/ml_model.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/predictor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/sports/tracker.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/stochastic/ito_calculus.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/packages/quant_engine/stochastic/options_pricing.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/plan_utils.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/plugin_loader.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/portfolio_ledger.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/preview_server.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/privacy/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/privacy/feedback.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/project_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/llm/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/llm/anthropic.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/llm/base.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/llm/openai_compat.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/local_image_provider.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/providers/local_llm_provider.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/realty_data_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/report_exporters.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/approval.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/checkpoints.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/events.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/gateway.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/lsp.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/run_state.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/run_store.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/subagent.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/task_ledger.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/task_orchestrator.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/tool_executor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/tool_policy.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runtime/worktrees.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/runway_video_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/safety/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/safety/permissions.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/safety/service.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/setup.cfg +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/spreadsheet_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/strategy_vault.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_adk_market_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_agent_team_fallback.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_analyze_file_tool.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_architecture_report.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_aria_cli_core.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_aria_sdk.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_artifacts_and_reports.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_backtest_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_backtest_engine.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_backtest_report.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_broker_automation.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_broker_chat_confirm_gate.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_broker_planning.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_broker_safety.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_business_workflow_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_canva_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_canvas_cmds.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_channel_intake.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_chart_handlers.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_chat_routing.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_ci_security_workflow.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_cli_app_split.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_cli_bootstrap.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_cli_config_store.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_cli_lifecycle_hooks.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_cli_runtime_consumer.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_cli_tool_executor_module.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_code_review_agent.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_codegen_output.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_collaboration.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_command_safety.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_completions_builder.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_config_paths.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_configured_provider.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_context_checkpoints.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_context_references.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_context_service.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_dashboard_generator.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_data_service.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_data_service_imports.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_deep_analysis.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_doctor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_feishu_swarm_config.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_finance_renderers.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_finance_service_catalog.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_football_agent.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_football_prediction_output.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_image_gen_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_image_inputs.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_intent_router.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_kling_video_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_legacy_module_imports.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_licensing.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_lsp.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_markdown_pdf.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_market_data_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_market_history_tool.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_market_symbol_extraction.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_market_universe.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_mcp_circuit.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_mcp_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_model_selection_state.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_no_hardcoded_developer_paths.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_ollama_stream_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_output_rendering.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_packages_facade.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_packaging_manifest.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_pdf_report.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_pick_best_installed_model.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_plan_mode.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_plotly_html_output.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_portfolio_ledger.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_preflight.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_preview_server.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_privacy_feedback.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_project_aria.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_prompt_assembly.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_provider_integration.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_provider_registry.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_public_service_status.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_report_generator.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_research_protocol.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_research_quality.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_responsive_rendering.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_approval.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_bridge.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_bridge_fallback.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_checkpoints.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_gateway.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_run_store.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_tool_executor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runtime_worktrees.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_runway_video_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_safety_permissions.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_service_diagnostics_security.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_session_search.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_settings_service.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_skill_agent_binding.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_skill_catalog.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_skill_loader.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_spreadsheet_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_startup_dashboard.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_streaming_pipeline.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_subagent.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_supervisor_routing.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_system_prompts.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_system_tools_output.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_task_orchestrator.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_team_synthesis.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_tool_policy.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_trading_service.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_tradingview_bridge.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_turn_planning.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_ui_completer_references.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_ui_console_theme.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_ui_input_box.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_ui_robot_banner.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_video_analysis.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_video_editor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_warehouse_agents.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_warehouse_cli_registration.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_warehouse_erp_client.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_warehouse_workflow.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_workspace_context.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_workspace_files.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tests/test_workspace_verify.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/build_quant_engine.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/computer_use_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/data_analysis_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/file_analysis_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/image_gen_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/macro_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/notification_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/project_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/realty_data_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/tools/spreadsheet_tools.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/banner.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/completer.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/console.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/image_render.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/input_box.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/render/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/render/market.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/render/responsive.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/render/team.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/robot.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/ui/startup_dashboard.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/video_analysis.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/video_editor.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/workspace/__init__.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/workspace/files.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/workspace/verify.py +0 -0
- {aria_code-4.4.0 → aria_code-4.4.1}/workspace_context.py +0 -0
|
@@ -264,7 +264,7 @@ def _format_portfolio_stats(d: Dict) -> str:
|
|
|
264
264
|
|
|
265
265
|
high_corr = d.get("high_corr", [])
|
|
266
266
|
if high_corr:
|
|
267
|
-
lines.append(
|
|
267
|
+
lines.append("\nHigh-Correlation Pairs (|r|>0.70):")
|
|
268
268
|
for p in high_corr[:5]:
|
|
269
269
|
lines.append(f" {p['sym1']} ↔ {p['sym2']}: {p['corr']:+.2f}")
|
|
270
270
|
|
|
@@ -199,7 +199,7 @@ def _template_risk_report(risk: Dict, rules: Dict) -> str:
|
|
|
199
199
|
f" 保证金: {risk['deposit_balance']:,.2f}/{risk['deposit_required']:,.2f}元\n"
|
|
200
200
|
f" 风险事项 ({risk['risk_count']}项):\n"
|
|
201
201
|
+ "\n".join(f" [{r['level']}] {r['desc']}" for r in risk["risk_items"])
|
|
202
|
-
+
|
|
202
|
+
+ "\n 处置建议: "
|
|
203
203
|
+ ("立即启动退出清算程序" if overall == "极高" else
|
|
204
204
|
"发出整改通知,7日内未整改启动违约程序" if overall == "高" else
|
|
205
205
|
"发出催缴通知,持续监控" if overall == "中" else "保持正常监控")
|
|
@@ -208,7 +208,7 @@ class ASharePredictionCommandsMixin:
|
|
|
208
208
|
)
|
|
209
209
|
console.print(f"[dim]{notice}[/dim]") if HAS_RICH else print(notice)
|
|
210
210
|
try:
|
|
211
|
-
service = build_prediction_service(config)
|
|
211
|
+
service = build_prediction_service(self.terminal.config)
|
|
212
212
|
result = await asyncio.to_thread(
|
|
213
213
|
service.run_once, symbols=symbols, universe=parsed.universe, limit=limit,
|
|
214
214
|
period=parsed.period, strategy=parsed.strategy,
|
|
@@ -221,6 +221,23 @@ class BacktestCommandsMixin:
|
|
|
221
221
|
if _symbol_flag:
|
|
222
222
|
symbol = _symbol_flag
|
|
223
223
|
|
|
224
|
+
# Positional start/end dates only accepted if they look like YYYY-MM-DD
|
|
225
|
+
#
|
|
226
|
+
# 2026-08-19 修复 UnboundLocalError:这段原本在 ML / Agent 两个分支
|
|
227
|
+
# **之后**(第 240 行),但那两个分支在第 226/233 行就把 start_date /
|
|
228
|
+
# end_date 当关键字参数传了出去。也就是说 `/backtest ml ...` 和
|
|
229
|
+
# `/backtest agent ...` 这两条路径必然抛 UnboundLocalError——只有走到
|
|
230
|
+
# 后面通用分支的调用才碰巧能工作。
|
|
231
|
+
# mypy 的 used-before-def 一次就报了出来(4 处),AST 独立复核确认:
|
|
232
|
+
# start_date 首次赋值在第 240 行,而使用出现在 226、233。
|
|
233
|
+
_date_re = _re_bt.compile(r'^\d{4}-\d{2}-\d{2}$')
|
|
234
|
+
_raw_start = parts[2] if len(parts) > 2 else None
|
|
235
|
+
_raw_end = parts[3] if len(parts) > 3 else None
|
|
236
|
+
start_date = (_raw_start if _raw_start and _date_re.match(_raw_start) else None) \
|
|
237
|
+
or _resolved_start or "2023-01-01"
|
|
238
|
+
end_date = (_raw_end if _raw_end and _date_re.match(_raw_end) else None) \
|
|
239
|
+
or today.isoformat()
|
|
240
|
+
|
|
224
241
|
# ── ML 信号组合回测 ──────────────────────────────────────────────────
|
|
225
242
|
if strategy.lower() in ("ml", "ml_signal"):
|
|
226
243
|
await self._cmd_ml_signal_backtest(parts[1:], start_date=start_date,
|
|
@@ -233,15 +250,6 @@ class BacktestCommandsMixin:
|
|
|
233
250
|
await self._cmd_agent_backtest(symbol, start_date=start_date, end_date=end_date, capital=_initial_capital)
|
|
234
251
|
return
|
|
235
252
|
|
|
236
|
-
# Positional start/end dates only accepted if they look like YYYY-MM-DD
|
|
237
|
-
_date_re = _re_bt.compile(r'^\d{4}-\d{2}-\d{2}$')
|
|
238
|
-
_raw_start = parts[2] if len(parts) > 2 else None
|
|
239
|
-
_raw_end = parts[3] if len(parts) > 3 else None
|
|
240
|
-
start_date = (_raw_start if _raw_start and _date_re.match(_raw_start) else None) \
|
|
241
|
-
or _resolved_start or "2023-01-01"
|
|
242
|
-
end_date = (_raw_end if _raw_end and _date_re.match(_raw_end) else None) \
|
|
243
|
-
or today.isoformat()
|
|
244
|
-
|
|
245
253
|
label = f"Backtesting {strategy} on {symbol} ({start_date}→{end_date})"
|
|
246
254
|
api_url = self.terminal.config.get("api_url", "http://localhost:8000")
|
|
247
255
|
|
|
@@ -504,7 +512,7 @@ class BacktestCommandsMixin:
|
|
|
504
512
|
f" [#57606a]volume:[/#57606a] "
|
|
505
513
|
f"avg {avg:,.0f} · last {last:,.0f} · coverage {coverage:.0%}"
|
|
506
514
|
if avg is not None and last is not None
|
|
507
|
-
else
|
|
515
|
+
else " [#57606a]volume:[/#57606a] unavailable"
|
|
508
516
|
)
|
|
509
517
|
if d.get("report_path"):
|
|
510
518
|
console.print(f" [#57606a]report:[/#57606a] {d['report_path']}")
|
|
@@ -665,7 +673,8 @@ class BacktestCommandsMixin:
|
|
|
665
673
|
/auto-strategy momentum SPY --target sharpe=1.5
|
|
666
674
|
/auto-strategy meanrev AAPL --target sharpe=1.2 --rounds 3
|
|
667
675
|
"""
|
|
668
|
-
import re as _re
|
|
676
|
+
import re as _re
|
|
677
|
+
import time as _time
|
|
669
678
|
|
|
670
679
|
parts = args.split()
|
|
671
680
|
strategy_type = parts[0].lower() if parts else "momentum"
|
|
@@ -719,7 +728,7 @@ class BacktestCommandsMixin:
|
|
|
719
728
|
from artifacts import user_generated_dir as _user_generated_dir
|
|
720
729
|
_fpath = _user_generated_dir() / _fname
|
|
721
730
|
|
|
722
|
-
console.print(
|
|
731
|
+
console.print(" [dim]生成策略代码...[/dim]") if HAS_RICH else print(" Generating strategy...")
|
|
723
732
|
await self.terminal.send_message(gen_prompt)
|
|
724
733
|
|
|
725
734
|
# Extract code from last response
|
|
@@ -744,7 +753,7 @@ class BacktestCommandsMixin:
|
|
|
744
753
|
console.print(f" [dim]策略已保存: {_fpath.name}[/dim]") if HAS_RICH else print(f" Saved: {_fpath.name}")
|
|
745
754
|
|
|
746
755
|
# ── Step 2: Run backtest ─────────────────────────────────────────
|
|
747
|
-
console.print(
|
|
756
|
+
console.print(" [dim]运行回测...[/dim]") if HAS_RICH else print(" Running backtest...")
|
|
748
757
|
bt_result = _tool_run_command({
|
|
749
758
|
"command": f"python3 {_fpath}",
|
|
750
759
|
"timeout": 120,
|
|
@@ -963,7 +972,10 @@ class BacktestCommandsMixin:
|
|
|
963
972
|
|
|
964
973
|
def _scaffold_with_llm(self, project_name: str, description: str, base_dir) -> None:
|
|
965
974
|
"""Call the configured LLM to generate a custom project structure and write files."""
|
|
966
|
-
import json
|
|
975
|
+
import json
|
|
976
|
+
import urllib.request
|
|
977
|
+
import textwrap
|
|
978
|
+
import pathlib
|
|
967
979
|
|
|
968
980
|
ollama_url = self.terminal.config.get("ollama_url", "http://localhost:11434")
|
|
969
981
|
model = self.terminal.config.get("model", "qwen2.5:7b")
|
|
@@ -1801,7 +1813,7 @@ class BacktestCommandsMixin:
|
|
|
1801
1813
|
console.print(f"\n [green]✓ 已平仓 {name}[/green] [dim]{len(done)} 笔[/dim]")
|
|
1802
1814
|
for tid, s, q, px in done:
|
|
1803
1815
|
console.print(f" [red]SELL[/red] {s} × {q:g} @ {px:,.2f} [dim]#{tid}[/dim]")
|
|
1804
|
-
console.print(
|
|
1816
|
+
console.print(" [dim]撤销: /journal delete <id>[/dim]\n")
|
|
1805
1817
|
else:
|
|
1806
1818
|
for tid, s, q, px in done:
|
|
1807
1819
|
print(f" SELL {s} {q} @ {px} #{tid}")
|
|
@@ -1864,7 +1876,7 @@ class BacktestCommandsMixin:
|
|
|
1864
1876
|
except Exception as e:
|
|
1865
1877
|
errs.append(f"{tok} ({e})")
|
|
1866
1878
|
if not targets:
|
|
1867
|
-
console.print(
|
|
1879
|
+
console.print(" [yellow]需要目标权重:SYM:pct% … | equal | like <策略>[/yellow]"
|
|
1868
1880
|
if HAS_RICH else "need targets")
|
|
1869
1881
|
return
|
|
1870
1882
|
syms = sorted(set(cur) | set(targets))
|
|
@@ -2376,7 +2388,8 @@ class BacktestCommandsMixin:
|
|
|
2376
2388
|
# ML signal backtest is part of the private Arthera engine (alpha IP).
|
|
2377
2389
|
# If a local Arthera checkout is present (dev), make it importable;
|
|
2378
2390
|
# otherwise the import below fails and we show a Pro-feature notice.
|
|
2379
|
-
import sys
|
|
2391
|
+
import sys
|
|
2392
|
+
import os
|
|
2380
2393
|
_arthera_pkgs = os.environ.get("ARTHERA_ROOT") or os.path.expanduser("~/Desktop/Arthera")
|
|
2381
2394
|
_arthera_pkgs = os.path.join(_arthera_pkgs, "packages")
|
|
2382
2395
|
if os.path.isdir(_arthera_pkgs) and _arthera_pkgs not in sys.path:
|
|
@@ -1134,7 +1134,8 @@ class BrokerCommandsMixin:
|
|
|
1134
1134
|
"""未配置券商时显示可导航的操作菜单,选择后直接路由到对应功能。"""
|
|
1135
1135
|
from aria_cli import (HAS_RICH, console, Panel, rich_box, _BROKERS_CONFIG_PATH)
|
|
1136
1136
|
from ui.picker import arrow_select
|
|
1137
|
-
import subprocess
|
|
1137
|
+
import subprocess
|
|
1138
|
+
import sys as _sys
|
|
1138
1139
|
|
|
1139
1140
|
if HAS_RICH:
|
|
1140
1141
|
console.print(Panel(
|
|
@@ -1154,7 +1155,8 @@ class BrokerCommandsMixin:
|
|
|
1154
1155
|
await self._cmd_broker_add("")
|
|
1155
1156
|
elif idx == 1:
|
|
1156
1157
|
try:
|
|
1157
|
-
import pathlib as _pl
|
|
1158
|
+
import pathlib as _pl
|
|
1159
|
+
import json as _json
|
|
1158
1160
|
from brokers.config import print_all_templates
|
|
1159
1161
|
path = _pl.Path(str(_BROKERS_CONFIG_PATH or
|
|
1160
1162
|
aria_home() / "brokers.json"))
|
|
@@ -1,3 +1,20 @@
|
|
|
1
|
+
"""Core slash commands mixin.
|
|
2
|
+
|
|
3
|
+
本文件绝大多数名字(console / HAS_RICH / MODELS …)是有意留作裸名的,由
|
|
4
|
+
aria_cli 的 _rebind_mixin_globals() 把方法 __globals__ 指向它的命名空间来解析。
|
|
5
|
+
|
|
6
|
+
但 pathlib 不能这么处理:它出现在 _create_scaffold() 的**参数注解**里,而注解
|
|
7
|
+
在 class 语句执行时就要求值——那时候 rebind 还没发生(rebind 作用于已定义好的
|
|
8
|
+
类)。所以这一个必须真的 import。
|
|
9
|
+
|
|
10
|
+
2026-08-19 发现:此前没有这行,导致本模块在 Python 3.10–3.13 上 import 即
|
|
11
|
+
NameError,而这正是 requires-python = "<3.14,>=3.10" 声明支持的全部范围。
|
|
12
|
+
开发机 .venv 是 3.14(PEP 649 注解惰性求值)所以一直没暴露,1352 个测试也
|
|
13
|
+
全绿。已发布的 4.3.0 同样中招:pip install 后运行 aria-code 直接崩溃。
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
import pathlib
|
|
17
|
+
|
|
1
18
|
|
|
2
19
|
class CoreCommandsMixin:
|
|
3
20
|
def _cmd_rewind_unavailable(self, args: str):
|
|
@@ -1443,7 +1460,7 @@ class CoreCommandsMixin:
|
|
|
1443
1460
|
elif not reg:
|
|
1444
1461
|
config_path = str(MCP_CONFIG_PATH)
|
|
1445
1462
|
console.print(f" [dim]No servers started. Configure: {config_path}[/dim]")
|
|
1446
|
-
console.print(
|
|
1463
|
+
console.print(" [dim]Example: add quant_engine MCP server pointing to your mcp_server.py[/dim]")
|
|
1447
1464
|
else:
|
|
1448
1465
|
for s in reg.status():
|
|
1449
1466
|
color = "green" if s["running"] else "red"
|
|
@@ -1847,7 +1864,7 @@ class CoreCommandsMixin:
|
|
|
1847
1864
|
}
|
|
1848
1865
|
if HAS_RICH:
|
|
1849
1866
|
console.print(f" [green]✓[/green] Pine strategy saved: [link={pine_path}]{pine_path}[/link]")
|
|
1850
|
-
console.print(
|
|
1867
|
+
console.print(" [dim]Use: TradingView → Pine Editor → paste script → Save → Add to chart[/dim]")
|
|
1851
1868
|
else:
|
|
1852
1869
|
print(f"Pine strategy saved: {pine_path}")
|
|
1853
1870
|
print("Use: TradingView -> Pine Editor -> paste script -> Save -> Add to chart")
|
|
@@ -2083,7 +2100,8 @@ class CoreCommandsMixin:
|
|
|
2083
2100
|
Usage: /shortterm
|
|
2084
2101
|
/shortterm 000333 601138 300750
|
|
2085
2102
|
"""
|
|
2086
|
-
import subprocess
|
|
2103
|
+
import subprocess
|
|
2104
|
+
import sys as _sys
|
|
2087
2105
|
_base = pathlib.Path(__file__).parent.parent.parent / "research" / "shortterm"
|
|
2088
2106
|
script = _base / "run_shortterm.py"
|
|
2089
2107
|
if not script.exists():
|
|
@@ -2107,7 +2125,8 @@ class CoreCommandsMixin:
|
|
|
2107
2125
|
/longterm --quick (只分析 core 级标的)
|
|
2108
2126
|
/longterm 600519 000858
|
|
2109
2127
|
"""
|
|
2110
|
-
import subprocess
|
|
2128
|
+
import subprocess
|
|
2129
|
+
import sys as _sys
|
|
2111
2130
|
_base = pathlib.Path(__file__).parent.parent.parent / "research" / "longterm"
|
|
2112
2131
|
script = _base / "run_longterm.py"
|
|
2113
2132
|
if not script.exists():
|
|
@@ -2242,7 +2261,7 @@ class CoreCommandsMixin:
|
|
|
2242
2261
|
if "数据不足" in _all_msgs or "新上市" in _all_msgs:
|
|
2243
2262
|
_reason = f"[yellow]历史数据不足[/yellow] — {symbol} 上市时间较短(< 14 个交易日),TA 指标无法计算\n [dim]可待更多交易日积累后重试,或运行 `/analyze {symbol}` 查看基本面[/dim]"
|
|
2244
2263
|
elif "rate" in _all_msgs or "429" in _all_msgs or "too many" in _all_msgs:
|
|
2245
|
-
_reason =
|
|
2264
|
+
_reason = "[yellow]数据源频率限制[/yellow] — 稍后重试,或用 `/apikey set finnhub <KEY>` 切换数据源"
|
|
2246
2265
|
else:
|
|
2247
2266
|
_err = "; ".join(_ta_errs or _ta_warns) or "数据源暂时不可用"
|
|
2248
2267
|
_reason = f"[red]{_err[:120]}[/red]"
|
|
@@ -2299,7 +2318,7 @@ class CoreCommandsMixin:
|
|
|
2299
2318
|
}
|
|
2300
2319
|
if HAS_RICH:
|
|
2301
2320
|
console.print()
|
|
2302
|
-
console.print(
|
|
2321
|
+
console.print(" [green]✓[/green] 技术图表已生成")
|
|
2303
2322
|
if html_path:
|
|
2304
2323
|
console.print(f" [dim]HTML:[/dim] [link={html_path}]{_display_path(html_path)}[/link]")
|
|
2305
2324
|
if png_path:
|
|
@@ -289,7 +289,9 @@ class DiagnosticOpsCommandsMixin:
|
|
|
289
289
|
except Exception as exc:
|
|
290
290
|
console.print(f"[yellow]doctor module unavailable, using legacy checks: {exc}[/yellow]" if HAS_RICH else f"doctor module unavailable: {exc}")
|
|
291
291
|
|
|
292
|
-
import importlib as _il
|
|
292
|
+
import importlib as _il
|
|
293
|
+
import subprocess as _sp
|
|
294
|
+
import shutil as _sh
|
|
293
295
|
cfg = self.terminal.config
|
|
294
296
|
ollama_url = cfg.get("ollama_url", "http://localhost:11434")
|
|
295
297
|
api_url = cfg.get("api_url", "http://localhost:8000")
|
|
@@ -850,7 +850,7 @@ class MarketCommandsMixin:
|
|
|
850
850
|
_aform = getattr(pred, "away_form", "")
|
|
851
851
|
|
|
852
852
|
if pred.key_factors:
|
|
853
|
-
console.print(
|
|
853
|
+
console.print("\n [bold]实力对比[/bold]")
|
|
854
854
|
for f_ in pred.key_factors:
|
|
855
855
|
console.print(f" [#57606a] • {f_}[/#57606a]")
|
|
856
856
|
|
|
@@ -864,7 +864,7 @@ class MarketCommandsMixin:
|
|
|
864
864
|
elif c == "L": out.append("[red]L[/red]")
|
|
865
865
|
else: out.append(c)
|
|
866
866
|
return "".join(out)
|
|
867
|
-
console.print(
|
|
867
|
+
console.print("\n [bold]近期表现[/bold]")
|
|
868
868
|
console.print(f" {_h_name_d} {_form_colored(_hform)}")
|
|
869
869
|
if _aform and _aform not in ("?????", ""):
|
|
870
870
|
console.print(f" {_a_name_d} {_form_colored(_aform)}")
|
|
@@ -878,7 +878,7 @@ class MarketCommandsMixin:
|
|
|
878
878
|
))
|
|
879
879
|
|
|
880
880
|
console.print(f"\n [bold green]{pred.verdict}[/bold green]")
|
|
881
|
-
console.print(
|
|
881
|
+
console.print(" [#6e7781]提示:准确比分概率通常较分散,请按候选区间参考,不构成投注建议。[/#6e7781]\n")
|
|
882
882
|
|
|
883
883
|
async def cmd_screen(self, args: str):
|
|
884
884
|
"""股票筛选: CN → screen_ashare; US → yfinance 大盘成分筛选."""
|
|
@@ -1137,7 +1137,7 @@ class MarketCommandsMixin:
|
|
|
1137
1137
|
_has_newsapi = bool(_data_keys.get("newsapi"))
|
|
1138
1138
|
if HAS_RICH:
|
|
1139
1139
|
console.print()
|
|
1140
|
-
console.print(
|
|
1140
|
+
console.print(" [yellow]⚠ 新闻服务不可用[/yellow]")
|
|
1141
1141
|
if not _has_finnhub and not _has_newsapi:
|
|
1142
1142
|
console.print(" [dim]配置以下任意一个数据服务 key 即可获取新闻:[/dim]")
|
|
1143
1143
|
console.print(" [dim] Finnhub (免费60次/分) → /apikey set finnhub <key> 注册: https://finnhub.io/register[/dim]")
|
|
@@ -1147,7 +1147,7 @@ class MarketCommandsMixin:
|
|
|
1147
1147
|
console.print(f" [dim]或使用: /web {topic} latest news — 通过 Brave 搜索[/dim]")
|
|
1148
1148
|
console.print()
|
|
1149
1149
|
else:
|
|
1150
|
-
print(
|
|
1150
|
+
print(" News unavailable. Configure: /apikey set finnhub <key>")
|
|
1151
1151
|
|
|
1152
1152
|
async def cmd_quote(self, args: str):
|
|
1153
1153
|
symbols = parse_symbols(args, self.terminal.config.get("watchlist", ["AAPL"]))
|
|
@@ -1113,7 +1113,7 @@ class ModelCommandsMixin:
|
|
|
1113
1113
|
console.print(f"[green] {msg}[/green]") if HAS_RICH else print(f" {msg}")
|
|
1114
1114
|
|
|
1115
1115
|
# ── 连接测试 ──────────────────────────────────────────────────────
|
|
1116
|
-
print(
|
|
1116
|
+
print(" 正在测试连接…", end="", flush=True)
|
|
1117
1117
|
import asyncio as _aio
|
|
1118
1118
|
loop = _aio.get_event_loop()
|
|
1119
1119
|
ok, result_msg = await loop.run_in_executor(None, _test_api_key, provider, raw_key)
|
|
@@ -1134,8 +1134,57 @@ class ModelCommandsMixin:
|
|
|
1134
1134
|
console.print("[dim] 向导已完成。输入 /apikey list 查看所有配置。[/dim]") if HAS_RICH else print("向导完成")
|
|
1135
1135
|
return
|
|
1136
1136
|
|
|
1137
|
+
def _providers_init(self, *, force: bool = False):
|
|
1138
|
+
"""按本机实际环境生成 ~/.aria/providers.yaml。"""
|
|
1139
|
+
from pathlib import Path as _P
|
|
1140
|
+
|
|
1141
|
+
try:
|
|
1142
|
+
from providers.llm.autoconfig import probe_environment, render_providers_yaml
|
|
1143
|
+
except Exception as exc:
|
|
1144
|
+
console.print(f"[red]无法加载配置生成器: {exc}[/red]" if HAS_RICH else f"无法加载配置生成器: {exc}")
|
|
1145
|
+
return
|
|
1146
|
+
|
|
1147
|
+
console.print("[dim]正在探测本机可用的模型来源…[/dim]" if HAS_RICH else "正在探测…")
|
|
1148
|
+
findings = probe_environment()
|
|
1149
|
+
|
|
1150
|
+
for f in findings:
|
|
1151
|
+
mark = "[green]✓[/green]" if f.available else "[dim]·[/dim]"
|
|
1152
|
+
line = f" {mark} {f.provider:<14} {f.detail}"
|
|
1153
|
+
console.print(line if HAS_RICH else line.replace("[green]✓[/green]", "✓").replace("[dim]·[/dim]", "·"))
|
|
1154
|
+
|
|
1155
|
+
target = _P.home() / ".aria" / "providers.yaml"
|
|
1156
|
+
content = render_providers_yaml(findings)
|
|
1157
|
+
|
|
1158
|
+
# 已有配置绝不静默覆盖——那可能是用户手写并调试了很久的东西。
|
|
1159
|
+
if target.exists() and not force:
|
|
1160
|
+
preview = target.with_suffix(".yaml.generated")
|
|
1161
|
+
preview.parent.mkdir(parents=True, exist_ok=True)
|
|
1162
|
+
preview.write_text(content, encoding="utf-8")
|
|
1163
|
+
msg = (f"\n已有配置 {target} 未改动。\n"
|
|
1164
|
+
f"生成结果写到 {preview},比对满意后自行替换,\n"
|
|
1165
|
+
f"或用 /providers init --force 直接覆盖。")
|
|
1166
|
+
console.print(f"[yellow]{msg}[/yellow]" if HAS_RICH else msg)
|
|
1167
|
+
return
|
|
1168
|
+
|
|
1169
|
+
target.parent.mkdir(parents=True, exist_ok=True)
|
|
1170
|
+
target.write_text(content, encoding="utf-8")
|
|
1171
|
+
console.print(f"\n[green]✓[/green] 已写入 {target}" if HAS_RICH else f"\n✓ 已写入 {target}")
|
|
1172
|
+
|
|
1173
|
+
if not any(f.available for f in findings):
|
|
1174
|
+
tip = "这台机器上还没有可用来源。最快:brew install ollama && ollama serve && ollama pull qwen2.5:7b"
|
|
1175
|
+
console.print(f"[yellow]{tip}[/yellow]" if HAS_RICH else tip)
|
|
1176
|
+
|
|
1177
|
+
|
|
1137
1178
|
def cmd_providers(self, args: str):
|
|
1138
|
-
"""Show all LLM providers: local backends + cloud API status (Open Interpreter style).
|
|
1179
|
+
"""Show all LLM providers: local backends + cloud API status (Open Interpreter style).
|
|
1180
|
+
|
|
1181
|
+
`/providers init` 额外生成一份按本机实际环境定制的 providers.yaml——
|
|
1182
|
+
探测到什么就写什么,缺什么就把"去哪拿"写成注释放进同一个文件,
|
|
1183
|
+
用户不必在文档和配置之间来回对照。
|
|
1184
|
+
"""
|
|
1185
|
+
if args.strip().lower().startswith("init"):
|
|
1186
|
+
return self._providers_init(force="--force" in args)
|
|
1187
|
+
|
|
1139
1188
|
if HAS_RICH:
|
|
1140
1189
|
console.print()
|
|
1141
1190
|
|
|
@@ -1341,7 +1390,7 @@ class ModelCommandsMixin:
|
|
|
1341
1390
|
AliyunDataClient.reset()
|
|
1342
1391
|
if HAS_RICH:
|
|
1343
1392
|
console.print(f" [green]Cloud API URL set to: {url}[/green]")
|
|
1344
|
-
console.print(
|
|
1393
|
+
console.print(" [dim]Saved to ~/.arthera/config.json[/dim]")
|
|
1345
1394
|
return
|
|
1346
1395
|
|
|
1347
1396
|
if sub == "data" and len(parts) >= 2:
|
|
@@ -1350,7 +1399,7 @@ class ModelCommandsMixin:
|
|
|
1350
1399
|
AliyunDataClient.reset()
|
|
1351
1400
|
if HAS_RICH:
|
|
1352
1401
|
console.print(f" [green]AKShare Data URL set to: {url}[/green]")
|
|
1353
|
-
console.print(
|
|
1402
|
+
console.print(" [dim]Saved to ~/.arthera/config.json[/dim]")
|
|
1354
1403
|
return
|
|
1355
1404
|
|
|
1356
1405
|
if sub == "token" and len(parts) >= 2:
|
|
@@ -1585,7 +1634,7 @@ class ModelCommandsMixin:
|
|
|
1585
1634
|
# Show notification/search config from resolved config.json
|
|
1586
1635
|
try:
|
|
1587
1636
|
import json as _j
|
|
1588
|
-
_ncfg_path = Path(snap["config_file"])
|
|
1637
|
+
_ncfg_path = pathlib.Path(snap["config_file"])
|
|
1589
1638
|
_ncfg = _j.loads(_ncfg_path.read_text()) if _ncfg_path.exists() else {}
|
|
1590
1639
|
if _wh := _ncfg.get("notify_webhook"):
|
|
1591
1640
|
console.print(f" [dim]{'notify_webhook':<24s}[/dim]{_wh[:50]}{'…' if len(_wh)>50 else ''}")
|
|
@@ -1597,7 +1646,7 @@ class ModelCommandsMixin:
|
|
|
1597
1646
|
else:
|
|
1598
1647
|
console.print(f" [dim]{'brave_key':<24s}[/dim][dim]未设置 — /config set brave_key=BSAAxxx[/dim]")
|
|
1599
1648
|
# Security check: warn if providers.json has plaintext api_key
|
|
1600
|
-
_pf = Path(snap["providers_file"])
|
|
1649
|
+
_pf = pathlib.Path(snap["providers_file"])
|
|
1601
1650
|
if _pf.exists():
|
|
1602
1651
|
try:
|
|
1603
1652
|
_pd = _j.loads(_pf.read_text())
|
|
@@ -1774,7 +1823,7 @@ class ModelCommandsMixin:
|
|
|
1774
1823
|
return
|
|
1775
1824
|
elif key == "brave_key":
|
|
1776
1825
|
# /config set brave_key=BSAAxxx → 写入 ~/.aria/.env
|
|
1777
|
-
_env_path = Path.home() / ".aria" / ".env"
|
|
1826
|
+
_env_path = pathlib.Path.home() / ".aria" / ".env"
|
|
1778
1827
|
_env_path.parent.mkdir(parents=True, exist_ok=True)
|
|
1779
1828
|
existing = _env_path.read_text() if _env_path.exists() else ""
|
|
1780
1829
|
import re as _re_cfg
|
|
@@ -243,8 +243,8 @@ class PortfolioCommandsMixin:
|
|
|
243
243
|
)
|
|
244
244
|
console.print(tbl)
|
|
245
245
|
console.print(
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
" [dim]更多命令: /journal pnl | /journal trades | "
|
|
247
|
+
"/journal realized | /journal export[/dim]"
|
|
248
248
|
)
|
|
249
249
|
else:
|
|
250
250
|
print(f"当前持仓 ({len(positions)} 只):")
|
|
@@ -672,7 +672,7 @@ class PortfolioCommandsMixin:
|
|
|
672
672
|
})
|
|
673
673
|
if result.get("success") and result.get("data"):
|
|
674
674
|
if HAS_RICH:
|
|
675
|
-
console.print(
|
|
675
|
+
console.print("\n [bold]Portfolio Risk[/bold]\n")
|
|
676
676
|
console.print(f"[dim]{json.dumps(result['data'], indent=2, ensure_ascii=False)[:1000]}[/dim]")
|
|
677
677
|
else:
|
|
678
678
|
print(json.dumps(result.get("data", {}), indent=2, ensure_ascii=False))
|
|
@@ -70,11 +70,11 @@ class WorkflowCommandsMixin:
|
|
|
70
70
|
found.append((str(hdir), f.name, str(f)))
|
|
71
71
|
if not found:
|
|
72
72
|
if HAS_RICH:
|
|
73
|
-
console.print(
|
|
74
|
-
console.print(
|
|
73
|
+
console.print(" [dim]No hooks found.[/dim]")
|
|
74
|
+
console.print(" [dim]Hook dirs:[/dim]")
|
|
75
75
|
for d in hooks_dirs:
|
|
76
76
|
console.print(f" [dim]{_display_path(d, fallback='hook dir')}[/dim]")
|
|
77
|
-
console.print(
|
|
77
|
+
console.print(" [dim]Events: prompt_submit response_done tool_use compact[/dim]")
|
|
78
78
|
else:
|
|
79
79
|
print("No hooks. Dirs:", [str(d) for d in hooks_dirs])
|
|
80
80
|
return
|
|
@@ -308,7 +308,7 @@ class WorkflowCommandsMixin:
|
|
|
308
308
|
if HAS_RICH:
|
|
309
309
|
console.print(f"[dim]Retrying with temperature {MODELS[orig_model_key]['temperature']:.1f}...[/dim]")
|
|
310
310
|
else:
|
|
311
|
-
print(
|
|
311
|
+
print("Retrying (temp +0.3)...")
|
|
312
312
|
try:
|
|
313
313
|
await self.terminal.send_message(last_user_msg)
|
|
314
314
|
finally:
|
|
@@ -463,10 +463,10 @@ class WorkspaceCommandsMixin:
|
|
|
463
463
|
val = v[:5] if isinstance(v, list) else v
|
|
464
464
|
info_lines.append(f"[dim]{k}: {val}[/dim]")
|
|
465
465
|
if fc.truncated:
|
|
466
|
-
info_lines.append(
|
|
466
|
+
info_lines.append("[yellow]⚠ 内容已截断(文件较大)[/yellow]")
|
|
467
467
|
if fc.tables:
|
|
468
468
|
info_lines.append(f"[dim]包含 {len(fc.tables)} 个表格[/dim]")
|
|
469
|
-
info_lines.append(
|
|
469
|
+
info_lines.append("\n[dim]发送任何消息即可开始分析,或使用 /file analyze 1-4[/dim]")
|
|
470
470
|
console.print(_P("\n".join(info_lines),
|
|
471
471
|
title="[bold]📄 文件已加载[/bold]",
|
|
472
472
|
border_style="green", box=_box.ROUNDED))
|
|
@@ -510,7 +510,7 @@ class WorkspaceCommandsMixin:
|
|
|
510
510
|
if len(layers_to_run) > 1 and layer < layers_to_run[-1]:
|
|
511
511
|
if HAS_RICH:
|
|
512
512
|
console.print(f"\n[dim]{'═'*60}[/dim]")
|
|
513
|
-
console.print(
|
|
513
|
+
console.print("[dim]进入下一层分析...[/dim]\n")
|
|
514
514
|
|
|
515
515
|
# ────────────────── /file ask ──────────────────────────────────────────
|
|
516
516
|
elif sub == "ask":
|
|
@@ -638,6 +638,11 @@ class WorkspaceCommandsMixin:
|
|
|
638
638
|
|
|
639
639
|
async def cmd_project(self, args: str):
|
|
640
640
|
"""项目分析 (Claude Code / Codex 风格): /project load|tree|grep|ask|task|status|info <参数>"""
|
|
641
|
+
# 本方法体内三处用到 _T / _box,但导入只写在别的方法里。普通方法的
|
|
642
|
+
# __globals__ 被 _rebind_mixin_globals 换成了 aria_cli 的,本文件模块级
|
|
643
|
+
# 的名字一律看不见——所以必须在方法内自己导入,跟本文件其它方法一致。
|
|
644
|
+
from rich.table import Table as _T
|
|
645
|
+
from rich import box as _box
|
|
641
646
|
try:
|
|
642
647
|
from project_tools import ProjectSession, scan_project, format_grep_results
|
|
643
648
|
_HAS_PT = True
|
|
@@ -701,7 +706,7 @@ class WorkspaceCommandsMixin:
|
|
|
701
706
|
tb.add_row("Git 分支", s["git"]["branch"])
|
|
702
707
|
if s["git"].get("changed_count"):
|
|
703
708
|
tb.add_row("变更文件", str(s["git"]["changed_count"]))
|
|
704
|
-
console.print(
|
|
709
|
+
console.print("\n[bold]项目已加载 ✓[/bold]")
|
|
705
710
|
console.print(tb)
|
|
706
711
|
console.print(f"\n[dim]关键文件: {', '.join(s['key_files'][:6])}[/dim]")
|
|
707
712
|
console.print("[dim]现在可以直接对话,Aria 将根据项目上下文回答。[/dim]\n")
|
|
@@ -822,7 +827,7 @@ class WorkspaceCommandsMixin:
|
|
|
822
827
|
tb.add_column("说明", style="dim")
|
|
823
828
|
for cmd, desc in rows:
|
|
824
829
|
tb.add_row(cmd, desc)
|
|
825
|
-
console.print(
|
|
830
|
+
console.print("\n[bold]/project — 项目分析命令[/bold]\n")
|
|
826
831
|
console.print(tb)
|
|
827
832
|
console.print()
|
|
828
833
|
|
|
@@ -918,7 +923,7 @@ class WorkspaceCommandsMixin:
|
|
|
918
923
|
force = "--force" in args
|
|
919
924
|
|
|
920
925
|
if aria_md.exists() and not force:
|
|
921
|
-
msg =
|
|
926
|
+
msg = "ARIA.md already exists. Use /init --force to regenerate."
|
|
922
927
|
console.print(f"[yellow]{msg}[/yellow]") if HAS_RICH else print(msg)
|
|
923
928
|
return
|
|
924
929
|
|
|
@@ -1136,7 +1141,7 @@ class WorkspaceCommandsMixin:
|
|
|
1136
1141
|
# ── Step 4: Messaging channels (Feishu / Telegram) ──────────────────
|
|
1137
1142
|
if sub in ("feishu", "telegram", "notify", "all", ""):
|
|
1138
1143
|
console.print(" [bold]Step 4/5 · 消息通知连接[/bold]") if HAS_RICH else print("Step 4: Messaging")
|
|
1139
|
-
_env_path = Path.home() / ".aria" / ".env"
|
|
1144
|
+
_env_path = pathlib.Path.home() / ".aria" / ".env"
|
|
1140
1145
|
_env_vars: dict = {}
|
|
1141
1146
|
if _env_path.exists():
|
|
1142
1147
|
for _line in _env_path.read_text().splitlines():
|
|
@@ -1174,11 +1179,13 @@ class WorkspaceCommandsMixin:
|
|
|
1174
1179
|
if sub in ("feishu", "telegram"):
|
|
1175
1180
|
console.print() if HAS_RICH else print()
|
|
1176
1181
|
try:
|
|
1177
|
-
|
|
1178
|
-
|
|
1179
|
-
|
|
1180
|
-
|
|
1181
|
-
|
|
1182
|
+
# setup_wizard 是随包发布的顶层模块(见 pyproject py-modules),
|
|
1183
|
+
# 直接 import 即可。原先用 __file__ 往上数四层拼路径:这个方法
|
|
1184
|
+
# 的 __globals__ 被 _rebind_mixin_globals 换成了 aria_cli 的,
|
|
1185
|
+
# __file__ 因此指向仓库根的 aria_cli.py 而非本文件,四层 parent
|
|
1186
|
+
# 算出 /Users/setup_wizard.py,永远不存在——异常被下面的
|
|
1187
|
+
# except 吞掉,这条分支一直静默退化成"请手动运行"提示。
|
|
1188
|
+
import setup_wizard as _wiz
|
|
1182
1189
|
_e = _wiz._load_env()
|
|
1183
1190
|
if sub == "feishu":
|
|
1184
1191
|
_wiz.setup_feishu(_e)
|
|
@@ -1316,7 +1323,7 @@ class WorkspaceCommandsMixin:
|
|
|
1316
1323
|
if gsub == "show":
|
|
1317
1324
|
if not _profile_path.exists():
|
|
1318
1325
|
if HAS_RICH:
|
|
1319
|
-
console.print(
|
|
1326
|
+
console.print("[dim]~/.arthera/ARIA.md 还不存在。用 /memory profile add <内容> 创建。[/dim]")
|
|
1320
1327
|
else:
|
|
1321
1328
|
print("~/.arthera/ARIA.md not found. Use /memory profile add <text> to create.")
|
|
1322
1329
|
return
|
|
@@ -1325,7 +1332,7 @@ class WorkspaceCommandsMixin:
|
|
|
1325
1332
|
try:
|
|
1326
1333
|
from rich.markdown import Markdown as _RMd3
|
|
1327
1334
|
console.print()
|
|
1328
|
-
console.print(
|
|
1335
|
+
console.print(" [dim]~/.arthera/ARIA.md[/dim]")
|
|
1329
1336
|
console.print(_RMd3(content))
|
|
1330
1337
|
except Exception:
|
|
1331
1338
|
console.print(content)
|
|
@@ -1352,9 +1359,9 @@ class WorkspaceCommandsMixin:
|
|
|
1352
1359
|
# Refresh project context so change takes effect immediately
|
|
1353
1360
|
_PROJECT_CONTEXT = _load_project_context()
|
|
1354
1361
|
if HAS_RICH:
|
|
1355
|
-
console.print(
|
|
1362
|
+
console.print(" [dim]✓ 已写入 ~/.arthera/ARIA.md — 下次对话自动注入[/dim]")
|
|
1356
1363
|
else:
|
|
1357
|
-
print(
|
|
1364
|
+
print("Saved to ~/.arthera/ARIA.md")
|
|
1358
1365
|
|
|
1359
1366
|
elif gsub == "clear":
|
|
1360
1367
|
if _profile_path.exists():
|
|
@@ -42,10 +42,10 @@ def _football_standings(league: str) -> None:
|
|
|
42
42
|
if not data:
|
|
43
43
|
comp = _resolve_league(league)
|
|
44
44
|
console.print(
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
45
|
+
"[yellow]无法获取数据。请设置 FOOTBALL_DATA_API_KEY:[/yellow]\n"
|
|
46
|
+
" 1. 访问 football-data.org 免费注册\n"
|
|
47
|
+
" 2. 在 ~/.aria/.env 中添加:\n"
|
|
48
|
+
" [cyan]FOOTBALL_DATA_API_KEY=your_key_here[/cyan]"
|
|
49
49
|
)
|
|
50
50
|
return
|
|
51
51
|
|