aria-code 0.80.0__tar.gz → 0.82.0__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-0.80.0/src/aria_code.egg-info → aria_code-0.82.0}/PKG-INFO +1 -1
- {aria_code-0.80.0 → aria_code-0.82.0}/pyproject.toml +1 -1
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/_version.py +1 -1
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +13 -11
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/broker_cmds.py +5 -3
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +5 -2
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/core_cmds.py +4 -3
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/data_cmds.py +11 -7
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/market_cmds.py +8 -6
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +3 -1
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +3 -1
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/handlers/market_handlers.py +19 -9
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/i18n.py +11 -0
- aria_code-0.82.0/src/aria_code/apps/cli/market_hours.py +100 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/base.py +53 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/utils/market_detect.py +35 -2
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/aria_cli.py +15 -11
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/agent_loop.py +39 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/render/market.py +23 -15
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/render/output.py +19 -2
- {aria_code-0.80.0 → aria_code-0.82.0/src/aria_code.egg-info}/PKG-INFO +1 -1
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code.egg-info/SOURCES.txt +5 -0
- aria_code-0.82.0/tests/test_first_run_output.py +107 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_market_answers_in_english.py +15 -0
- aria_code-0.82.0/tests/test_market_hours.py +73 -0
- aria_code-0.82.0/tests/test_numeric_listings.py +57 -0
- aria_code-0.82.0/tests/test_status_language.py +70 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/LICENSE +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/NOTICE +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/README.md +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/setup.cfg +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/adk_apps/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/base.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/code_review.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/critic.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/deepen.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/models.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/pipeline.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/themes.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/deep/tiers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/engineering/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/engineering/coder.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/engineering/tester.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/catalyst.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/debate.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/earnings.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/fundamental.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/macro.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/news.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/risk.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/sector.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/strategist.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/synthesis.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/financial/technical.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/orchestrator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/portfolio_agent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/business_match.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/signal_scheme.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/sports/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/sports/football_agent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/supervisor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/team.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/aliyun_data_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/README.md +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/channels/README.md +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/channels/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/channels/approvals.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/channels/conversation.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/channels/digest.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/channels/intake.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/channels/registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/channels/tradingview.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/README.md +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/_optional.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/broker_render.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/market.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/team.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/config_paths.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/config_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/constants.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/context.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/deterministic.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/direct.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/football_reports.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/google_login.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/helpers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/hooks.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/intent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/intent_router.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/main.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/market_universe.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/message_processing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/preflight.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/project_aria.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/review_runner.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/sandbox.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/session_export.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/session_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tools/context.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/update_check.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/updater.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/daemon/README.md +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/vscode/README.md +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/vscode/package.json +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/aria_daemon.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/aria_feishu_bot.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/aria_mcp_server.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/aria_relay_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/aria_relay_server.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/aria_telegram_bot.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ariarc.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/artifacts.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/backtest_engine.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/backtest_report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/automation.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/base.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/capabilities.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/cn/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/config.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/intl/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/paper_broker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/planning.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/brokers/trading.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/canva_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/change_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/aria_relay_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/canva_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/figma_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/football_data_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/kling_video_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/market_data_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/openai_image_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/runway_video_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/cloud_memory.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/command_safety.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/computer_use_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/dashboard_generator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/data_analysis_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/data_cleaner.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/data_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/base.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/router.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/demo_player.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/doctor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/domain/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/domain/backtest_engine.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/domain/backtest_report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/domain/finance_formulas.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/domain/strategy_vault.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/evals/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/evals/harness.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/evals/runner.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/external_agent_runner.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/figma_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/file_analysis_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/finance_formulas.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/football_data_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/image_gen_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/intent_classifier.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/kling_video_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/licensing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/local_finance_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/local_image_provider.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/local_llm_provider.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/macro_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/markdown_pdf.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/market_data_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/mcp_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/memory_manager.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/model_capability.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/notification_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/openai_image_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_core/export.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_core/paths.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_infra/product.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/cache.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/context.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/data.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/references.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/settings.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_services/usage.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packs/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packs/base.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packs/finance/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packs/logistics/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packs/payments/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packs/realty/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packs/registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/packs/rules.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/plan_utils.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/plugin_loader.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/portfolio_ledger.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/preview_server.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/privacy/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/privacy/feedback.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/project_review.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/project_review_api.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/project_review_server.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/project_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/llm/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/llm/anthropic.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/llm/base.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/llm/custom.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/llm/ollama.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/llm/registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/local_image_provider.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/local_llm_provider.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/providers/tool_messages.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/realty_data_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/relay_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/report_exporters.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/report_generator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/review_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/acceptance.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/approval.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/budget.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/checkpoints.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/crash_report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/events.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/gateway.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/lsp.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/orchestrator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/repo_map.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/run_state.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/run_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/self_healing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/subagent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/task_ledger.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/tool_executor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/tool_policy.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runtime/worktrees.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/runway_video_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/safety/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/safety/permissions.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/safety/service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/setup_wizard.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/spreadsheet_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/strategy_vault.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/artifact_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/broker_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/build_quant_engine.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/code_audit_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/computer_use_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/extended_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/image_gen_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/local_finance_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/logistics_carriers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/logistics_inventory.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/logistics_io.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/logistics_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/macro_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/notification_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/project_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/realty_data_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/tools/stripe_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/banner.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/completer.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/console.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/image_render.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/input_box.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/picker.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/render/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/render/finance.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/render/responsive.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/render/team.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/robot.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/ui/startup_dashboard.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/utils/vscode_uri.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/video_analysis.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/video_editor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/workspace/__init__.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/workspace/files.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/workspace/verify.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/workspace_changes.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/workspace_context.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/workspace_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/workspace_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code.egg-info/entry_points.txt +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code.egg-info/requires.txt +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code.egg-info/top_level.txt +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_adk_market_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_agent_team_fallback.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_analyze_file_tool.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_architecture_ledger_is_true.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_architecture_report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_aria_cli_core.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_aria_mcp_server.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_aria_sdk.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_artifact_publishing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_artifacts_and_reports.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ashare_prediction_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_backtest_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_backtest_engine.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_backtest_report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_broken_akshare_is_optional.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_broker_automation.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_broker_chat_confirm_gate.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_broker_planning.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_broker_safety.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_broker_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_budget.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_business_workflow_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_canva_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_canvas_cmds.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_card_approvals.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_channel_intake.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_channels.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_chart_handlers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_chat_bots_fail_closed.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_chat_routing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ci_security_workflow.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_cli_app_split.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_cli_bootstrap.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_cli_config_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_cli_lifecycle_hooks.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_cli_runtime_consumer.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_cli_tool_executor_module.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_cli_updater.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_cloud_memory.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_code_audit_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_code_review_agent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_codegen_output.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_coder_tester_self_healing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_coder_tool_safety.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_collaboration.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_command_loggers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_command_safety.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_completions_builder.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_config_paths.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_configured_provider.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_container_entrypoint.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_container_entrypoints.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_context_checkpoints.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_context_references.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_context_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_conversation_core.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_crash_report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_credential_file_permissions.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_custom_providers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_daemon_gateway_config.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_dashboard_generator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_data_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_data_service_imports.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_datasource_routing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_deep_analysis.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_degrades_without_quant_engine.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_doctor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_doctor_describes_the_current_install.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_doctor_npm_scope.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_engine_boundary.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_enterprise_tool_honesty.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_env_switch_docs.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_evals_harness.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_event_import_roots.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_extended_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_feishu_swarm_config.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_finalize_release.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_finance_renderers.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_finance_service_catalog.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_first_run_works.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_football_agent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_football_prediction_output.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_google_cloud_models.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_google_cloud_routing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_google_login.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_google_search_provider.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_headless_is_agentic.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_honest_surfaces.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_image_gen_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_image_inputs.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_import_graph_budget.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_intent_router.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_intent_signals.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_kling_video_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_lazy_rebind.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_legacy_module_imports.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_license_consistency.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_licensing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_local_image_provider.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_logistics_3pl.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_logistics_and_finance_agents.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_lsp.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_markdown_pdf.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_market_data_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_market_history_inheritance.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_market_history_tool.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_market_questions_on_backend.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_market_symbol_extraction.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_market_universe.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_mcp_circuit.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_mcp_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_model_capability_registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_model_choice_is_the_users.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_model_selection_state.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_native_binary_entrypoints.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_native_installer.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_new_modules.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_no_uncommitted_imports.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ollama_stream_imports.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ollama_stream_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_openai_image_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_operations_suite.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_output_rendering.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_packages_facade.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_packaging_constraints.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_packaging_manifest.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_packs_domains.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_pdf_report.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_pick_best_installed_model.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_plan_mode.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_platform_package_assembly.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_platform_packages.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_plotly_html_output.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_portfolio_ledger.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_post_turn_context_decision.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_preflight.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_preview_server.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_privacy_feedback.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_project_aria.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_project_review.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_project_review_api.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_prompt_assembly.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_prompt_selection.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_provider_autoconfig.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_provider_error_messages.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_provider_integration.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_provider_registry.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_public_service_status.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_quant_engine_namespace.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_rebind_contract.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_rebind_namespace_contract.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_relay_client_credentials.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_relay_event_verification.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_relay_sends_for_clients.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_relay_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_relay_url.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_release_chain.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_release_commit_identity.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_release_push_is_atomic.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_release_reaches_the_registries.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_release_verification_waits.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_release_workflow_permissions.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_report_charts.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_report_generator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_research_protocol.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_research_quality.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_responsive_rendering.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_review_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_root_module_budget.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_rsi_without_pandas_ta.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_acceptance.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_agent_loop.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_approval.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_bridge.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_bridge_fallback.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_checkpoints.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_event_identity.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_gateway.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_repo_map.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_run_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_tool_executor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runtime_worktrees.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_runway_video_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_safety_permissions.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_safety_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_safety_service_adoption.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_service_diagnostics_security.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_session_search.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_settings_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_shipper_digest.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_single_import_root.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_skill_agent_binding.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_skill_catalog.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_skill_loader.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_spreadsheet_tools.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_sse_stream_contract.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_startup_dashboard.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_startup_latency.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_streaming_pipeline.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_stripe_agent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_subagent.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_supervisor_routing.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_system_prompts.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_system_tools_output.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_task_orchestrator.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_team_synthesis.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_tls_trust_store.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_tool_policy.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_tool_scope.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_trading_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_tradingview_bridge.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_turn_planning.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ui_completer_references.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ui_console_theme.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ui_input_box.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ui_language_and_model.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_ui_robot_banner.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_update_health_routes.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_verification_hint.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_verification_policy.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_version_consistency.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_version_counter.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_video_analysis.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_video_editor.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_vscode_mcp.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_warehouse_agents.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_warehouse_cli_registration.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_warehouse_erp_client.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_warehouse_workflow.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_wheel_is_installable.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_workspace_changes.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_workspace_context.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_workspace_files.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_workspace_scope.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_workspace_service.py +0 -0
- {aria_code-0.80.0 → aria_code-0.82.0}/tests/test_workspace_verify.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aria-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.82.0
|
|
4
4
|
Summary: Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/artheras/aria-code
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "aria-code"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.82.0"
|
|
8
8
|
description = "Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "Apache-2.0" }
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from aria_code.apps.cli.i18n import ui_text
|
|
6
|
+
|
|
5
7
|
from aria_code.apps.cli.commands.market import parse_analysis_args
|
|
6
8
|
from aria_code.apps.cli.commands.market_context import context_has_price
|
|
7
9
|
|
|
@@ -98,7 +100,7 @@ class AnalysisCommandsMixin:
|
|
|
98
100
|
response_lang = parsed.lang or ("zh" if is_cn else "en")
|
|
99
101
|
|
|
100
102
|
if self.context.has_rich:
|
|
101
|
-
with self.context.console.status(f"[dim]正在获取 {symbol}
|
|
103
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'正在获取 {symbol} 数据', f'Fetching {symbol} data')}...[/dim]", spinner="dots"):
|
|
102
104
|
ctx = await self._build_analyze_context(symbol, is_cn)
|
|
103
105
|
else:
|
|
104
106
|
print(f"Fetching data for {symbol}...")
|
|
@@ -166,7 +168,7 @@ class AnalysisCommandsMixin:
|
|
|
166
168
|
|
|
167
169
|
if region in ("us", "all"):
|
|
168
170
|
if self.context.has_rich:
|
|
169
|
-
with self.context.console.status("[dim]获取美国宏观数据 (FRED)...[/dim]", spinner="dots"):
|
|
171
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取美国宏观数据 (FRED)', 'Fetching US macro data (FRED)')}...[/dim]", spinner="dots"):
|
|
170
172
|
r = await loop.run_in_executor(None, lambda: get_us_macro(indicator if region == "us" else "all"))
|
|
171
173
|
else:
|
|
172
174
|
r = get_us_macro(indicator if region == "us" else "all")
|
|
@@ -174,7 +176,7 @@ class AnalysisCommandsMixin:
|
|
|
174
176
|
|
|
175
177
|
if region in ("cn", "all"):
|
|
176
178
|
if self.context.has_rich:
|
|
177
|
-
with self.context.console.status("[dim]获取中国宏观数据 (akshare)...[/dim]", spinner="dots"):
|
|
179
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取中国宏观数据 (akshare)', 'Fetching China macro data (akshare)')}...[/dim]", spinner="dots"):
|
|
178
180
|
r_cn = await loop.run_in_executor(None, lambda: get_cn_macro(indicator if region == "cn" else "all"))
|
|
179
181
|
else:
|
|
180
182
|
r_cn = get_cn_macro(indicator if region == "cn" else "all")
|
|
@@ -182,7 +184,7 @@ class AnalysisCommandsMixin:
|
|
|
182
184
|
|
|
183
185
|
if region in ("rates", "all"):
|
|
184
186
|
if self.context.has_rich:
|
|
185
|
-
with self.context.console.status("[dim]
|
|
187
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取央行利率', 'Fetching central bank rates')}...[/dim]", spinner="dots"):
|
|
186
188
|
r_rates = await loop.run_in_executor(None, get_central_bank_rates)
|
|
187
189
|
else:
|
|
188
190
|
r_rates = get_central_bank_rates()
|
|
@@ -190,7 +192,7 @@ class AnalysisCommandsMixin:
|
|
|
190
192
|
|
|
191
193
|
if region == "calendar":
|
|
192
194
|
if self.context.has_rich:
|
|
193
|
-
with self.context.console.status("[dim]
|
|
195
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取经济日历', 'Fetching the economic calendar')}...[/dim]", spinner="dots"):
|
|
194
196
|
r_cal = await loop.run_in_executor(None, lambda: get_economic_calendar(7))
|
|
195
197
|
else:
|
|
196
198
|
r_cal = get_economic_calendar(7)
|
|
@@ -216,7 +218,7 @@ class AnalysisCommandsMixin:
|
|
|
216
218
|
import asyncio as _asyncio
|
|
217
219
|
loop = _asyncio.get_event_loop()
|
|
218
220
|
if self.context.has_rich:
|
|
219
|
-
with self.context.console.status(f"[dim]获取 {symbol}
|
|
221
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'获取 {symbol} 期权链', f'Fetching the {symbol} option chain')}...[/dim]", spinner="dots"):
|
|
220
222
|
from local_finance_tools import _get_options_chain
|
|
221
223
|
r = await loop.run_in_executor(None, _get_options_chain,
|
|
222
224
|
{"symbol": symbol, "type": opt_type, "expiry": expiry, "limit": 20})
|
|
@@ -281,7 +283,7 @@ class AnalysisCommandsMixin:
|
|
|
281
283
|
import asyncio as _asyncio
|
|
282
284
|
loop = _asyncio.get_event_loop()
|
|
283
285
|
if self.context.has_rich:
|
|
284
|
-
with self.context.console.status(f"[dim]计算 {symbol}
|
|
286
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'计算 {symbol} 财务质量评分', f'Scoring {symbol} financial quality')}...[/dim]", spinner="dots"):
|
|
285
287
|
from local_finance_tools import _piotroski_fscore, _altman_zscore
|
|
286
288
|
f_r = await loop.run_in_executor(None, _piotroski_fscore, {"symbol": symbol})
|
|
287
289
|
z_r = await loop.run_in_executor(None, _altman_zscore, {"symbol": symbol})
|
|
@@ -303,7 +305,7 @@ class AnalysisCommandsMixin:
|
|
|
303
305
|
import asyncio as _asyncio
|
|
304
306
|
loop = _asyncio.get_event_loop()
|
|
305
307
|
if self.context.has_rich:
|
|
306
|
-
with self.context.console.status(f"[dim]计算 {symbol}
|
|
308
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'计算 {symbol} 一目均衡表', f'Computing {symbol} Ichimoku')}...[/dim]", spinner="dots"):
|
|
307
309
|
from local_finance_tools import _calculate_ichimoku
|
|
308
310
|
r = await loop.run_in_executor(None, _calculate_ichimoku, {"symbol": symbol})
|
|
309
311
|
else:
|
|
@@ -322,7 +324,7 @@ class AnalysisCommandsMixin:
|
|
|
322
324
|
import asyncio as _asyncio
|
|
323
325
|
loop = _asyncio.get_event_loop()
|
|
324
326
|
if self.context.has_rich:
|
|
325
|
-
with self.context.console.status("[dim]
|
|
327
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取恐惧贪婪指数', 'Fetching the Fear & Greed index')}...[/dim]", spinner="dots"):
|
|
326
328
|
from local_finance_tools import _get_fear_greed_index
|
|
327
329
|
r = await loop.run_in_executor(None, _get_fear_greed_index, {})
|
|
328
330
|
else:
|
|
@@ -356,7 +358,7 @@ class AnalysisCommandsMixin:
|
|
|
356
358
|
loop = _asyncio.get_event_loop()
|
|
357
359
|
if compare_mode:
|
|
358
360
|
if self.context.has_rich:
|
|
359
|
-
with self.context.console.status("[dim]并行查询 binance / okx / bybit...[/dim]", spinner="dots"):
|
|
361
|
+
with self.context.console.status(f"[dim]{ui_text(self, '并行查询 binance / okx / bybit', 'Querying binance / okx / bybit in parallel')}...[/dim]", spinner="dots"):
|
|
360
362
|
from local_finance_tools import _get_funding_rates_compare
|
|
361
363
|
r = await loop.run_in_executor(None, _get_funding_rates_compare, {"symbols": syms})
|
|
362
364
|
else:
|
|
@@ -365,7 +367,7 @@ class AnalysisCommandsMixin:
|
|
|
365
367
|
_render_funding_compare(r)
|
|
366
368
|
else:
|
|
367
369
|
if self.context.has_rich:
|
|
368
|
-
with self.context.console.status(f"[dim]获取 {exchange}
|
|
370
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'获取 {exchange} 资金费率', f'Fetching {exchange} funding rates')}...[/dim]", spinner="dots"):
|
|
369
371
|
from local_finance_tools import _get_funding_rates
|
|
370
372
|
r = await loop.run_in_executor(None, _get_funding_rates, {"exchange": exchange, "symbols": syms})
|
|
371
373
|
else:
|
|
@@ -6,6 +6,8 @@ imported lazily inside each method body to avoid circular imports at load time.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
from aria_code.apps.cli.i18n import ui_text
|
|
10
|
+
|
|
9
11
|
from ._ui import Panel, print_error, rich_box
|
|
10
12
|
from aria_code.packages.aria_core.paths import aria_home
|
|
11
13
|
|
|
@@ -389,7 +391,7 @@ class BrokerCommandsMixin:
|
|
|
389
391
|
label = broker_id
|
|
390
392
|
try:
|
|
391
393
|
if self.context.has_rich:
|
|
392
|
-
with self.context.console.status(f"[dim]正在连接 {broker_id}...[/dim]", spinner="dots"):
|
|
394
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'正在连接 {broker_id}', f'Connecting to {broker_id}')}...[/dim]", spinner="dots"):
|
|
393
395
|
import asyncio as _aio
|
|
394
396
|
loop = _aio.get_event_loop()
|
|
395
397
|
broker = await loop.run_in_executor(None, reg.connect, broker_id)
|
|
@@ -859,7 +861,7 @@ class BrokerCommandsMixin:
|
|
|
859
861
|
if not broker:
|
|
860
862
|
return
|
|
861
863
|
import asyncio as _aio
|
|
862
|
-
with self.context.console.status("[dim]
|
|
864
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取持仓', 'Fetching positions')}...[/dim]", spinner="dots") if self.context.has_rich else _null_ctx():
|
|
863
865
|
pos = await _aio.get_event_loop().run_in_executor(None, broker.positions)
|
|
864
866
|
_print_broker_positions(pos, broker.label, broker.config.get("currency","CNY"))
|
|
865
867
|
except Exception as e:
|
|
@@ -889,7 +891,7 @@ class BrokerCommandsMixin:
|
|
|
889
891
|
if not broker:
|
|
890
892
|
return
|
|
891
893
|
import asyncio as _aio
|
|
892
|
-
with self.context.console.status("[dim]
|
|
894
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取订单', 'Fetching orders')}...[/dim]", spinner="dots") if self.context.has_rich else _null_ctx():
|
|
893
895
|
orders = await _aio.get_event_loop().run_in_executor(
|
|
894
896
|
None, lambda: broker.orders(status=status, limit=30)
|
|
895
897
|
)
|
{aria_code-0.80.0 → aria_code-0.82.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py
RENAMED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from aria_code.apps.cli.i18n import ui_text
|
|
6
|
+
|
|
5
7
|
from ._business_render import p, print_realty_result, print_risk_scan
|
|
6
8
|
|
|
7
9
|
|
|
@@ -275,7 +277,7 @@ class BusinessWorkflowCommandsMixin:
|
|
|
275
277
|
|
|
276
278
|
async def _run_realty_agent(self, agent_name: str, project_id: str, input_data: dict):
|
|
277
279
|
if self.context.has_rich:
|
|
278
|
-
with self.context.console.status(f"[dim]运行 {agent_name} Agent...[/dim]", spinner="dots"):
|
|
280
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'运行 {agent_name} Agent', f'Running the {agent_name} agent')}...[/dim]", spinner="dots"):
|
|
279
281
|
result = await self._call_realty_agent(agent_name, project_id, input_data)
|
|
280
282
|
else:
|
|
281
283
|
print(f"Running {agent_name}...")
|
|
@@ -286,7 +288,8 @@ class BusinessWorkflowCommandsMixin:
|
|
|
286
288
|
async def _run_realty_team(self, agents: list, project_id: str, input_data: dict):
|
|
287
289
|
import asyncio
|
|
288
290
|
if self.context.has_rich:
|
|
289
|
-
|
|
291
|
+
_names = ', '.join(agents)
|
|
292
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'并行扫描 {_names}', f'Scanning {_names} in parallel')}...[/dim]", spinner="dots"):
|
|
290
293
|
tasks = [self._call_realty_agent(n, project_id, input_data) for n in agents]
|
|
291
294
|
results = await asyncio.gather(*tasks, return_exceptions=False)
|
|
292
295
|
else:
|
|
@@ -13,6 +13,7 @@ NameError,而这正是 requires-python = "<3.14,>=3.10" 声明支持的全部
|
|
|
13
13
|
全绿。已发布的 4.3.0 同样中招:pip install 后运行 aria-code 直接崩溃。
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
+
from aria_code.apps.cli.i18n import ui_text
|
|
16
17
|
from ._ui import print_error
|
|
17
18
|
|
|
18
19
|
import pathlib
|
|
@@ -2240,7 +2241,7 @@ class CoreCommandsMixin:
|
|
|
2240
2241
|
return
|
|
2241
2242
|
mdc = _get_mdc()
|
|
2242
2243
|
if self.context.has_rich:
|
|
2243
|
-
with self.context.console.status("[dim]
|
|
2244
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取全球指数', 'Fetching global indices')}...[/dim]", spinner="dots"):
|
|
2244
2245
|
r = mdc.indices()
|
|
2245
2246
|
else:
|
|
2246
2247
|
print(" 获取全球指数...")
|
|
@@ -2287,7 +2288,7 @@ class CoreCommandsMixin:
|
|
|
2287
2288
|
|
|
2288
2289
|
mdc = _get_mdc()
|
|
2289
2290
|
if self.context.has_rich:
|
|
2290
|
-
with self.context.console.status(f"[dim]获取{market.upper()}
|
|
2291
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'获取{market.upper()}热门股', f'Fetching top {market.upper()} movers')}...[/dim]", spinner="dots"):
|
|
2291
2292
|
r = mdc.hot_stocks(market=market, top_n=top_n)
|
|
2292
2293
|
else:
|
|
2293
2294
|
r = mdc.hot_stocks(market=market, top_n=top_n)
|
|
@@ -2489,7 +2490,7 @@ class CoreCommandsMixin:
|
|
|
2489
2490
|
sub = parts[1].lower() if len(parts) > 1 else "filings"
|
|
2490
2491
|
|
|
2491
2492
|
if self.context.has_rich:
|
|
2492
|
-
with self.context.console.status(f"[dim]查询 EDGAR {symbol}...[/dim]", spinner="dots"):
|
|
2493
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'查询 EDGAR {symbol}', f'Querying EDGAR for {symbol}')}...[/dim]", spinner="dots"):
|
|
2493
2494
|
result = await asyncio.get_event_loop().run_in_executor(
|
|
2494
2495
|
None, lambda: _fetch_edgar_data(symbol, sub)
|
|
2495
2496
|
)
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from aria_code.apps.cli.i18n import ui_text
|
|
6
|
+
|
|
5
7
|
from ._ui import print_error
|
|
6
8
|
|
|
7
9
|
|
|
@@ -86,7 +88,7 @@ class DataCommandsMixin:
|
|
|
86
88
|
self.context.console.print("[dim]用法: /data sql \"SELECT ...\"|/dim]")
|
|
87
89
|
return
|
|
88
90
|
if self.context.has_rich:
|
|
89
|
-
with self.context.console.status("[dim]执行 SQL...[/dim]", spinner="dots"):
|
|
91
|
+
with self.context.console.status(f"[dim]{ui_text(self, '执行 SQL', 'Running SQL')}...[/dim]", spinner="dots"):
|
|
90
92
|
r = await loop.run_in_executor(None, sql_query, {"query": query})
|
|
91
93
|
else:
|
|
92
94
|
r = sql_query({"query": query})
|
|
@@ -104,7 +106,7 @@ class DataCommandsMixin:
|
|
|
104
106
|
export_data = {"示例数据": [{"symbol": s, "note": "需 yfinance"} for s in watchlist]}
|
|
105
107
|
p = {"data": export_data, "filename": fname}
|
|
106
108
|
if self.context.has_rich:
|
|
107
|
-
with self.context.console.status("[dim]生成 Excel...[/dim]", spinner="dots"):
|
|
109
|
+
with self.context.console.status(f"[dim]{ui_text(self, '生成 Excel', 'Building Excel')}...[/dim]", spinner="dots"):
|
|
108
110
|
r = await loop.run_in_executor(None, export_to_excel, p)
|
|
109
111
|
else:
|
|
110
112
|
r = export_to_excel(p)
|
|
@@ -125,7 +127,7 @@ class DataCommandsMixin:
|
|
|
125
127
|
self.context.console.print("[dim]用法: /data load <csv文件路径>[/dim]")
|
|
126
128
|
return
|
|
127
129
|
if self.context.has_rich:
|
|
128
|
-
with self.context.console.status("[dim]加载 CSV...[/dim]", spinner="dots"):
|
|
130
|
+
with self.context.console.status(f"[dim]{ui_text(self, '加载 CSV', 'Loading CSV')}...[/dim]", spinner="dots"):
|
|
129
131
|
r = await loop.run_in_executor(None, load_csv_data, {"path": csv_path})
|
|
130
132
|
else:
|
|
131
133
|
r = load_csv_data({"path": csv_path})
|
|
@@ -221,7 +223,7 @@ class DataCommandsMixin:
|
|
|
221
223
|
|
|
222
224
|
elif sub == "check":
|
|
223
225
|
if self.context.has_rich:
|
|
224
|
-
with self.context.console.status("[dim]
|
|
226
|
+
with self.context.console.status(f"[dim]{ui_text(self, '检查价格预警', 'Checking price alerts')}...[/dim]", spinner="dots"):
|
|
225
227
|
r = await loop.run_in_executor(None, check_alerts)
|
|
226
228
|
else:
|
|
227
229
|
r = check_alerts()
|
|
@@ -262,7 +264,8 @@ class DataCommandsMixin:
|
|
|
262
264
|
return
|
|
263
265
|
|
|
264
266
|
if self.context.has_rich:
|
|
265
|
-
|
|
267
|
+
_names = ', '.join(symbols)
|
|
268
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'计算 {_names} 相关性矩阵', f'Computing the {_names} correlation matrix')}...[/dim]", spinner="dots"):
|
|
266
269
|
r = await loop.run_in_executor(None, calc_correlation_matrix,
|
|
267
270
|
{"symbols": symbols, "period": period})
|
|
268
271
|
else:
|
|
@@ -312,7 +315,8 @@ class DataCommandsMixin:
|
|
|
312
315
|
p_params["weights"] = weights
|
|
313
316
|
|
|
314
317
|
if self.context.has_rich:
|
|
315
|
-
|
|
318
|
+
_names = ', '.join(symbols)
|
|
319
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'回测 {_names} ({period})', f'Backtesting {_names} ({period})')}...[/dim]", spinner="dots"):
|
|
316
320
|
r = await loop.run_in_executor(None, portfolio_backtest, p_params)
|
|
317
321
|
else:
|
|
318
322
|
r = portfolio_backtest(p_params)
|
|
@@ -332,7 +336,7 @@ class DataCommandsMixin:
|
|
|
332
336
|
import asyncio as _asyncio
|
|
333
337
|
loop = _asyncio.get_event_loop()
|
|
334
338
|
if self.context.has_rich:
|
|
335
|
-
with self.context.console.status(f"[dim]获取 {symbol}
|
|
339
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'获取 {symbol} 同行数据', f'Fetching {symbol} peer data')}...[/dim]", spinner="dots"):
|
|
336
340
|
from local_finance_tools import _peer_comparison
|
|
337
341
|
r = await loop.run_in_executor(None, _peer_comparison,
|
|
338
342
|
{"symbol": symbol, "peers": peers})
|
|
@@ -7,6 +7,8 @@ by _rebind_mixin_globals() called at module load time.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
+
from aria_code.apps.cli.i18n import ui_text
|
|
11
|
+
|
|
10
12
|
from ._ui import print_error
|
|
11
13
|
from typing import Optional, Tuple
|
|
12
14
|
|
|
@@ -385,7 +387,7 @@ class MarketCommandsMixin:
|
|
|
385
387
|
city2 = parts[2] if len(parts) > 2 else ("上海" if city1 != "上海" else "北京")
|
|
386
388
|
import functools as _functools
|
|
387
389
|
if self.context.has_rich:
|
|
388
|
-
with self.context.console.status(f"[dim]获取 {city1}/{city2}
|
|
390
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'获取 {city1}/{city2} 房价指数', f'Fetching {city1}/{city2} house price indices')}...[/dim]", spinner="dots"):
|
|
389
391
|
r = await loop.run_in_executor(
|
|
390
392
|
None, _functools.partial(get_house_price_index, city1, city2)
|
|
391
393
|
)
|
|
@@ -394,7 +396,7 @@ class MarketCommandsMixin:
|
|
|
394
396
|
_render_house_price(r)
|
|
395
397
|
# Also show investment data
|
|
396
398
|
if self.context.has_rich:
|
|
397
|
-
with self.context.console.status("[dim]
|
|
399
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取房地产投资数据', 'Fetching real-estate investment data')}...[/dim]", spinner="dots"):
|
|
398
400
|
ri = await loop.run_in_executor(None, get_re_investment)
|
|
399
401
|
else:
|
|
400
402
|
ri = get_re_investment()
|
|
@@ -410,7 +412,7 @@ class MarketCommandsMixin:
|
|
|
410
412
|
code = parts[1] if len(parts) > 1 else None
|
|
411
413
|
if code:
|
|
412
414
|
if self.context.has_rich:
|
|
413
|
-
with self.context.console.status(f"[dim]分析 {code} REIT...[/dim]", spinner="dots"):
|
|
415
|
+
with self.context.console.status(f"[dim]{ui_text(self, f'分析 {code} REIT', f'Analyzing REIT {code}')}...[/dim]", spinner="dots"):
|
|
414
416
|
r = await loop.run_in_executor(None, get_reit_analysis, code)
|
|
415
417
|
else:
|
|
416
418
|
r = get_reit_analysis(code)
|
|
@@ -429,7 +431,7 @@ class MarketCommandsMixin:
|
|
|
429
431
|
self.context.console.print(f"[red]{r.get('error','分析失败')}[/red]") if self.context.has_rich else None
|
|
430
432
|
else:
|
|
431
433
|
if self.context.has_rich:
|
|
432
|
-
with self.context.console.status("[dim]获取 REIT
|
|
434
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取 REIT 列表', 'Fetching the REIT list')}...[/dim]", spinner="dots"):
|
|
433
435
|
r = await loop.run_in_executor(None, get_reits_list)
|
|
434
436
|
else:
|
|
435
437
|
r = get_reits_list()
|
|
@@ -438,7 +440,7 @@ class MarketCommandsMixin:
|
|
|
438
440
|
elif sub == "compare":
|
|
439
441
|
cities = parts[1:] if len(parts) > 1 else None
|
|
440
442
|
if self.context.has_rich:
|
|
441
|
-
with self.context.console.status("[dim]
|
|
443
|
+
with self.context.console.status(f"[dim]{ui_text(self, '对比多城市房价', 'Comparing city house prices')}...[/dim]", spinner="dots"):
|
|
442
444
|
r = await loop.run_in_executor(None, get_multi_city_comparison, cities)
|
|
443
445
|
else:
|
|
444
446
|
r = get_multi_city_comparison(cities)
|
|
@@ -483,7 +485,7 @@ class MarketCommandsMixin:
|
|
|
483
485
|
|
|
484
486
|
elif sub == "us":
|
|
485
487
|
if self.context.has_rich:
|
|
486
|
-
with self.context.console.status("[dim]
|
|
488
|
+
with self.context.console.status(f"[dim]{ui_text(self, '获取美国住房数据', 'Fetching US housing data')}...[/dim]", spinner="dots"):
|
|
487
489
|
r = await loop.run_in_executor(None, get_us_housing_data)
|
|
488
490
|
else:
|
|
489
491
|
r = get_us_housing_data()
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
5
|
+
from aria_code.apps.cli.i18n import ui_text
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
import json
|
|
7
9
|
import asyncio
|
|
@@ -78,7 +80,7 @@ class OrchestratorCommandsMixin:
|
|
|
78
80
|
if self.context.has_rich:
|
|
79
81
|
provider = ConfiguredProvider(self.context.config, "gemini-2.5-flash")
|
|
80
82
|
|
|
81
|
-
with self.context.console.status("[dim]Orchestrator
|
|
83
|
+
with self.context.console.status(f"[dim]{ui_text(self, 'Orchestrator 正在编排智能体网络', 'Orchestrator is planning the agent network')}...[/dim]"):
|
|
82
84
|
result = await dynamic_agent_orchestration(request, provider)
|
|
83
85
|
agents_to_run = result.get("agents", [])
|
|
84
86
|
|
|
@@ -7,6 +7,8 @@ by _rebind_mixin_globals() called at module load time.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
+
from aria_code.apps.cli.i18n import ui_text
|
|
11
|
+
|
|
10
12
|
from ._ui import Panel, print_error
|
|
11
13
|
|
|
12
14
|
|
|
@@ -597,7 +599,7 @@ class PortfolioCommandsMixin:
|
|
|
597
599
|
if export_pdf_flag:
|
|
598
600
|
try:
|
|
599
601
|
if self.context.has_rich:
|
|
600
|
-
with self.context.console.status("[dim]导出 PDF…[/dim]", spinner="dots"):
|
|
602
|
+
with self.context.console.status(f"[dim]{ui_text(self, '导出 PDF', 'Exporting PDF')}…[/dim]", spinner="dots"):
|
|
601
603
|
_pdf_path = await export_report_pdf(out_f)
|
|
602
604
|
else:
|
|
603
605
|
_pdf_path = await export_report_pdf(out_f)
|
|
@@ -23,6 +23,7 @@ from aria_code.apps.cli.utils.market_detect import (
|
|
|
23
23
|
_detect_market_overview,
|
|
24
24
|
_PRIVATE_COMPANY_PROFILES,
|
|
25
25
|
)
|
|
26
|
+
from aria_code.apps.cli.market_hours import market_session
|
|
26
27
|
from aria_code.apps.cli.market_metadata import enrich_market_quote, market_display_label
|
|
27
28
|
from aria_code.packages.aria_core.paths import aria_home
|
|
28
29
|
|
|
@@ -1700,7 +1701,9 @@ def _try_handle_market_snapshot_analysis(message: str, history: list = None, *,
|
|
|
1700
1701
|
|
|
1701
1702
|
if not quote.get("success") or price is None or price == 0:
|
|
1702
1703
|
err = quote.get("error") or _no_price
|
|
1703
|
-
|
|
1704
|
+
# "NoneType…" and a bare KeyError repr ("'currentTradingPeriod'", what
|
|
1705
|
+
# yfinance raises for a symbol it has no chart for) say nothing to a user.
|
|
1706
|
+
if "NoneType" in str(err) or re.fullmatch(r"'\w+'", str(err).strip()):
|
|
1704
1707
|
err = _no_price
|
|
1705
1708
|
is_rate_limit = "rate" in str(err).lower() or "429" in str(err) or "too many" in str(err).lower()
|
|
1706
1709
|
if is_rate_limit:
|
|
@@ -2143,7 +2146,6 @@ def _try_handle_market_snapshot_analysis(message: str, history: list = None, *,
|
|
|
2143
2146
|
_chg_abs = abs(chg) if chg is not None else None
|
|
2144
2147
|
|
|
2145
2148
|
# ── Build output ──────────────────────────────────────────────────────
|
|
2146
|
-
weekday = datetime.now().weekday()
|
|
2147
2149
|
ti_provider = ti.get("provider", "")
|
|
2148
2150
|
quote_chain = quote.get("provider_chain") or [provider]
|
|
2149
2151
|
data_src = " -> ".join(str(p) for p in quote_chain if p)
|
|
@@ -2160,8 +2162,11 @@ def _try_handle_market_snapshot_analysis(message: str, history: list = None, *,
|
|
|
2160
2162
|
signal_str = _SIGNAL_LABELS.get(_lang, _SIGNAL_LABELS["zh"])[_sig_key]
|
|
2161
2163
|
_L = {
|
|
2162
2164
|
"disclaimer": "Not investment advice" if _en else "不构成投资建议",
|
|
2163
|
-
"
|
|
2164
|
-
"
|
|
2165
|
+
"session_open": "Market open" if _en else "盘中",
|
|
2166
|
+
"session_pre": "Pre-market" if _en else "盘前",
|
|
2167
|
+
"session_post": "After-hours" if _en else "盘后",
|
|
2168
|
+
"session_closed": "Market closed" if _en else "休市",
|
|
2169
|
+
"session_24/7": "24/7 market" if _en else "全天交易",
|
|
2165
2170
|
"price_hdr": "Metric" if _en else "指标",
|
|
2166
2171
|
"value_hdr": "Value" if _en else "数值",
|
|
2167
2172
|
"latest": "Last price" if _en else "最新价",
|
|
@@ -2218,7 +2223,9 @@ def _try_handle_market_snapshot_analysis(message: str, history: list = None, *,
|
|
|
2218
2223
|
}
|
|
2219
2224
|
|
|
2220
2225
|
_sep = ": " if _en else ":"
|
|
2221
|
-
|
|
2226
|
+
# On the exchange's clock, not this machine's; nothing when it is unknown.
|
|
2227
|
+
_session = market_session(symbol)
|
|
2228
|
+
session_note = _L.get(f"session_{_session}", "") if _session else ""
|
|
2222
2229
|
|
|
2223
2230
|
def _money(v: float | int | None) -> str:
|
|
2224
2231
|
try:
|
|
@@ -2314,10 +2321,13 @@ def _try_handle_market_snapshot_analysis(message: str, history: list = None, *,
|
|
|
2314
2321
|
lines.append(f"## {_header_name} `{symbol}`")
|
|
2315
2322
|
else:
|
|
2316
2323
|
lines.append(f"## `{symbol}`")
|
|
2317
|
-
lines.append(
|
|
2324
|
+
lines.append("*" + " · ".join(p for p in (data_src, _now_str, session_note, _L["disclaimer"]) if p) + "*")
|
|
2318
2325
|
lines.append("")
|
|
2319
|
-
|
|
2320
|
-
lines
|
|
2326
|
+
# Two trailing spaces: a Markdown line break. Without it the renderer
|
|
2327
|
+
# joined these lines into one paragraph ("…MACD negative. Watch: Watch
|
|
2328
|
+
# USD 334.30…"). "Levels", not "Watch": the line itself starts "Watch …".
|
|
2329
|
+
lines.append(f"**{'Takeaway' if _en else '结论'}**{_sep}{_summary_line} ")
|
|
2330
|
+
lines.append(f"**{'Levels' if _en else '观察位'}**{_sep}{_watch_line}")
|
|
2321
2331
|
lines.append("")
|
|
2322
2332
|
|
|
2323
2333
|
# ── Price table ──
|
|
@@ -2385,7 +2395,7 @@ def _try_handle_market_snapshot_analysis(message: str, history: list = None, *,
|
|
|
2385
2395
|
if _en else
|
|
2386
2396
|
f" · 量化分 {_signal_score:+d} · 置信度 {_signal_confidence:.0%}"
|
|
2387
2397
|
)
|
|
2388
|
-
lines.append(f"{_L['signal_lbl']}{_sep}`{signal}` — {signal_str}{_score_detail}")
|
|
2398
|
+
lines.append(f"{_L['signal_lbl']}{_sep}`{signal}` — {signal_str}{_score_detail} ")
|
|
2389
2399
|
_reason_parts = []
|
|
2390
2400
|
if _positive_reasons:
|
|
2391
2401
|
_reason_parts.append(("support: " if _en else "支撑:") + _join_reasons(_positive_reasons[:3]))
|
|
@@ -238,6 +238,17 @@ def get_ui_lang(config: Optional[dict] = None) -> str:
|
|
|
238
238
|
return detect_system_lang()
|
|
239
239
|
|
|
240
240
|
|
|
241
|
+
def ui_text(owner, zh_text: str, en_text: str) -> str:
|
|
242
|
+
"""The text for the configured UI language; English unless ui_lang is zh.
|
|
243
|
+
|
|
244
|
+
``owner`` is a command object (its ``terminal.config``), a terminal (its
|
|
245
|
+
``config``) or a config dict.
|
|
246
|
+
"""
|
|
247
|
+
config = owner if isinstance(owner, dict) else (
|
|
248
|
+
getattr(owner, "config", None) or getattr(getattr(owner, "terminal", None), "config", None) or {})
|
|
249
|
+
return zh_text if str(config.get("ui_lang", "en")).lower().startswith("zh") else en_text
|
|
250
|
+
|
|
251
|
+
|
|
241
252
|
def t(key: str, lang: Optional[str] = None, config: Optional[dict] = None) -> str:
|
|
242
253
|
"""Translate a UI key to the given language (or auto-detect).
|
|
243
254
|
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
"""Whether a symbol's exchange is in session, judged on the exchange's clock.
|
|
2
|
+
|
|
3
|
+
Two places judged it on the clock of the machine running Aria. The snapshot
|
|
4
|
+
header said "Market open" on any local weekday, so at 09:00 on Monday in
|
|
5
|
+
Shanghai — Sunday evening in New York — AAPL was "Market open". The context
|
|
6
|
+
sent to the model compared local hours with New York's 09:30–16:00, so a user
|
|
7
|
+
in Beijing had the US market "open" through the New York night.
|
|
8
|
+
|
|
9
|
+
Exchange holidays are not known here: on a holiday the usual hours still read
|
|
10
|
+
as a session. An unknown exchange, or a time zone this machine lacks, gives
|
|
11
|
+
``None``, and callers then say nothing rather than guess.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import re
|
|
17
|
+
from datetime import datetime, time, timezone
|
|
18
|
+
|
|
19
|
+
try:
|
|
20
|
+
from zoneinfo import ZoneInfo
|
|
21
|
+
except ImportError: # pragma: no cover - Python < 3.9
|
|
22
|
+
ZoneInfo = None # type: ignore[assignment]
|
|
23
|
+
|
|
24
|
+
_EU = ((time(9, 0), time(17, 30)),)
|
|
25
|
+
|
|
26
|
+
# Exchange -> (time zone, regular sessions in local time).
|
|
27
|
+
_EXCHANGES: dict[str, tuple[str, tuple[tuple[time, time], ...]]] = {
|
|
28
|
+
"US": ("America/New_York", ((time(9, 30), time(16, 0)),)),
|
|
29
|
+
"CN": ("Asia/Shanghai", ((time(9, 30), time(11, 30)), (time(13, 0), time(15, 0)))),
|
|
30
|
+
"HK": ("Asia/Hong_Kong", ((time(9, 30), time(12, 0)), (time(13, 0), time(16, 0)))),
|
|
31
|
+
"JP": ("Asia/Tokyo", ((time(9, 0), time(11, 30)), (time(12, 30), time(15, 30)))),
|
|
32
|
+
"UK": ("Europe/London", ((time(8, 0), time(16, 30)),)),
|
|
33
|
+
"FR": ("Europe/Paris", _EU),
|
|
34
|
+
"DE": ("Europe/Berlin", _EU),
|
|
35
|
+
"NL": ("Europe/Amsterdam", _EU),
|
|
36
|
+
"IT": ("Europe/Rome", _EU),
|
|
37
|
+
"ES": ("Europe/Madrid", _EU),
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
_SUFFIXES = {
|
|
41
|
+
".HK": "HK", ".SS": "CN", ".SZ": "CN", ".SH": "CN", ".T": "JP", ".L": "UK",
|
|
42
|
+
".PA": "FR", ".DE": "DE", ".AS": "NL", ".MI": "IT", ".MC": "ES",
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
# US extended hours, New York time.
|
|
46
|
+
_US_PRE = (time(4, 0), time(9, 30))
|
|
47
|
+
_US_POST = (time(16, 0), time(20, 0))
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def exchange_for(symbol: str) -> str | None:
|
|
51
|
+
""""US", "CN", "HK", … for a symbol; "CRYPTO" for a coin pair; None if unknown."""
|
|
52
|
+
s = str(symbol or "").strip().upper()
|
|
53
|
+
if not s or s.startswith("^") or s.endswith(("=X", "=F")):
|
|
54
|
+
return None
|
|
55
|
+
if re.fullmatch(r"[A-Z0-9]{2,10}-(USD|USDT|USDC|EUR)", s):
|
|
56
|
+
return "CRYPTO"
|
|
57
|
+
for suffix, exchange in _SUFFIXES.items():
|
|
58
|
+
if s.endswith(suffix):
|
|
59
|
+
return exchange
|
|
60
|
+
if re.fullmatch(r"(SH|SZ)?\d{6}", s):
|
|
61
|
+
return "CN"
|
|
62
|
+
if re.fullmatch(r"[A-Z]{1,5}([.-][A-Z])?", s):
|
|
63
|
+
return "US"
|
|
64
|
+
return None
|
|
65
|
+
|
|
66
|
+
|
|
67
|
+
def _local_now(exchange: str, now: datetime | None) -> datetime | None:
|
|
68
|
+
if ZoneInfo is None:
|
|
69
|
+
return None
|
|
70
|
+
try:
|
|
71
|
+
zone = ZoneInfo(_EXCHANGES[exchange][0])
|
|
72
|
+
except Exception: # no tz database on this machine
|
|
73
|
+
return None
|
|
74
|
+
moment = now or datetime.now(timezone.utc)
|
|
75
|
+
if moment.tzinfo is None:
|
|
76
|
+
moment = moment.astimezone() # a naive time is this machine's local time
|
|
77
|
+
return moment.astimezone(zone)
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
def market_session(symbol: str, now: datetime | None = None) -> str | None:
|
|
81
|
+
""""open", "pre", "post", "closed" or "24/7" for the symbol's exchange; None if unknown."""
|
|
82
|
+
exchange = exchange_for(symbol)
|
|
83
|
+
if exchange == "CRYPTO":
|
|
84
|
+
return "24/7"
|
|
85
|
+
if exchange is None:
|
|
86
|
+
return None
|
|
87
|
+
local = _local_now(exchange, now)
|
|
88
|
+
if local is None:
|
|
89
|
+
return None
|
|
90
|
+
if local.weekday() >= 5:
|
|
91
|
+
return "closed"
|
|
92
|
+
clock = local.time()
|
|
93
|
+
if any(start <= clock < end for start, end in _EXCHANGES[exchange][1]):
|
|
94
|
+
return "open"
|
|
95
|
+
if exchange == "US":
|
|
96
|
+
if _US_PRE[0] <= clock < _US_PRE[1]:
|
|
97
|
+
return "pre"
|
|
98
|
+
if _US_POST[0] <= clock < _US_POST[1]:
|
|
99
|
+
return "post"
|
|
100
|
+
return "closed"
|