aria-code 0.76.0__tar.gz → 0.78.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.76.0 → aria_code-0.78.0}/PKG-INFO +36 -10
- aria_code-0.78.0/README.md +126 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/pyproject.toml +2 -2
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/_version.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/bootstrap.py +28 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/auth_cmds.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +14 -5
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +5 -5
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/core_cmds.py +32 -24
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/data_cmds.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +71 -78
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/i18n.py +3 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/intent_router.py +28 -2
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/main.py +7 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/prompt_assembly.py +20 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/base.py +110 -12
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/chat_routing.py +12 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +3 -2
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +5 -7
- aria_code-0.78.0/src/aria_code/apps/cli/review_runner.py +111 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/runtime_consumer.py +2 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tool_executor.py +23 -14
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tools/write_tools.py +54 -10
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/update_check.py +20 -9
- aria_code-0.78.0/src/aria_code/apps/cli/updater.py +188 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/aria_cli.py +20 -4
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/aliyun_data_client.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/domain/strategy_vault.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/intent_classifier.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_sdk/client.py +7 -14
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_sdk/streaming.py +7 -15
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/research_protocol.py +30 -4
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/llm/anthropic.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/llm/ollama.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/llm/openai_compat.py +1 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/local_llm_provider.py +62 -8
- aria_code-0.78.0/src/aria_code/providers/tool_messages.py +100 -0
- aria_code-0.78.0/src/aria_code/review_service.py +497 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/safety/permissions.py +7 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/banner.py +61 -151
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/render/market.py +41 -21
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/robot.py +61 -54
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/startup_dashboard.py +2 -1
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code.egg-info/PKG-INFO +36 -10
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code.egg-info/SOURCES.txt +12 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_aria_cli_core.py +18 -1
- aria_code-0.78.0/tests/test_cli_updater.py +133 -0
- aria_code-0.78.0/tests/test_event_import_roots.py +34 -0
- aria_code-0.78.0/tests/test_google_cloud_models.py +136 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_intent_router.py +23 -0
- aria_code-0.78.0/tests/test_market_questions_on_backend.py +67 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_release_chain.py +3 -3
- aria_code-0.78.0/tests/test_review_service.py +236 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_bridge_fallback.py +2 -2
- aria_code-0.78.0/tests/test_runtime_event_identity.py +31 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_startup_dashboard.py +36 -37
- aria_code-0.78.0/tests/test_tool_rounds_on_openai_apis.py +140 -0
- aria_code-0.78.0/tests/test_ui_language_and_model.py +76 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_ui_robot_banner.py +26 -33
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_update_health_routes.py +2 -2
- aria_code-0.76.0/README.md +0 -100
- {aria_code-0.76.0 → aria_code-0.78.0}/LICENSE +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/NOTICE +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/setup.cfg +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/adk_apps/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/base.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/code_review.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/critic.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/deepen.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/models.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/pipeline.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/themes.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/deep/tiers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/engineering/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/engineering/coder.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/engineering/tester.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/catalyst.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/debate.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/earnings.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/fundamental.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/macro.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/news.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/risk.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/sector.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/strategist.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/synthesis.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/financial/technical.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/orchestrator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/portfolio_agent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/business_match.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/signal_scheme.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/sports/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/sports/football_agent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/supervisor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/team.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/aliyun_data_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/README.md +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/channels/README.md +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/channels/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/channels/approvals.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/channels/conversation.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/channels/digest.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/channels/intake.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/channels/registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/channels/tradingview.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/README.md +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/_optional.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/broker_render.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/market.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/team.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/config_paths.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/config_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/constants.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/context.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/deterministic.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/direct.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/football_reports.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/google_login.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/helpers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/hooks.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/intent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/market_universe.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/message_processing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/preflight.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/project_aria.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/sandbox.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/session_export.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/session_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tools/context.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/daemon/README.md +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/vscode/README.md +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/vscode/package.json +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/aria_daemon.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/aria_feishu_bot.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/aria_mcp_server.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/aria_relay_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/aria_relay_server.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/aria_telegram_bot.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ariarc.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/artifacts.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/backtest_engine.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/backtest_report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/automation.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/base.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/capabilities.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/cn/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/config.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/intl/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/paper_broker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/planning.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/brokers/trading.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/canva_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/change_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/aria_relay_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/canva_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/figma_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/football_data_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/kling_video_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/market_data_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/openai_image_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/runway_video_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/cloud_memory.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/command_safety.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/computer_use_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/dashboard_generator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/data_analysis_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/data_cleaner.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/data_service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/base.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/router.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/demo_player.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/doctor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/domain/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/domain/backtest_engine.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/domain/backtest_report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/domain/finance_formulas.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/evals/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/evals/harness.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/evals/runner.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/external_agent_runner.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/figma_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/file_analysis_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/finance_formulas.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/football_data_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/image_gen_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/kling_video_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/licensing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/local_finance_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/local_image_provider.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/local_llm_provider.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/macro_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/markdown_pdf.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/market_data_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/mcp_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/memory_manager.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/model_capability.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/notification_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/openai_image_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_core/export.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_core/paths.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_infra/product.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/cache.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/context.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/data.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/references.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/settings.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_services/usage.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packs/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packs/base.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packs/finance/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packs/logistics/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packs/payments/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packs/realty/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packs/registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/packs/rules.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/plan_utils.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/plugin_loader.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/portfolio_ledger.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/preview_server.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/privacy/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/privacy/feedback.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/project_review.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/project_review_api.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/project_review_server.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/project_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/llm/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/llm/base.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/llm/custom.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/llm/registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/providers/local_image_provider.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/realty_data_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/relay_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/report_exporters.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/report_generator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/acceptance.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/agent_loop.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/approval.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/budget.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/checkpoints.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/crash_report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/events.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/gateway.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/lsp.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/orchestrator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/repo_map.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/run_state.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/run_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/self_healing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/subagent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/task_ledger.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/tool_executor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/tool_policy.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runtime/worktrees.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/runway_video_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/safety/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/safety/service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/setup_wizard.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/spreadsheet_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/strategy_vault.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/artifact_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/broker_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/build_quant_engine.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/code_audit_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/computer_use_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/extended_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/image_gen_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/local_finance_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/logistics_carriers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/logistics_inventory.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/logistics_io.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/logistics_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/macro_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/notification_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/project_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/realty_data_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/tools/stripe_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/completer.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/console.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/image_render.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/input_box.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/picker.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/render/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/render/finance.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/render/output.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/render/responsive.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/ui/render/team.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/utils/vscode_uri.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/video_analysis.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/video_editor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/workspace/__init__.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/workspace/files.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/workspace/verify.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/workspace_changes.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/workspace_context.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/workspace_service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/workspace_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code.egg-info/entry_points.txt +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code.egg-info/requires.txt +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code.egg-info/top_level.txt +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_adk_market_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_agent_team_fallback.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_analyze_file_tool.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_architecture_ledger_is_true.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_architecture_report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_aria_mcp_server.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_aria_sdk.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_artifact_publishing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_artifacts_and_reports.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_ashare_prediction_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_backtest_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_backtest_engine.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_backtest_report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_broken_akshare_is_optional.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_broker_automation.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_broker_chat_confirm_gate.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_broker_planning.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_broker_safety.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_broker_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_budget.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_business_workflow_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_canva_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_canvas_cmds.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_card_approvals.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_channel_intake.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_channels.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_chart_handlers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_chat_bots_fail_closed.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_chat_routing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_ci_security_workflow.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_cli_app_split.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_cli_bootstrap.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_cli_config_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_cli_lifecycle_hooks.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_cli_runtime_consumer.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_cli_tool_executor_module.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_cloud_memory.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_code_audit_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_code_review_agent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_codegen_output.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_coder_tester_self_healing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_coder_tool_safety.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_collaboration.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_command_loggers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_command_safety.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_completions_builder.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_config_paths.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_configured_provider.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_container_entrypoint.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_container_entrypoints.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_context_checkpoints.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_context_references.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_context_service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_conversation_core.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_crash_report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_credential_file_permissions.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_custom_providers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_daemon_gateway_config.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_dashboard_generator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_data_service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_data_service_imports.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_datasource_routing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_deep_analysis.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_degrades_without_quant_engine.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_doctor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_doctor_describes_the_current_install.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_doctor_npm_scope.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_engine_boundary.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_enterprise_tool_honesty.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_env_switch_docs.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_evals_harness.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_extended_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_feishu_swarm_config.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_finalize_release.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_finance_renderers.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_finance_service_catalog.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_first_run_works.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_football_agent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_football_prediction_output.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_google_cloud_routing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_google_login.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_google_search_provider.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_headless_is_agentic.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_honest_surfaces.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_image_gen_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_image_inputs.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_import_graph_budget.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_intent_signals.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_kling_video_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_lazy_rebind.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_legacy_module_imports.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_license_consistency.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_licensing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_local_image_provider.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_logistics_3pl.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_logistics_and_finance_agents.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_lsp.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_markdown_pdf.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_market_data_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_market_history_inheritance.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_market_history_tool.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_market_symbol_extraction.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_market_universe.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_mcp_circuit.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_mcp_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_model_capability_registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_model_choice_is_the_users.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_model_selection_state.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_native_binary_entrypoints.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_native_installer.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_new_modules.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_no_uncommitted_imports.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_ollama_stream_imports.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_ollama_stream_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_openai_image_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_operations_suite.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_output_rendering.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_packages_facade.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_packaging_constraints.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_packaging_manifest.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_packs_domains.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_pdf_report.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_pick_best_installed_model.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_plan_mode.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_platform_package_assembly.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_platform_packages.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_plotly_html_output.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_portfolio_ledger.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_post_turn_context_decision.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_preflight.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_preview_server.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_privacy_feedback.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_project_aria.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_project_review.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_project_review_api.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_prompt_assembly.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_prompt_selection.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_provider_autoconfig.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_provider_error_messages.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_provider_integration.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_provider_registry.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_public_service_status.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_quant_engine_namespace.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_rebind_contract.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_rebind_namespace_contract.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_relay_client_credentials.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_relay_event_verification.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_relay_sends_for_clients.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_relay_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_relay_url.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_release_commit_identity.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_release_push_is_atomic.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_release_reaches_the_registries.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_release_verification_waits.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_release_workflow_permissions.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_report_charts.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_report_generator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_research_protocol.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_research_quality.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_responsive_rendering.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_root_module_budget.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_rsi_without_pandas_ta.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_acceptance.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_agent_loop.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_approval.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_bridge.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_checkpoints.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_gateway.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_repo_map.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_run_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_tool_executor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runtime_worktrees.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_runway_video_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_safety_permissions.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_safety_service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_safety_service_adoption.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_service_diagnostics_security.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_session_search.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_settings_service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_shipper_digest.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_single_import_root.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_skill_agent_binding.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_skill_catalog.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_skill_loader.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_spreadsheet_tools.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_sse_stream_contract.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_startup_latency.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_streaming_pipeline.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_stripe_agent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_subagent.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_supervisor_routing.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_system_prompts.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_system_tools_output.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_task_orchestrator.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_team_synthesis.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_tls_trust_store.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_tool_policy.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_tool_scope.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_trading_service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_tradingview_bridge.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_turn_planning.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_ui_completer_references.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_ui_console_theme.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_ui_input_box.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_verification_hint.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_verification_policy.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_version_consistency.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_version_counter.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_video_analysis.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_video_editor.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_vscode_mcp.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_warehouse_agents.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_warehouse_cli_registration.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_warehouse_erp_client.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_warehouse_workflow.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_wheel_is_installable.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_workspace_changes.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_workspace_context.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_workspace_files.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_workspace_scope.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_workspace_service.py +0 -0
- {aria_code-0.76.0 → aria_code-0.78.0}/tests/test_workspace_verify.py +0 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aria-code
|
|
3
|
-
Version: 0.
|
|
4
|
-
Summary: Open-source AI agent for
|
|
3
|
+
Version: 0.78.0
|
|
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
|
|
7
7
|
Project-URL: Repository, https://github.com/artheras/aria-code
|
|
@@ -163,7 +163,7 @@ Dynamic: license-file
|
|
|
163
163
|
|
|
164
164
|
<h1 align="center">Aria Code</h1>
|
|
165
165
|
|
|
166
|
-
<p align="center">An open-source AI agent for
|
|
166
|
+
<p align="center">An open-source AI agent for coding, financial analysis and logistics operations.<br>
|
|
167
167
|
Numbers you can check, client data kept apart, actions a person approves.</p>
|
|
168
168
|
|
|
169
169
|
<p align="center"><a href="README_CN.md">简体中文</a> · English</p>
|
|
@@ -175,20 +175,33 @@ Numbers you can check, client data kept apart, actions a person approves.</p>
|
|
|
175
175
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-64748b?style=flat-square" alt="Apache License 2.0"></a>
|
|
176
176
|
</p>
|
|
177
177
|
|
|
178
|
-
<p align="center"><img src="docs/assets/demo-
|
|
179
|
-
<p align="center"><sub>
|
|
178
|
+
<p align="center"><img src="docs/assets/demo-coding.gif" alt="Real Aria Code session: Gemini 2.5 Pro writes fx.py and its tests, runs them after each step is approved, then /review checks the change" width="860"></p>
|
|
179
|
+
<p align="center"><sub>A real session on Gemini 2.5 Pro (Vertex AI): Aria writes <code>fx.py</code> and its tests, runs them once each step is approved, then <code>/review</code> checks the change and gives its verdict. Waiting is shortened; nothing else is changed. <a href="docs/assets/demo-coding.png">Still</a> · <a href="scripts/record_demo.py">Recorder</a> · <a href="scripts/render_demo.py">Renderer</a></sub></p>
|
|
180
180
|
|
|
181
181
|
## What Aria Code does
|
|
182
182
|
|
|
183
|
-
|
|
183
|
+
**Writes code and builds projects.** Describe the task in plain words. Aria reads the project, writes and edits files, runs commands and tests, and shows every change before it lands — nothing is written or run until you say yes. [`/review`](docs/code-review.md) reviews a change the way a careful colleague would: prioritised findings (P0–P3) with file and line, and a verdict; `aria-code review --base main --fail-on P1` gates a pull request in CI. Use a local Ollama model, Gemini on Google Cloud (Vertex AI, with nothing more than a `gcloud` login), or another supported provider.
|
|
184
184
|
|
|
185
|
-
**
|
|
185
|
+
**Analyses markets and finances.** Quotes, technical indicators, backtests with an HTML report, risk and factor analysis, SEC filings, and US, Hong Kong, A-share and crypto data. Results name their data source, period and any gaps.
|
|
186
|
+
|
|
187
|
+
<p align="center"><img src="docs/assets/demo-finance.gif" alt="Real Aria Code session: technical indicators for AAPL and a one-year momentum backtest on SPY, with data source, period and completeness stated" width="760"></p>
|
|
188
|
+
|
|
189
|
+
**Runs logistics operations.** For third-party logistics: reorder points, safety stock, ABC/XYZ classes, dead stock, carrier scorecards and freight anomalies — and in Feishu, a daily digest per shipper with approval cards.
|
|
190
|
+
|
|
191
|
+
<p align="center"><img src="docs/assets/demo-logistics.gif" alt="Real Aria Code session: a refusal to mix two shippers' data, reorder points for one shipper, and a carrier scorecard with a saving and two anomalies" width="760"></p>
|
|
192
|
+
<p align="center"><sub>Both recorded from real sessions — market data from yfinance; the logistics data is the sample 3PL in <code>evals/fixtures</code>, with no model call.</sub></p>
|
|
193
|
+
|
|
194
|
+
## How it works
|
|
195
|
+
|
|
196
|
+
A general-purpose assistant aims for an answer that reads well. In code, markets and warehouses the result gets acted on — a rounding rule in a currency function, one purchase order left out of a reorder quantity. Three rules follow from that.
|
|
197
|
+
|
|
198
|
+
**Numbers you can check.** Reorder points, safety stock, carrier rankings and backtests come from stated formulas and named data, with the formula and every assumption in the result — as does stablecoin settlement reconciliation, from the [Artheras skills](https://github.com/artheras/skills) Aria Code can install. When the data cannot support an answer — under 14 days of demand history, rows that name no shipper — it says so instead of estimating. The [`operations` eval suite](docs/verifiable-evals.md) checks exactly these traps.
|
|
186
199
|
|
|
187
200
|
**Client data kept apart.** A third-party logistics provider holds many clients' stock side by side. A chat group bound to one shipper confines every analysis to that shipper, and the logistics tools themselves refuse another shipper's data or an unattributable file — the rule holds below the prompt, whatever the model asks for.
|
|
188
201
|
|
|
189
|
-
**Actions a person approves.** In
|
|
202
|
+
**Actions a person approves.** In the terminal, every file write and command waits for your yes, with the diff in front of you. In Feishu, `/补货` turns the reorder list into a purchase-order draft card; nothing happens until an authorised approver presses approve, and what runs is exactly what was shown. The draft is a file for your own purchasing system — Aria Code places no orders.
|
|
190
203
|
|
|
191
|
-
|
|
204
|
+
A fresh install has no live business data: the logistics tools read your exports (CSV or JSON), market data comes from public sources, and the chat features need a Feishu app or the Aria relay.
|
|
192
205
|
|
|
193
206
|
## Quick start
|
|
194
207
|
|
|
@@ -210,6 +223,19 @@ The installer downloads the binary for your OS from the latest [GitHub release](
|
|
|
210
223
|
|
|
211
224
|
Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade "aria-code<4"` (requires Python 3.10+; the `<4` skips an older 4.x numbering that PyPI still lists). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
212
225
|
|
|
226
|
+
### Updates
|
|
227
|
+
|
|
228
|
+
Aria checks for a newer stable version in the background at startup, at most once per day. Cached notices appear immediately; network checks never delay the prompt. It checks GitHub Releases, or scoped npm for npm installs. Pip updates pin the GitHub version and verify that version is available on PyPI, avoiding the older 4.x numbering still listed as PyPI's latest. Source checkouts receive Git update instructions.
|
|
229
|
+
|
|
230
|
+
```bash
|
|
231
|
+
aria update --check # check without installing
|
|
232
|
+
aria update # install the newest stable version for this install channel
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
In an interactive session, use `/update --check` or `/update`, then restart Aria. Native updates verify SHA-256 and the downloaded binary's version before switching the command; a failed download or verification leaves the existing command in place. Startup checks only notify. To disable them, set `check_for_update_on_startup` to `false` in `~/.aria-code/config.json`.
|
|
236
|
+
|
|
237
|
+
For GitHub notifications, open [this repository](https://github.com/artheras/aria-code), select **Watch → Custom → Releases**, and save. Notifications follow your GitHub notification settings. Published stable releases appear on the [release page](https://github.com/artheras/aria-code/releases/latest) once the platform assets and package publishing have completed.
|
|
238
|
+
|
|
213
239
|
To use a local model, install [Ollama](https://ollama.com/download), pull a coding model, and start Aria in local-only mode:
|
|
214
240
|
|
|
215
241
|
```bash
|
|
@@ -231,7 +257,7 @@ Aria may request approval before editing files or running commands, according to
|
|
|
231
257
|
| --- | --- |
|
|
232
258
|
| Local Ollama | An installed and running Ollama model; no cloud account for local inference. |
|
|
233
259
|
| Direct cloud provider | That provider's API credentials and network access. |
|
|
234
|
-
| Direct Google Cloud Vertex AI | `
|
|
260
|
+
| Direct Google Cloud Vertex AI | `GOOGLE_CLOUD_PROJECT` and either a `gcloud auth login` (Aria uses Vertex AI's OpenAI-compatible endpoint with that login's token) or Application Default Credentials with `aria-code[google]`. `GOOGLE_CLOUD_LOCATION` defaults to `global`. |
|
|
235
261
|
| Arthera hosted service | Install `aria-code[google]` and sign in through `/login` in the CLI. Arthera account sign-in does not grant Vertex AI credentials to your own machine. |
|
|
236
262
|
|
|
237
263
|
Install extras only for features you use; see [pyproject.toml](pyproject.toml) for the current package options. Local inference can work offline, but live market data, remote integrations, sign-in, and cloud models cannot.
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<picture>
|
|
3
|
+
<source media="(prefers-color-scheme: dark)" srcset="docs/assets/aria-code-icon.png">
|
|
4
|
+
<img src="docs/assets/aria-code-icon-light.png" alt="Aria Code icon" width="88">
|
|
5
|
+
</picture>
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
<h1 align="center">Aria Code</h1>
|
|
9
|
+
|
|
10
|
+
<p align="center">An open-source AI agent for coding, financial analysis and logistics operations.<br>
|
|
11
|
+
Numbers you can check, client data kept apart, actions a person approves.</p>
|
|
12
|
+
|
|
13
|
+
<p align="center"><a href="README_CN.md">简体中文</a> · English</p>
|
|
14
|
+
|
|
15
|
+
<p align="center">
|
|
16
|
+
<a href="https://www.npmjs.com/package/@artheras/aria-code"><img src="https://img.shields.io/npm/v/@artheras/aria-code?style=flat-square&logo=npm&label=npm" alt="npm version"></a>
|
|
17
|
+
<a href="https://pypi.org/project/aria-code/"><img src="https://img.shields.io/pypi/v/aria-code?style=flat-square&logo=pypi&label=PyPI" alt="PyPI version"></a>
|
|
18
|
+
<a href="https://github.com/artheras/aria-code/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/artheras/aria-code/ci.yml?branch=main&style=flat-square&logo=githubactions&label=CI" alt="CI status"></a>
|
|
19
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-64748b?style=flat-square" alt="Apache License 2.0"></a>
|
|
20
|
+
</p>
|
|
21
|
+
|
|
22
|
+
<p align="center"><img src="docs/assets/demo-coding.gif" alt="Real Aria Code session: Gemini 2.5 Pro writes fx.py and its tests, runs them after each step is approved, then /review checks the change" width="860"></p>
|
|
23
|
+
<p align="center"><sub>A real session on Gemini 2.5 Pro (Vertex AI): Aria writes <code>fx.py</code> and its tests, runs them once each step is approved, then <code>/review</code> checks the change and gives its verdict. Waiting is shortened; nothing else is changed. <a href="docs/assets/demo-coding.png">Still</a> · <a href="scripts/record_demo.py">Recorder</a> · <a href="scripts/render_demo.py">Renderer</a></sub></p>
|
|
24
|
+
|
|
25
|
+
## What Aria Code does
|
|
26
|
+
|
|
27
|
+
**Writes code and builds projects.** Describe the task in plain words. Aria reads the project, writes and edits files, runs commands and tests, and shows every change before it lands — nothing is written or run until you say yes. [`/review`](docs/code-review.md) reviews a change the way a careful colleague would: prioritised findings (P0–P3) with file and line, and a verdict; `aria-code review --base main --fail-on P1` gates a pull request in CI. Use a local Ollama model, Gemini on Google Cloud (Vertex AI, with nothing more than a `gcloud` login), or another supported provider.
|
|
28
|
+
|
|
29
|
+
**Analyses markets and finances.** Quotes, technical indicators, backtests with an HTML report, risk and factor analysis, SEC filings, and US, Hong Kong, A-share and crypto data. Results name their data source, period and any gaps.
|
|
30
|
+
|
|
31
|
+
<p align="center"><img src="docs/assets/demo-finance.gif" alt="Real Aria Code session: technical indicators for AAPL and a one-year momentum backtest on SPY, with data source, period and completeness stated" width="760"></p>
|
|
32
|
+
|
|
33
|
+
**Runs logistics operations.** For third-party logistics: reorder points, safety stock, ABC/XYZ classes, dead stock, carrier scorecards and freight anomalies — and in Feishu, a daily digest per shipper with approval cards.
|
|
34
|
+
|
|
35
|
+
<p align="center"><img src="docs/assets/demo-logistics.gif" alt="Real Aria Code session: a refusal to mix two shippers' data, reorder points for one shipper, and a carrier scorecard with a saving and two anomalies" width="760"></p>
|
|
36
|
+
<p align="center"><sub>Both recorded from real sessions — market data from yfinance; the logistics data is the sample 3PL in <code>evals/fixtures</code>, with no model call.</sub></p>
|
|
37
|
+
|
|
38
|
+
## How it works
|
|
39
|
+
|
|
40
|
+
A general-purpose assistant aims for an answer that reads well. In code, markets and warehouses the result gets acted on — a rounding rule in a currency function, one purchase order left out of a reorder quantity. Three rules follow from that.
|
|
41
|
+
|
|
42
|
+
**Numbers you can check.** Reorder points, safety stock, carrier rankings and backtests come from stated formulas and named data, with the formula and every assumption in the result — as does stablecoin settlement reconciliation, from the [Artheras skills](https://github.com/artheras/skills) Aria Code can install. When the data cannot support an answer — under 14 days of demand history, rows that name no shipper — it says so instead of estimating. The [`operations` eval suite](docs/verifiable-evals.md) checks exactly these traps.
|
|
43
|
+
|
|
44
|
+
**Client data kept apart.** A third-party logistics provider holds many clients' stock side by side. A chat group bound to one shipper confines every analysis to that shipper, and the logistics tools themselves refuse another shipper's data or an unattributable file — the rule holds below the prompt, whatever the model asks for.
|
|
45
|
+
|
|
46
|
+
**Actions a person approves.** In the terminal, every file write and command waits for your yes, with the diff in front of you. In Feishu, `/补货` turns the reorder list into a purchase-order draft card; nothing happens until an authorised approver presses approve, and what runs is exactly what was shown. The draft is a file for your own purchasing system — Aria Code places no orders.
|
|
47
|
+
|
|
48
|
+
A fresh install has no live business data: the logistics tools read your exports (CSV or JSON), market data comes from public sources, and the chat features need a Feishu app or the Aria relay.
|
|
49
|
+
|
|
50
|
+
## Quick start
|
|
51
|
+
|
|
52
|
+
Install the standalone CLI on macOS or Linux without Python, Node.js, or npm:
|
|
53
|
+
|
|
54
|
+
```bash
|
|
55
|
+
curl -fsSL https://raw.githubusercontent.com/artheras/aria-code/main/scripts/install.sh | sh
|
|
56
|
+
~/.local/bin/aria
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
On Windows x64, run this in PowerShell:
|
|
60
|
+
|
|
61
|
+
```powershell
|
|
62
|
+
irm https://raw.githubusercontent.com/artheras/aria-code/main/scripts/install.ps1 | iex
|
|
63
|
+
aria
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The installer downloads the binary for your OS from the latest [GitHub release](https://github.com/artheras/aria-code/releases/latest), checks its SHA-256 digest, and installs it in your user account. Open a new terminal to start the interactive CLI with `aria`, `aria code`, or `aria-code`. Set `ARIA_CODE_VERSION=v0.55.0` to pin a release.
|
|
67
|
+
|
|
68
|
+
Alternative package-manager installs: `npm install -g @artheras/aria-code` (requires npm) or `python3 -m pip install --upgrade "aria-code<4"` (requires Python 3.10+; the `<4` skips an older 4.x numbering that PyPI still lists). For development from source, see [CONTRIBUTING.md](CONTRIBUTING.md).
|
|
69
|
+
|
|
70
|
+
### Updates
|
|
71
|
+
|
|
72
|
+
Aria checks for a newer stable version in the background at startup, at most once per day. Cached notices appear immediately; network checks never delay the prompt. It checks GitHub Releases, or scoped npm for npm installs. Pip updates pin the GitHub version and verify that version is available on PyPI, avoiding the older 4.x numbering still listed as PyPI's latest. Source checkouts receive Git update instructions.
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
aria update --check # check without installing
|
|
76
|
+
aria update # install the newest stable version for this install channel
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
In an interactive session, use `/update --check` or `/update`, then restart Aria. Native updates verify SHA-256 and the downloaded binary's version before switching the command; a failed download or verification leaves the existing command in place. Startup checks only notify. To disable them, set `check_for_update_on_startup` to `false` in `~/.aria-code/config.json`.
|
|
80
|
+
|
|
81
|
+
For GitHub notifications, open [this repository](https://github.com/artheras/aria-code), select **Watch → Custom → Releases**, and save. Notifications follow your GitHub notification settings. Published stable releases appear on the [release page](https://github.com/artheras/aria-code/releases/latest) once the platform assets and package publishing have completed.
|
|
82
|
+
|
|
83
|
+
To use a local model, install [Ollama](https://ollama.com/download), pull a coding model, and start Aria in local-only mode:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
ollama pull qwen2.5-coder:7b
|
|
87
|
+
aria-code --local
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Or run a single task in an existing project:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
aria-code -p "Inspect this project, fix the failing tests, run them, and summarize the diff."
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
Aria may request approval before editing files or running commands, according to the configured permission mode. Review changes and test results before committing them.
|
|
97
|
+
|
|
98
|
+
## Models and accounts
|
|
99
|
+
|
|
100
|
+
| Route | What it needs |
|
|
101
|
+
| --- | --- |
|
|
102
|
+
| Local Ollama | An installed and running Ollama model; no cloud account for local inference. |
|
|
103
|
+
| Direct cloud provider | That provider's API credentials and network access. |
|
|
104
|
+
| Direct Google Cloud Vertex AI | `GOOGLE_CLOUD_PROJECT` and either a `gcloud auth login` (Aria uses Vertex AI's OpenAI-compatible endpoint with that login's token) or Application Default Credentials with `aria-code[google]`. `GOOGLE_CLOUD_LOCATION` defaults to `global`. |
|
|
105
|
+
| Arthera hosted service | Install `aria-code[google]` and sign in through `/login` in the CLI. Arthera account sign-in does not grant Vertex AI credentials to your own machine. |
|
|
106
|
+
|
|
107
|
+
Install extras only for features you use; see [pyproject.toml](pyproject.toml) for the current package options. Local inference can work offline, but live market data, remote integrations, sign-in, and cloud models cannot.
|
|
108
|
+
|
|
109
|
+
## Explore the project
|
|
110
|
+
|
|
111
|
+
| Topic | Start here |
|
|
112
|
+
| --- | --- |
|
|
113
|
+
| Architecture and runtime | [Architecture](docs/architecture.md) |
|
|
114
|
+
| Tool permissions and data boundaries | [Safety notes](docs/aria-code-safety.md) |
|
|
115
|
+
| Warehouse agents and their read-only data contract | [Warehouse ERP agents](docs/warehouse-erp-agents.md) |
|
|
116
|
+
| Strategy and backtesting workflows | [Strategy workspace](docs/strategy_workspace.md) |
|
|
117
|
+
| More examples | [Examples](examples/README.md) |
|
|
118
|
+
| Releases and changes | [Changelog](CHANGELOG.md) |
|
|
119
|
+
|
|
120
|
+
For the current command-line flags, run `aria-code --help`. For help inside the interactive CLI, run `/help`. These are preferable to a copied command inventory that can drift from the product.
|
|
121
|
+
|
|
122
|
+
## Contributing and license
|
|
123
|
+
|
|
124
|
+
Contributions are welcome; see [CONTRIBUTING.md](CONTRIBUTING.md). Aria Code is open source under the [Apache License, Version 2.0](LICENSE).
|
|
125
|
+
|
|
126
|
+
Releases 4.2.0 through 4.4.5 were published under the Business Source License 1.1 and remain available under those terms; releases up to and including 4.1.2 were MIT. A license grant cannot be withdrawn from someone who already has it, so each version keeps the license it shipped with — see [NOTICE](NOTICE).
|
|
@@ -4,8 +4,8 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "aria-code"
|
|
7
|
-
version = "0.
|
|
8
|
-
description = "Open-source AI agent for
|
|
7
|
+
version = "0.78.0"
|
|
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" }
|
|
11
11
|
# Upper bound is real, not defensive: the core dep pandas_ta pulls numba, and
|
|
@@ -58,6 +58,33 @@ def disable_broken_proxy(timeout: float = 1.5) -> None:
|
|
|
58
58
|
os.environ.pop(name, None)
|
|
59
59
|
|
|
60
60
|
|
|
61
|
+
_LOOPBACK = ("localhost", "127.0.0.1", "::1")
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def ensure_loopback_bypasses_proxy() -> None:
|
|
65
|
+
"""With a proxy set, keep local services (Ollama, LM Studio, the API) off it.
|
|
66
|
+
|
|
67
|
+
HTTP clients honour HTTP(S)_PROXY, so a machine with a system proxy and no
|
|
68
|
+
NO_PROXY would send requests for localhost:11434 to the proxy and fail.
|
|
69
|
+
"""
|
|
70
|
+
if not any(os.environ.get(name) for name in ("HTTP_PROXY", "HTTPS_PROXY", "http_proxy", "https_proxy",
|
|
71
|
+
"ALL_PROXY", "all_proxy")):
|
|
72
|
+
return
|
|
73
|
+
current = os.environ.get("NO_PROXY") or os.environ.get("no_proxy") or ""
|
|
74
|
+
entries = [item.strip() for item in current.split(",") if item.strip()]
|
|
75
|
+
missing = [host for host in _LOOPBACK if host not in entries]
|
|
76
|
+
if missing:
|
|
77
|
+
value = ",".join(entries + missing)
|
|
78
|
+
os.environ["NO_PROXY"] = value
|
|
79
|
+
os.environ["no_proxy"] = value
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def prepare_network() -> None:
|
|
83
|
+
"""Proxy settings every entry point needs before its first request."""
|
|
84
|
+
disable_broken_proxy()
|
|
85
|
+
ensure_loopback_bypasses_proxy()
|
|
86
|
+
|
|
87
|
+
|
|
61
88
|
def use_system_trust_store() -> bool:
|
|
62
89
|
"""Verify TLS against the OS trust store instead of certifi's bundle.
|
|
63
90
|
|
|
@@ -105,7 +132,7 @@ def use_macos_ca_bundle() -> bool:
|
|
|
105
132
|
def initialize_cli_environment() -> None:
|
|
106
133
|
os.environ.setdefault("TQDM_DISABLE", "1")
|
|
107
134
|
load_aria_env()
|
|
108
|
-
|
|
135
|
+
prepare_network()
|
|
109
136
|
if not use_system_trust_store():
|
|
110
137
|
use_macos_ca_bundle()
|
|
111
138
|
|
|
@@ -99,7 +99,7 @@ class AuthCommandsMixin:
|
|
|
99
99
|
self.context.console.print("[dim]Authenticating...[/dim]")
|
|
100
100
|
|
|
101
101
|
try:
|
|
102
|
-
async with aiohttp.ClientSession() as session:
|
|
102
|
+
async with aiohttp.ClientSession(trust_env=True) as session:
|
|
103
103
|
async with session.post(
|
|
104
104
|
f"{self.terminal.api_url}/auth/login",
|
|
105
105
|
json={"email": email, "password": password},
|
|
@@ -81,11 +81,15 @@ def _bt_volume_summary(data: dict) -> dict:
|
|
|
81
81
|
return summary if isinstance(summary, dict) else {}
|
|
82
82
|
|
|
83
83
|
|
|
84
|
-
def _bt_result_summary(data: dict) -> str:
|
|
84
|
+
def _bt_result_summary(data: dict, lang: str = "zh") -> str:
|
|
85
85
|
total = _bt_num(data.get("total_return"))
|
|
86
86
|
benchmark = _bt_num(_bt_value(data, "buy_hold_return", "benchmark_return", default=0))
|
|
87
87
|
sharpe = _bt_num(data.get("sharpe_ratio"))
|
|
88
88
|
max_dd = _bt_num(data.get("max_drawdown"))
|
|
89
|
+
if not str(lang).lower().startswith("zh"):
|
|
90
|
+
relation = "above" if total > benchmark else "below" if total < benchmark else "level with"
|
|
91
|
+
return (f"Result: the strategy returned {_bt_pct(total)}, {relation} buy-and-hold at {_bt_pct(benchmark)}; "
|
|
92
|
+
f"Sharpe {sharpe:.2f}, max drawdown {_bt_pct(max_dd)}.")
|
|
89
93
|
relation = "高于" if total > benchmark else "低于" if total < benchmark else "持平"
|
|
90
94
|
return (
|
|
91
95
|
f"结论:策略收益 {_bt_pct(total)},{relation}买入持有 {_bt_pct(benchmark)};"
|
|
@@ -475,7 +479,7 @@ class BacktestCommandsMixin:
|
|
|
475
479
|
"include_monte_carlo": False,
|
|
476
480
|
}
|
|
477
481
|
try:
|
|
478
|
-
async with aiohttp.ClientSession() as sess:
|
|
482
|
+
async with aiohttp.ClientSession(trust_env=True) as sess:
|
|
479
483
|
async with sess.post(f"{api_url}/api/v1/backtest", json=payload, timeout=aiohttp.ClientTimeout(total=60)) as resp:
|
|
480
484
|
if resp.status == 200:
|
|
481
485
|
body = await resp.json()
|
|
@@ -542,7 +546,8 @@ class BacktestCommandsMixin:
|
|
|
542
546
|
for r in rows:
|
|
543
547
|
tbl.add_row(*r)
|
|
544
548
|
self.context.console.print(tbl)
|
|
545
|
-
self.context.console.print(
|
|
549
|
+
self.context.console.print(
|
|
550
|
+
f" [bold]{self._bt_result_summary(d, lang=self.terminal.config.get('ui_lang', 'en') or 'en')}[/bold]")
|
|
546
551
|
|
|
547
552
|
actual_start = self._bt_value(d, "start", "start_date", default=start_date)
|
|
548
553
|
actual_end = self._bt_value(d, "end", "end_date", default=end_date)
|
|
@@ -579,7 +584,11 @@ class BacktestCommandsMixin:
|
|
|
579
584
|
else " [#57606a]volume:[/#57606a] unavailable"
|
|
580
585
|
)
|
|
581
586
|
if d.get("report_path"):
|
|
582
|
-
|
|
587
|
+
_report = str(d["report_path"])
|
|
588
|
+
_home = str(pathlib.Path.home())
|
|
589
|
+
if _report.startswith(_home + os.sep):
|
|
590
|
+
_report = "~" + _report[len(_home):]
|
|
591
|
+
self.context.console.print(f" [#57606a]report:[/#57606a] {_report}")
|
|
583
592
|
if trades == 0:
|
|
584
593
|
self.context.console.print(
|
|
585
594
|
" [yellow]注意:[/yellow] # Trades 为 0,表示本次规则没有触发入场;"
|
|
@@ -675,7 +684,7 @@ class BacktestCommandsMixin:
|
|
|
675
684
|
"end_date": __import__("datetime").date.today().isoformat(),
|
|
676
685
|
"train_period_days": 252, "test_period_days": 63, "step_days": 21,
|
|
677
686
|
}
|
|
678
|
-
async with aiohttp.ClientSession() as sess:
|
|
687
|
+
async with aiohttp.ClientSession(trust_env=True) as sess:
|
|
679
688
|
async with sess.post(f"{api_url}/api/v1/backtest/walk-forward", json=payload, timeout=aiohttp.ClientTimeout(total=90)) as resp:
|
|
680
689
|
if resp.status != 200:
|
|
681
690
|
raise RuntimeError(f"HTTP {resp.status}")
|
{aria_code-0.76.0 → aria_code-0.78.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py
RENAMED
|
@@ -61,7 +61,7 @@ class BusinessWorkflowCommandsMixin:
|
|
|
61
61
|
api_url = self.terminal.config.get("api_url", "http://localhost:8000")
|
|
62
62
|
try:
|
|
63
63
|
import aiohttp
|
|
64
|
-
async with aiohttp.ClientSession() as sess:
|
|
64
|
+
async with aiohttp.ClientSession(trust_env=True) as sess:
|
|
65
65
|
async with sess.get(
|
|
66
66
|
f"{api_url}/api/realty/assets/{asset_id}",
|
|
67
67
|
timeout=aiohttp.ClientTimeout(total=5)
|
|
@@ -128,7 +128,7 @@ class BusinessWorkflowCommandsMixin:
|
|
|
128
128
|
rules = {}
|
|
129
129
|
try:
|
|
130
130
|
import aiohttp
|
|
131
|
-
async with aiohttp.ClientSession() as sess:
|
|
131
|
+
async with aiohttp.ClientSession(trust_env=True) as sess:
|
|
132
132
|
async with sess.get(f"{api_url}/api/realty/contracts/{project_id}",
|
|
133
133
|
timeout=aiohttp.ClientTimeout(total=5)) as resp:
|
|
134
134
|
if resp.status == 200:
|
|
@@ -153,7 +153,7 @@ class BusinessWorkflowCommandsMixin:
|
|
|
153
153
|
api_url = self.terminal.config.get("api_url", "http://localhost:8000")
|
|
154
154
|
try:
|
|
155
155
|
import aiohttp
|
|
156
|
-
async with aiohttp.ClientSession() as sess:
|
|
156
|
+
async with aiohttp.ClientSession(trust_env=True) as sess:
|
|
157
157
|
async with sess.get(
|
|
158
158
|
f"{api_url}/api/realty/risks/scan/{project_id}",
|
|
159
159
|
timeout=aiohttp.ClientTimeout(total=10)
|
|
@@ -174,7 +174,7 @@ class BusinessWorkflowCommandsMixin:
|
|
|
174
174
|
marketing_data = {}
|
|
175
175
|
try:
|
|
176
176
|
import aiohttp
|
|
177
|
-
async with aiohttp.ClientSession() as sess:
|
|
177
|
+
async with aiohttp.ClientSession(trust_env=True) as sess:
|
|
178
178
|
async with sess.get(
|
|
179
179
|
f"{api_url}/api/realty/assets/{project_id}",
|
|
180
180
|
timeout=aiohttp.ClientTimeout(total=5)
|
|
@@ -224,7 +224,7 @@ class BusinessWorkflowCommandsMixin:
|
|
|
224
224
|
"prepayment_received": 0, "renovation_cost": 0}
|
|
225
225
|
try:
|
|
226
226
|
import aiohttp
|
|
227
|
-
async with aiohttp.ClientSession() as sess:
|
|
227
|
+
async with aiohttp.ClientSession(trust_env=True) as sess:
|
|
228
228
|
async with sess.get(
|
|
229
229
|
f"{api_url}/api/realty/contracts/{project_id}",
|
|
230
230
|
timeout=aiohttp.ClientTimeout(total=5)
|
|
@@ -39,6 +39,12 @@ from typing import Dict, Any, Optional
|
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class CoreCommandsMixin:
|
|
42
|
+
async def cmd_update(self, args: str):
|
|
43
|
+
"""Use the same updater from the REPL and the shell."""
|
|
44
|
+
from aria_code.apps.cli.updater import main
|
|
45
|
+
|
|
46
|
+
await asyncio.to_thread(main, shlex.split(args))
|
|
47
|
+
|
|
42
48
|
def _cmd_rewind_unavailable(self, args: str):
|
|
43
49
|
# cmd_rewind lands with the checkpoint store (runtime/checkpoints.py,
|
|
44
50
|
# still a separate, uncommitted change) — degrade instead of crashing
|
|
@@ -194,7 +200,7 @@ class CoreCommandsMixin:
|
|
|
194
200
|
("Session", ["/help","/clear","/compact","/cost","/status","/health",
|
|
195
201
|
"/regen","/undo","/rewind","/copy","/recap","/btw",
|
|
196
202
|
"/save","/load","/sessions","/export","/export-pdf"]),
|
|
197
|
-
("Config", ["/model","/thinking","/config","/privacy","/local",
|
|
203
|
+
("Config", ["/model","/thinking","/config","/privacy","/local","/update",
|
|
198
204
|
"/setup","/apikey","/doctor","/mcp"]),
|
|
199
205
|
("Data", ["/alert","/journal","/watch","/note","/todo","/memory",
|
|
200
206
|
"/artifacts","/strategy","/accuracy"]),
|
|
@@ -869,15 +875,11 @@ class CoreCommandsMixin:
|
|
|
869
875
|
else:
|
|
870
876
|
print(f"Generating: {description}")
|
|
871
877
|
|
|
872
|
-
#
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
878
|
+
# The configured model writes the code. This used to switch to
|
|
879
|
+
# qwen2.5:7b for the call, whatever the user had chosen — a Gemini or
|
|
880
|
+
# Claude user got a small local model, or an error without Ollama.
|
|
876
881
|
await self.terminal.send_message(prompt)
|
|
877
882
|
|
|
878
|
-
# Restore model
|
|
879
|
-
self.terminal.config["model"] = original_model
|
|
880
|
-
|
|
881
883
|
# Extract code from last AI response and save if requested
|
|
882
884
|
if save_path or description:
|
|
883
885
|
last_response = ""
|
|
@@ -986,7 +988,7 @@ class CoreCommandsMixin:
|
|
|
986
988
|
"response_id": self.terminal.session_id, # latest-in-session match
|
|
987
989
|
"value": comment or None,
|
|
988
990
|
}
|
|
989
|
-
async with aiohttp.ClientSession() as session:
|
|
991
|
+
async with aiohttp.ClientSession(trust_env=True) as session:
|
|
990
992
|
async with session.post(
|
|
991
993
|
f"{self.terminal.api_url}/feedback",
|
|
992
994
|
json=payload,
|
|
@@ -2322,13 +2324,15 @@ class CoreCommandsMixin:
|
|
|
2322
2324
|
from aria_cli import _generate_chart_sync, parse_technical_args, print_ta_result
|
|
2323
2325
|
from aria_code.ui.render.output import display_path as _display_path
|
|
2324
2326
|
from aria_code.apps.cli.helpers import _chart_period_from_ta_days, _display_value
|
|
2327
|
+
zh = str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh")
|
|
2328
|
+
T = (lambda zh_text, en_text: zh_text) if zh else (lambda zh_text, en_text: en_text)
|
|
2325
2329
|
parsed = parse_technical_args(args)
|
|
2326
2330
|
symbol = parsed.symbol
|
|
2327
2331
|
days = parsed.days
|
|
2328
2332
|
|
|
2329
2333
|
service_result = None
|
|
2330
2334
|
if self.context.has_rich:
|
|
2331
|
-
with self.context.console.status(f"[dim]计算 {symbol}
|
|
2335
|
+
with self.context.console.status(f"[dim]{T(f'计算 {symbol} 技术指标', f'Calculating {symbol} indicators')}...[/dim]", spinner="dots"):
|
|
2332
2336
|
from packages.aria_services.data import DataService
|
|
2333
2337
|
service_result = DataService().technical_indicators(symbol, days=days)
|
|
2334
2338
|
else:
|
|
@@ -2343,16 +2347,19 @@ class CoreCommandsMixin:
|
|
|
2343
2347
|
# Show current price when we have partial data (e.g. new IPO with 1 bar)
|
|
2344
2348
|
_price_line = ""
|
|
2345
2349
|
if _ta_data.get("price"):
|
|
2346
|
-
_price_line = f" 当前价格 [bold]{_display_value(_ta_data['price'])}[/bold]"
|
|
2350
|
+
_price_line = f" {T('当前价格', 'Price')} [bold]{_display_value(_ta_data['price'])}[/bold]"
|
|
2347
2351
|
if _ta_data.get("history_bars"):
|
|
2348
|
-
_price_line += f" [dim]({_ta_data['history_bars']} 个交易日数据)[/dim]"
|
|
2352
|
+
_price_line += f" [dim]({_ta_data['history_bars']} {T('个交易日数据', 'trading days of data')})[/dim]"
|
|
2349
2353
|
_price_line += "\n"
|
|
2350
2354
|
if "数据不足" in _all_msgs or "新上市" in _all_msgs:
|
|
2351
|
-
_reason =
|
|
2355
|
+
_reason = T(
|
|
2356
|
+
f"[yellow]历史数据不足[/yellow] — {symbol} 上市时间较短(< 14 个交易日),TA 指标无法计算\n [dim]可待更多交易日积累后重试,或运行 `/analyze {symbol}` 查看基本面[/dim]",
|
|
2357
|
+
f"[yellow]Not enough history[/yellow] — {symbol} has fewer than 14 trading days, so indicators cannot be computed\n [dim]Try again later, or run `/analyze {symbol}` for fundamentals[/dim]")
|
|
2352
2358
|
elif "rate" in _all_msgs or "429" in _all_msgs or "too many" in _all_msgs:
|
|
2353
|
-
_reason = "[yellow]数据源频率限制[/yellow] — 稍后重试,或用 `/apikey set finnhub <KEY>` 切换数据源"
|
|
2359
|
+
_reason = T("[yellow]数据源频率限制[/yellow] — 稍后重试,或用 `/apikey set finnhub <KEY>` 切换数据源",
|
|
2360
|
+
"[yellow]Rate-limited by the data source[/yellow] — retry later, or switch sources with `/apikey set finnhub <KEY>`")
|
|
2354
2361
|
else:
|
|
2355
|
-
_err = "; ".join(_ta_errs or _ta_warns) or "数据源暂时不可用"
|
|
2362
|
+
_err = "; ".join(_ta_errs or _ta_warns) or T("数据源暂时不可用", "data source temporarily unavailable")
|
|
2356
2363
|
_reason = f"[red]{_err[:120]}[/red]"
|
|
2357
2364
|
if _missing:
|
|
2358
2365
|
_reason += f" [dim]missing: {_missing}[/dim]"
|
|
@@ -2372,6 +2379,7 @@ class CoreCommandsMixin:
|
|
|
2372
2379
|
days=days,
|
|
2373
2380
|
service_result=service_result,
|
|
2374
2381
|
formatter=_display_value,
|
|
2382
|
+
lang="zh" if zh else "en",
|
|
2375
2383
|
)
|
|
2376
2384
|
|
|
2377
2385
|
period = _chart_period_from_ta_days(days)
|
|
@@ -2383,12 +2391,12 @@ class CoreCommandsMixin:
|
|
|
2383
2391
|
}
|
|
2384
2392
|
chart_result = None
|
|
2385
2393
|
if self.context.has_rich:
|
|
2386
|
-
with self.context.console.status(f"[dim]生成 {symbol} 技术图表 HTML/PNG...[/dim]", spinner="dots"):
|
|
2394
|
+
with self.context.console.status(f"[dim]{T(f'生成 {symbol} 技术图表', f'Drawing the {symbol} chart')} HTML/PNG...[/dim]", spinner="dots"):
|
|
2387
2395
|
chart_result = await asyncio.get_event_loop().run_in_executor(
|
|
2388
2396
|
None, lambda: _generate_chart_sync(symbol, period=period)
|
|
2389
2397
|
)
|
|
2390
2398
|
else:
|
|
2391
|
-
print(f" 生成 {symbol} 技术图表 HTML/PNG...")
|
|
2399
|
+
print(f" {T(f'生成 {symbol} 技术图表', f'Drawing the {symbol} chart')} HTML/PNG...")
|
|
2392
2400
|
chart_result = await asyncio.get_event_loop().run_in_executor(
|
|
2393
2401
|
None, lambda: _generate_chart_sync(symbol, period=period)
|
|
2394
2402
|
)
|
|
@@ -2407,27 +2415,27 @@ class CoreCommandsMixin:
|
|
|
2407
2415
|
}
|
|
2408
2416
|
if self.context.has_rich:
|
|
2409
2417
|
self.context.console.print()
|
|
2410
|
-
self.context.console.print(" [green]✓[/green] 技术图表已生成")
|
|
2418
|
+
self.context.console.print(f" [green]✓[/green] {T('技术图表已生成', 'Chart saved')}")
|
|
2411
2419
|
if html_path:
|
|
2412
2420
|
self.context.console.print(f" [dim]HTML:[/dim] [link={html_path}]{_display_path(html_path)}[/link]")
|
|
2413
2421
|
if png_path:
|
|
2414
2422
|
self.context.console.print(f" [dim]PNG :[/dim] [link={png_path}]{_display_path(png_path)}[/link]")
|
|
2415
2423
|
elif png_error:
|
|
2416
|
-
self.context.console.print(f" [yellow]PNG
|
|
2424
|
+
self.context.console.print(f" [yellow]{T('PNG 跳过', 'PNG skipped')}:[/yellow] {png_error[:90]}")
|
|
2417
2425
|
else:
|
|
2418
|
-
print("\n 技术图表已生成")
|
|
2426
|
+
print(f"\n {T('技术图表已生成', 'Chart saved')}")
|
|
2419
2427
|
if html_path:
|
|
2420
2428
|
print(f" HTML: {_display_path(html_path)}")
|
|
2421
2429
|
if png_path:
|
|
2422
2430
|
print(f" PNG : {_display_path(png_path)}")
|
|
2423
2431
|
elif png_error:
|
|
2424
|
-
print(f" PNG
|
|
2432
|
+
print(f" {T('PNG 跳过', 'PNG skipped')}: {png_error[:90]}")
|
|
2425
2433
|
elif chart_result:
|
|
2426
|
-
err = chart_result.get("error") or "图表生成失败"
|
|
2434
|
+
err = chart_result.get("error") or T("图表生成失败", "chart failed")
|
|
2427
2435
|
if self.context.has_rich:
|
|
2428
|
-
self.context.console.print(f" [yellow]
|
|
2436
|
+
self.context.console.print(f" [yellow]{T('图表生成跳过', 'Chart skipped')}:[/yellow] {err[:120]}")
|
|
2429
2437
|
else:
|
|
2430
|
-
print(f"
|
|
2438
|
+
print(f" {T('图表生成跳过', 'Chart skipped')}: {err[:120]}")
|
|
2431
2439
|
def _extract_last_code(self) -> str:
|
|
2432
2440
|
"""从对话历史中提取最后一段 Python 代码块."""
|
|
2433
2441
|
import re
|
|
@@ -356,7 +356,7 @@ class DataCommandsMixin:
|
|
|
356
356
|
async def _do():
|
|
357
357
|
payload = {"symbol": symbol, "strategies": _STRATS,
|
|
358
358
|
"start_date": start, "end_date": end, "initial_capital": 100000, "commission_rate": 0.0003}
|
|
359
|
-
async with aiohttp.ClientSession() as sess:
|
|
359
|
+
async with aiohttp.ClientSession(trust_env=True) as sess:
|
|
360
360
|
async with sess.post(f"{api_url}/api/v1/backtest/compare-strategies", json=payload, timeout=aiohttp.ClientTimeout(total=90)) as resp:
|
|
361
361
|
if resp.status != 200:
|
|
362
362
|
raise RuntimeError(f"HTTP {resp.status}")
|
|
@@ -238,7 +238,7 @@ class DiagnosticCommandsMixin:
|
|
|
238
238
|
print(f" ? {message}")
|
|
239
239
|
for label, url, path in urls:
|
|
240
240
|
try:
|
|
241
|
-
async with aiohttp.ClientSession() as session:
|
|
241
|
+
async with aiohttp.ClientSession(trust_env=True) as session:
|
|
242
242
|
async with session.get(f"{str(url).rstrip('/')}{path}", timeout=aiohttp.ClientTimeout(total=5)) as resp:
|
|
243
243
|
resp.raise_for_status()
|
|
244
244
|
data = await resp.json()
|