aria-code 0.85.0__tar.gz → 0.87.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.85.0/src/aria_code.egg-info → aria_code-0.87.0}/PKG-INFO +1 -1
- {aria_code-0.85.0 → aria_code-0.87.0}/pyproject.toml +1 -1
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/_version.py +1 -1
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/core_cmds.py +28 -16
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/market.py +121 -14
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/market_cmds.py +20 -2
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/handlers/market_handlers.py +14 -14
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/prompts/system_prompts.py +2 -2
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/aria_cli.py +71 -1
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/completer.py +62 -17
- aria_code-0.87.0/src/aria_code/ui/mentions.py +206 -0
- {aria_code-0.85.0 → aria_code-0.87.0/src/aria_code.egg-info}/PKG-INFO +1 -1
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code.egg-info/SOURCES.txt +5 -0
- aria_code-0.87.0/tests/test_data_without_model.py +53 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_market_answers_in_english.py +20 -2
- aria_code-0.87.0/tests/test_mentions.py +62 -0
- aria_code-0.87.0/tests/test_natural_language_routing.py +118 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_output_rendering.py +5 -4
- aria_code-0.87.0/tests/test_platform_publish.py +95 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ui_completer_references.py +7 -8
- {aria_code-0.85.0 → aria_code-0.87.0}/LICENSE +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/NOTICE +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/README.md +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/setup.cfg +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/adk_apps/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/base.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/code_review.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/critic.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/deepen.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/models.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/pipeline.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/themes.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/deep/tiers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/engineering/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/engineering/coder.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/engineering/tester.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/catalyst.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/debate.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/earnings.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/fundamental.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/macro.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/news.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/risk.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/sector.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/strategist.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/synthesis.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/financial/technical.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/orchestrator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/portfolio_agent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/business_match.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/signal_scheme.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/sports/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/sports/football_agent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/supervisor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/team.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/aliyun_data_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/README.md +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/channels/README.md +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/channels/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/channels/approvals.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/channels/conversation.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/channels/digest.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/channels/intake.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/channels/registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/channels/tradingview.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/README.md +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/_optional.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/broker_render.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/team.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/config_paths.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/config_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/constants.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/context.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/deterministic.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/direct.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/football_reports.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/google_login.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/helpers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/hooks.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/i18n.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/intent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/intent_router.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/main.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/market_hours.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/market_universe.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/message_processing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/preflight.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/project_aria.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/base.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/review_runner.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/sandbox.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/session_export.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/session_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tools/context.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/update_check.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/updater.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/daemon/README.md +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/vscode/README.md +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/apps/vscode/package.json +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/aria_daemon.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/aria_feishu_bot.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/aria_mcp_server.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/aria_relay_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/aria_relay_server.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/aria_telegram_bot.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ariarc.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/artifacts.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/backtest_engine.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/backtest_report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/automation.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/base.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/capabilities.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/cn/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/config.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/intl/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/paper_broker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/planning.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/brokers/trading.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/canva_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/change_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/aria_relay_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/canva_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/figma_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/football_data_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/kling_video_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/market_data_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/openai_image_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/runway_video_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/cloud_memory.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/command_safety.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/computer_use_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/dashboard_generator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/data_analysis_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/data_cleaner.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/data_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/base.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/router.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/demo_player.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/doctor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/domain/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/domain/backtest_engine.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/domain/backtest_report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/domain/finance_formulas.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/domain/strategy_vault.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/evals/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/evals/harness.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/evals/runner.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/external_agent_runner.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/figma_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/file_analysis_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/finance_formulas.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/football_data_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/image_gen_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/intent_classifier.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/kling_video_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/licensing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/local_finance_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/local_image_provider.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/local_llm_provider.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/macro_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/markdown_pdf.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/market_data_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/mcp_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/memory_manager.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/model_capability.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/notification_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/openai_image_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_core/export.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_core/paths.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_infra/product.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/cache.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/context.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/data.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/references.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/settings.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_services/usage.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packs/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packs/base.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packs/finance/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packs/logistics/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packs/payments/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packs/realty/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packs/registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/packs/rules.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/plan_utils.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/plugin_loader.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/portfolio_ledger.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/preview_server.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/privacy/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/privacy/feedback.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/project_review.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/project_review_api.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/project_review_server.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/project_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/llm/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/llm/anthropic.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/llm/base.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/llm/custom.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/llm/ollama.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/llm/registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/local_image_provider.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/local_llm_provider.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/providers/tool_messages.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/realty_data_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/relay_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/report_exporters.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/report_generator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/review_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/acceptance.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/agent_loop.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/approval.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/budget.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/checkpoints.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/crash_report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/events.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/gateway.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/lsp.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/orchestrator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/repo_map.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/run_state.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/run_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/self_healing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/subagent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/task_ledger.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/tool_executor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/tool_policy.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runtime/worktrees.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/runway_video_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/safety/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/safety/permissions.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/safety/service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/setup_wizard.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/spreadsheet_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/strategy_vault.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/artifact_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/broker_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/build_quant_engine.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/code_audit_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/computer_use_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/extended_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/image_gen_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/local_finance_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/logistics_carriers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/logistics_inventory.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/logistics_io.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/logistics_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/macro_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/notification_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/project_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/realty_data_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/tools/stripe_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/banner.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/console.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/image_render.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/input_box.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/picker.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/render/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/render/finance.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/render/market.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/render/output.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/render/responsive.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/render/team.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/robot.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/ui/startup_dashboard.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/utils/vscode_uri.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/video_analysis.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/video_editor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/workspace/__init__.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/workspace/files.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/workspace/verify.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/workspace_changes.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/workspace_context.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/workspace_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code/workspace_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code.egg-info/entry_points.txt +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code.egg-info/requires.txt +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/src/aria_code.egg-info/top_level.txt +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_adk_market_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_agent_team_fallback.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_analyze_file_tool.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_architecture_ledger_is_true.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_architecture_report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_aria_cli_core.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_aria_mcp_server.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_aria_sdk.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_artifact_publishing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_artifacts_and_reports.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ashare_prediction_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_backtest_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_backtest_engine.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_backtest_report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_broken_akshare_is_optional.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_broker_automation.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_broker_chat_confirm_gate.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_broker_planning.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_broker_safety.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_broker_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_budget.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_business_workflow_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_canva_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_canvas_cmds.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_card_approvals.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_channel_intake.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_channels.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_chart_handlers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_chat_bots_fail_closed.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_chat_routing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ci_security_workflow.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_cli_app_split.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_cli_bootstrap.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_cli_config_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_cli_lifecycle_hooks.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_cli_runtime_consumer.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_cli_tool_executor_module.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_cli_updater.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_cloud_memory.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_code_audit_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_code_review_agent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_codegen_output.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_coder_tester_self_healing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_coder_tool_safety.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_collaboration.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_command_loggers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_command_safety.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_completions_builder.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_config_paths.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_configured_provider.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_container_entrypoint.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_container_entrypoints.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_context_checkpoints.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_context_references.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_context_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_conversation_core.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_crash_report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_credential_file_permissions.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_custom_providers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_daemon_gateway_config.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_dashboard_generator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_data_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_data_service_imports.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_datasource_routing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_deep_analysis.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_degrades_without_quant_engine.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_doctor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_doctor_describes_the_current_install.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_doctor_npm_scope.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_engine_boundary.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_enterprise_tool_honesty.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_env_switch_docs.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_evals_harness.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_event_import_roots.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_extended_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_feishu_swarm_config.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_finalize_release.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_finance_renderers.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_finance_service_catalog.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_first_run_output.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_first_run_works.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_football_agent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_football_prediction_output.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_google_cloud_models.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_google_cloud_routing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_google_login.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_google_search_provider.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_headless_is_agentic.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_honest_surfaces.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_image_gen_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_image_inputs.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_import_graph_budget.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_intent_router.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_intent_signals.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_kling_video_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_lazy_rebind.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_legacy_module_imports.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_license_consistency.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_licensing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_local_image_provider.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_logistics_3pl.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_logistics_and_finance_agents.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_lsp.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_markdown_pdf.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_market_data_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_market_history_inheritance.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_market_history_tool.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_market_hours.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_market_questions_on_backend.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_market_symbol_extraction.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_market_universe.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_mcp_circuit.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_mcp_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_model_capability_registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_model_choice_is_the_users.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_model_selection_state.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_native_binary_entrypoints.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_native_installer.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_new_modules.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_no_uncommitted_imports.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_numeric_listings.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ollama_stream_imports.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ollama_stream_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_openai_image_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_operations_suite.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_packages_facade.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_packaging_constraints.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_packaging_manifest.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_packs_domains.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_pdf_report.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_pick_best_installed_model.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_plan_mode.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_platform_package_assembly.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_platform_packages.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_plotly_html_output.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_portfolio_ledger.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_post_turn_context_decision.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_preflight.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_preview_server.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_privacy_feedback.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_project_aria.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_project_review.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_project_review_api.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_prompt_assembly.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_prompt_selection.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_provider_autoconfig.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_provider_error_messages.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_provider_integration.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_provider_registry.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_public_service_status.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_quant_engine_namespace.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_rebind_contract.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_rebind_namespace_contract.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_relay_client_credentials.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_relay_event_verification.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_relay_sends_for_clients.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_relay_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_relay_url.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_release_chain.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_release_commit_identity.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_release_push_is_atomic.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_release_reaches_the_registries.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_release_verification_waits.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_release_workflow_permissions.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_report_charts.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_report_generator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_research_protocol.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_research_quality.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_responsive_rendering.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_review_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_root_module_budget.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_rsi_without_pandas_ta.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_acceptance.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_agent_loop.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_approval.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_bridge.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_bridge_fallback.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_checkpoints.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_event_identity.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_gateway.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_repo_map.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_run_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_tool_executor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runtime_worktrees.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_runway_video_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_safety_permissions.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_safety_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_safety_service_adoption.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_service_diagnostics_security.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_session_search.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_settings_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_shipper_digest.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_single_import_root.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_skill_agent_binding.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_skill_catalog.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_skill_loader.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_slash_popup.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_spreadsheet_tools.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_sse_stream_contract.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_startup_dashboard.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_startup_latency.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_status_language.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_streaming_pipeline.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_stripe_agent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_subagent.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_supervisor_routing.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_system_prompts.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_system_tools_output.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_task_orchestrator.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_team_synthesis.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_tls_trust_store.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_tool_policy.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_tool_scope.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_tool_step_output.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_trading_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_tradingview_bridge.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_turn_planning.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ui_console_theme.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ui_input_box.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ui_language_and_model.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_ui_robot_banner.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_update_health_routes.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_verification_hint.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_verification_policy.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_version_consistency.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_version_counter.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_video_analysis.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_video_editor.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_vscode_mcp.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_warehouse_agents.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_warehouse_cli_registration.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_warehouse_erp_client.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_warehouse_workflow.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_wheel_is_installable.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_workspace_changes.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_workspace_context.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_workspace_files.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_workspace_scope.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_workspace_service.py +0 -0
- {aria_code-0.85.0 → aria_code-0.87.0}/tests/test_workspace_verify.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aria-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.87.0
|
|
4
4
|
Summary: Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Project-URL: Homepage, https://github.com/artheras/aria-code
|
|
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "aria-code"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.87.0"
|
|
8
8
|
description = "Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = { text = "Apache-2.0" }
|
|
@@ -2187,28 +2187,40 @@ class CoreCommandsMixin:
|
|
|
2187
2187
|
"resistance": res3,
|
|
2188
2188
|
},
|
|
2189
2189
|
}
|
|
2190
|
+
# The summary was Chinese whatever the UI language ("趋势: 偏多 …
|
|
2191
|
+
# 自审通过"); the trend value itself comes from the chart in Chinese.
|
|
2192
|
+
_zh = str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh")
|
|
2193
|
+
_T = (lambda a, b: a) if _zh else (lambda a, b: b)
|
|
2194
|
+
_trend = str(result.get("trend") or "—")
|
|
2195
|
+
if not _zh:
|
|
2196
|
+
_trend = {"偏多": "bullish", "偏空": "bearish", "震荡": "range-bound",
|
|
2197
|
+
"震荡/中性": "range-bound"}.get(_trend, _trend)
|
|
2198
|
+
_summary = (
|
|
2199
|
+
f"{display_label} {_T('趋势', 'trend')}: {_trend} "
|
|
2200
|
+
f"RSI: {f'{rsi_val:.1f}' if rsi_val else '—'} "
|
|
2201
|
+
f"{_T('支撑', 'support')}: {'/'.join(str(v) for v in sup3) or '—'} "
|
|
2202
|
+
f"{_T('阻力', 'resistance')}: {'/'.join(str(v) for v in res3) or '—'} "
|
|
2203
|
+
f"{_T('数据', 'source')}: {provider}"
|
|
2204
|
+
)
|
|
2205
|
+
_issues_head = _T(f"自审发现 {len(issues)} 个问题:", f"self-check found {len(issues)} issue(s):")
|
|
2206
|
+
_clean = _T("自审通过(数据质量正常)", "self-check passed (data quality normal)")
|
|
2190
2207
|
if self.context.has_rich:
|
|
2191
|
-
|
|
2192
|
-
|
|
2193
|
-
self.context.console.print(
|
|
2194
|
-
|
|
2195
|
-
|
|
2196
|
-
f"RSI: {f'{rsi_val:.1f}' if rsi_val else '—'} "
|
|
2197
|
-
f"支撑: {'/'.join(str(v) for v in sup3) or '—'} "
|
|
2198
|
-
f"阻力: {'/'.join(str(v) for v in res3) or '—'} "
|
|
2199
|
-
f"数据: {provider}[/dim]"
|
|
2200
|
-
)
|
|
2208
|
+
from rich.markup import escape as _esc
|
|
2209
|
+
|
|
2210
|
+
self.context.console.print(f" [green]✓[/green] {_T('图表已生成', 'chart generated')} [dim]({elapsed_ms}ms)[/dim]")
|
|
2211
|
+
self.context.console.print(f" {_T('已保存', 'saved')}: [link={path}]{path_label}[/link]")
|
|
2212
|
+
self.context.console.print(f" [dim]{_esc(_summary)}[/dim]")
|
|
2201
2213
|
if issues:
|
|
2202
|
-
self.context.console.print(f" [yellow]⚠
|
|
2214
|
+
self.context.console.print(f" [yellow]⚠ {_issues_head}[/yellow]")
|
|
2203
2215
|
for iss in issues:
|
|
2204
|
-
self.context.console.print(f" [yellow]· {iss}[/yellow]")
|
|
2216
|
+
self.context.console.print(f" [yellow]· {_esc(str(iss))}[/yellow]")
|
|
2205
2217
|
else:
|
|
2206
|
-
self.context.console.print(" [green dim]✓
|
|
2218
|
+
self.context.console.print(f" [green dim]✓ {_clean}[/green dim]")
|
|
2207
2219
|
else:
|
|
2208
|
-
print(f" OK chart generated ({elapsed_ms}ms): {path_label}")
|
|
2209
|
-
print(f" {
|
|
2220
|
+
print(f" OK {_T('图表已生成', 'chart generated')} ({elapsed_ms}ms): {path_label}")
|
|
2221
|
+
print(f" {_summary}")
|
|
2210
2222
|
if issues:
|
|
2211
|
-
print(f" ⚠
|
|
2223
|
+
print(f" ⚠ {_issues_head}")
|
|
2212
2224
|
for iss in issues:
|
|
2213
2225
|
print(f" · {iss}")
|
|
2214
2226
|
import subprocess as _sp
|
|
@@ -6,6 +6,7 @@ CLI, Feishu, and future gateway adapters can share the same command semantics.
|
|
|
6
6
|
|
|
7
7
|
from __future__ import annotations
|
|
8
8
|
|
|
9
|
+
import re
|
|
9
10
|
from dataclasses import dataclass
|
|
10
11
|
from typing import Mapping
|
|
11
12
|
|
|
@@ -56,13 +57,13 @@ _DASHBOARD_MODE_HINTS: tuple[tuple[tuple[str, ...], str], ...] = (
|
|
|
56
57
|
)
|
|
57
58
|
|
|
58
59
|
_CHART_PERIOD_HINTS: tuple[tuple[tuple[str, ...], str], ...] = (
|
|
59
|
-
(("
|
|
60
|
-
(("
|
|
61
|
-
(("
|
|
62
|
-
(("
|
|
63
|
-
(("
|
|
64
|
-
(("
|
|
65
|
-
(("
|
|
60
|
+
(("近三个月", "三个月", "3m", "3个月", "3 months", "three months", "3-month", "quarter"), "3m"),
|
|
61
|
+
(("近六个月", "六个月", "6m", "6个月", "6 months", "six months", "6-month", "half a year"), "6m"),
|
|
62
|
+
(("年初至今", "ytd", "year to date"), "ytd"),
|
|
63
|
+
(("两年", "2y", "2 years", "two years"), "2y"),
|
|
64
|
+
(("三年", "3y", "3 years", "three years"), "3y"),
|
|
65
|
+
(("五年", "5y", "5 years", "five years"), "5y"),
|
|
66
|
+
(("近一年", "一年", "1y", "1年", "1 year", "one year", "a year", "12 months"), "1y"),
|
|
66
67
|
)
|
|
67
68
|
|
|
68
69
|
_REPORT_TYPE_HINTS: tuple[tuple[tuple[str, ...], str], ...] = (
|
|
@@ -80,7 +81,13 @@ _TRADINGVIEW_ANALYSIS_HINTS = (
|
|
|
80
81
|
"指标", "信号", "analyze", "analysis", "data", "indicator", "signal",
|
|
81
82
|
)
|
|
82
83
|
|
|
83
|
-
_ROUTE_SYMBOL_BLOCKLIST = {
|
|
84
|
+
_ROUTE_SYMBOL_BLOCKLIST = {
|
|
85
|
+
"K", "LINE", "CHART", "PLOT",
|
|
86
|
+
# Product and engineering acronyms, typed in capitals and almost never a
|
|
87
|
+
# ticker in a message: "news app UI design ideas" ran `/news UI`.
|
|
88
|
+
"UI", "UX", "API", "CLI", "SDK", "URL", "PDF", "CSS", "HTML", "SQL", "JSON", "CSV", "IDE",
|
|
89
|
+
"OS", "PR", "QA", "CI", "CD", "MVP", "LLM", "GPU", "CPU", "RAM", "SSD", "DB",
|
|
90
|
+
}
|
|
84
91
|
_CHART_CONTEXT_TOKEN_BLOCKLIST = {
|
|
85
92
|
"ABOVE", "BELOW", "INC", "TTM", "RATIO", "SIGNAL", "SUPPORT", "RESIST",
|
|
86
93
|
"RESISTANCE", "LEVEL", "LEVELS", "HIGH", "LOW", "OPEN", "CLOSE", "AVG",
|
|
@@ -115,8 +122,31 @@ def _news_topic(text: str, symbols: list[str]) -> str:
|
|
|
115
122
|
return symbols[0] if symbols else text
|
|
116
123
|
|
|
117
124
|
|
|
125
|
+
def _known_tickers() -> frozenset[str]:
|
|
126
|
+
"""Tickers Aria knows by name — the company table's values."""
|
|
127
|
+
global _KNOWN_TICKERS
|
|
128
|
+
if _KNOWN_TICKERS is None:
|
|
129
|
+
try:
|
|
130
|
+
from aria_code.apps.cli.utils.market_detect import _COMPANY_TO_TICKER
|
|
131
|
+
|
|
132
|
+
_KNOWN_TICKERS = frozenset(str(v).upper() for v in _COMPANY_TO_TICKER.values() if v)
|
|
133
|
+
except Exception:
|
|
134
|
+
_KNOWN_TICKERS = frozenset()
|
|
135
|
+
return _KNOWN_TICKERS
|
|
136
|
+
|
|
137
|
+
|
|
138
|
+
_KNOWN_TICKERS: frozenset[str] | None = None
|
|
139
|
+
|
|
140
|
+
|
|
118
141
|
def _route_symbols(text: str, *, limit: int = 6) -> list[str]:
|
|
119
|
-
"""Resolve ticker/company mentions for natural-language command routing.
|
|
142
|
+
"""Resolve ticker/company mentions for natural-language command routing.
|
|
143
|
+
|
|
144
|
+
The second pass reads the message upper-cased so "aapl" is found — and it
|
|
145
|
+
used to accept anything that came out of it, so every English word became
|
|
146
|
+
a ticker: "what's the latest version of python?" ran `/news WHAT`, "write a
|
|
147
|
+
report generator script" ran `/report WRITE`. That pass now adds only
|
|
148
|
+
tickers Aria knows; the message as typed is read as before.
|
|
149
|
+
"""
|
|
120
150
|
seen: set[str] = set()
|
|
121
151
|
out: list[str] = []
|
|
122
152
|
for source in (text, text.upper()):
|
|
@@ -126,6 +156,8 @@ def _route_symbols(text: str, *, limit: int = 6) -> list[str]:
|
|
|
126
156
|
not normalized
|
|
127
157
|
or normalized in _ROUTE_SYMBOL_BLOCKLIST
|
|
128
158
|
or _is_blocked_market_symbol_candidate(normalized)
|
|
159
|
+
or (source is not text and normalized not in _known_tickers()
|
|
160
|
+
and normalized not in text)
|
|
129
161
|
):
|
|
130
162
|
continue
|
|
131
163
|
if len(normalized) == 1 and "." not in normalized:
|
|
@@ -135,7 +167,10 @@ def _route_symbols(text: str, *, limit: int = 6) -> list[str]:
|
|
|
135
167
|
out.append(normalized)
|
|
136
168
|
if len(out) >= limit:
|
|
137
169
|
return out
|
|
138
|
-
single = _extract_market_symbol(text)
|
|
170
|
+
single = _extract_market_symbol(text)
|
|
171
|
+
if not single:
|
|
172
|
+
upper = _extract_market_symbol(text.upper())
|
|
173
|
+
single = upper if str(upper or "").upper() in _known_tickers() else ""
|
|
139
174
|
normalized = str(single or "").upper()
|
|
140
175
|
if (
|
|
141
176
|
normalized
|
|
@@ -236,12 +271,67 @@ def parse_analysis_args(args: str, *, default_symbol: str = "AAPL") -> AnalysisA
|
|
|
236
271
|
return AnalysisArgs(symbol=(symbol or default_symbol).upper(), focus=focus, lang=lang)
|
|
237
272
|
|
|
238
273
|
|
|
274
|
+
_DATA_FILE_RE = re.compile(r"(?<![\w/.-])([\w./-]+\.(?:csv|tsv|xlsx|xls|json))(?![\w.])", re.I)
|
|
275
|
+
_CODE_FILE_RE = re.compile(r"\b[\w./-]+\.(?:py|js|ts|tsx|jsx|go|rs|java|rb|php|c|cc|cpp|h|cs|swift|kt|sh|"
|
|
276
|
+
r"md|txt|toml|ya?ml|html|css|sql|ipynb|csv|tsv|json|xlsx?)\b", re.I)
|
|
277
|
+
_CODE_WORDS = (
|
|
278
|
+
"script", "function", "class", "method", "refactor", "repo", "repository", "stack trace", "traceback",
|
|
279
|
+
"test coverage", "unit test", "pattern", "code", "compile", "debug", "regex", "api", "endpoint",
|
|
280
|
+
"代码", "脚本", "函数", "重构", "仓库", "测试", "报错", "调试", "接口",
|
|
281
|
+
)
|
|
282
|
+
# English words match whole words ("repo" is not in "report"); Chinese has no
|
|
283
|
+
# spaces, so it matches as a substring.
|
|
284
|
+
_CODE_WORD_RE = re.compile(
|
|
285
|
+
r"\b(?:" + "|".join(re.escape(w) for w in _CODE_WORDS if w.isascii()) + r")(?:s|es)?\b", re.I)
|
|
286
|
+
_INVENTORY_WORDS = ("inventory", "reorder", "re-order", "safety stock", "stockout", "sku", "库存", "补货", "安全库存", "断货")
|
|
287
|
+
_CARRIER_WORDS = ("carrier", "freight", "waybill", "shipping cost", "lane", "承运商", "运单", "运费", "物流成本")
|
|
288
|
+
_FINANCE_WORDS = ("market", "stock", "finance", "financial", "earnings", "市场", "股", "财经", "金融", "财报")
|
|
289
|
+
# Commands that act on one instrument and must not guess one.
|
|
290
|
+
_SYMBOL_COMMANDS = {"/analyze", "/risk", "/strategy", "/signal", "/predict", "/report", "/news", "/chart",
|
|
291
|
+
"/backtest"}
|
|
292
|
+
|
|
293
|
+
|
|
294
|
+
def _logistics_route(text: str, low: str, available_commands: set[str]) -> RoutedCommand | None:
|
|
295
|
+
""" "Which SKUs in skus.csv need reordering?" → /inventory skus.csv, when that file exists."""
|
|
296
|
+
import os
|
|
297
|
+
|
|
298
|
+
files = [m.group(1) for m in _DATA_FILE_RE.finditer(text) if os.path.isfile(m.group(1))]
|
|
299
|
+
if not files:
|
|
300
|
+
return None
|
|
301
|
+
if "/inventory" in available_commands and any(w in low for w in _INVENTORY_WORDS):
|
|
302
|
+
return RoutedCommand(command="/inventory", args=files[0])
|
|
303
|
+
if "/carriers" in available_commands and any(w in low for w in _CARRIER_WORDS):
|
|
304
|
+
return RoutedCommand(command="/carriers", args=files[0])
|
|
305
|
+
return None
|
|
306
|
+
|
|
307
|
+
|
|
308
|
+
def _looks_like_code_work(text: str, low: str) -> bool:
|
|
309
|
+
"""A message about code or a data file, which is the model's to answer.
|
|
310
|
+
|
|
311
|
+
"plot a histogram of ages in data.csv" ran `/chart OF AGES GE IN CSV`,
|
|
312
|
+
"analyze this stack trace" ran `/analyze`, "strategy pattern in python"
|
|
313
|
+
ran `/strategy`. None of them is a market request.
|
|
314
|
+
"""
|
|
315
|
+
return (bool(_CODE_FILE_RE.search(text)) or bool(_CODE_WORD_RE.search(low))
|
|
316
|
+
or any(word in low for word in _CODE_WORDS if not word.isascii()))
|
|
317
|
+
|
|
318
|
+
|
|
239
319
|
def route_top_level_text(user_input: str, available_commands: set[str]) -> RoutedCommand | None:
|
|
240
|
-
"""Translate bare workflow text into a slash command when possible.
|
|
320
|
+
"""Translate bare workflow text into a slash command when possible.
|
|
321
|
+
|
|
322
|
+
Only requests this can answer with certainty run a command; anything else
|
|
323
|
+
— code, data files, a keyword with no instrument — goes to the model,
|
|
324
|
+
which has the same tools and can ask.
|
|
325
|
+
"""
|
|
241
326
|
|
|
242
327
|
stripped = user_input.strip()
|
|
243
328
|
if not stripped or stripped.startswith("/"):
|
|
244
329
|
return None
|
|
330
|
+
logistics = _logistics_route(stripped, stripped.lower(), available_commands)
|
|
331
|
+
if logistics is not None:
|
|
332
|
+
return logistics
|
|
333
|
+
if _looks_like_code_work(stripped, stripped.lower()):
|
|
334
|
+
return None
|
|
245
335
|
|
|
246
336
|
low = stripped.lower()
|
|
247
337
|
|
|
@@ -336,13 +426,23 @@ def route_top_level_text(user_input: str, available_commands: set[str]) -> Route
|
|
|
336
426
|
"新闻", "消息", "最新进展", "最近进展", "news", "latest", "recent",
|
|
337
427
|
)):
|
|
338
428
|
symbols = _route_symbols(stripped)
|
|
339
|
-
|
|
429
|
+
topic = _news_topic(stripped, symbols)
|
|
430
|
+
# "latest"/"recent" alone are ordinary words ("the latest version of
|
|
431
|
+
# python"): without an instrument, only an explicit news request about
|
|
432
|
+
# markets is one ("今天有什么财经新闻", "market news today").
|
|
433
|
+
explicit = any(k in low for k in ("新闻", "news")) and any(k in low for k in _FINANCE_WORDS)
|
|
434
|
+
if symbols or topic in ("SpaceX", "LVMH") or explicit:
|
|
435
|
+
return RoutedCommand(command="/news", args=topic)
|
|
340
436
|
parts = stripped.split(maxsplit=1)
|
|
341
437
|
keyword = parts[0].lower()
|
|
342
438
|
rest = parts[1] if len(parts) > 1 else ""
|
|
343
439
|
command = TOP_LEVEL_ROUTES.get(keyword)
|
|
344
440
|
if not command or command not in available_commands:
|
|
345
441
|
return None
|
|
442
|
+
# "risk of this refactor?", "strategy pattern …", "analyze this …": these
|
|
443
|
+
# commands act on one instrument, and parse_analysis_args fell back to AAPL.
|
|
444
|
+
if command in _SYMBOL_COMMANDS and not _route_symbols(rest or stripped):
|
|
445
|
+
return None
|
|
346
446
|
if command == "/analyze":
|
|
347
447
|
parsed = parse_analysis_args(rest)
|
|
348
448
|
focus_arg = f" --focus {parsed.focus}" if parsed.focus else ""
|
|
@@ -424,11 +524,18 @@ def parse_technical_args(args: str, *, default_symbol: str = "AAPL", default_day
|
|
|
424
524
|
return TechnicalArgs(symbol=symbol, days=days)
|
|
425
525
|
|
|
426
526
|
|
|
427
|
-
async def try_top_level_route(user_input: str, commands) -> bool:
|
|
428
|
-
"""Execute a top-level routed slash command through a SlashCommands object.
|
|
527
|
+
async def try_top_level_route(user_input: str, commands, *, announce=None) -> bool:
|
|
528
|
+
"""Execute a top-level routed slash command through a SlashCommands object.
|
|
529
|
+
|
|
530
|
+
``announce`` is told the command first ("→ /news AAPL"): the interactive
|
|
531
|
+
loop routes here before send_message, so a routed message used to run its
|
|
532
|
+
command with nothing on screen saying which.
|
|
533
|
+
"""
|
|
429
534
|
|
|
430
535
|
routed = route_top_level_text(user_input, set(commands.commands))
|
|
431
536
|
if routed is None:
|
|
432
537
|
return False
|
|
538
|
+
if announce is not None:
|
|
539
|
+
announce(routed.text)
|
|
433
540
|
await commands.execute(routed.text)
|
|
434
541
|
return True
|
|
@@ -352,6 +352,24 @@ from typing import Dict, Any, Optional
|
|
|
352
352
|
logger = logging.getLogger(__name__)
|
|
353
353
|
|
|
354
354
|
|
|
355
|
+
def _news_date(raw: str) -> str:
|
|
356
|
+
"""A feed's publish time as 2026-10-05.
|
|
357
|
+
|
|
358
|
+
The first ten characters were kept, which suits ISO dates and cut an RSS
|
|
359
|
+
date mid-word: "Mon, 05 Oct 2026 12:00:00 GMT" showed as "Mon, 05 Oc".
|
|
360
|
+
"""
|
|
361
|
+
from datetime import datetime
|
|
362
|
+
from email.utils import parsedate_to_datetime
|
|
363
|
+
|
|
364
|
+
text = str(raw or "").strip()
|
|
365
|
+
for parse in (lambda t: datetime.fromisoformat(t.replace("Z", "+00:00")), parsedate_to_datetime):
|
|
366
|
+
try:
|
|
367
|
+
return parse(text).strftime("%Y-%m-%d")
|
|
368
|
+
except (TypeError, ValueError, IndexError):
|
|
369
|
+
continue
|
|
370
|
+
return text[:10]
|
|
371
|
+
|
|
372
|
+
|
|
355
373
|
class MarketCommandsMixin:
|
|
356
374
|
"""Mixin: Market commands: quote, realty, football, screen, news, screen_cn, limitup, north."""
|
|
357
375
|
|
|
@@ -1185,7 +1203,7 @@ class MarketCommandsMixin:
|
|
|
1185
1203
|
url_item = a.get("url", a.get("link", ""))
|
|
1186
1204
|
pub_date = a.get("published_at", a.get("date", a.get("publishedAt", "")))
|
|
1187
1205
|
if pub_date:
|
|
1188
|
-
pub_date =
|
|
1206
|
+
pub_date = _news_date(pub_date)
|
|
1189
1207
|
else:
|
|
1190
1208
|
title = str(a)
|
|
1191
1209
|
source = pub_date = url_item = ""
|
|
@@ -1224,7 +1242,7 @@ class MarketCommandsMixin:
|
|
|
1224
1242
|
source = a.get("source", "") if isinstance(a, dict) else ""
|
|
1225
1243
|
pub_date = a.get("published_at", "") if isinstance(a, dict) else ""
|
|
1226
1244
|
if pub_date:
|
|
1227
|
-
pub_date =
|
|
1245
|
+
pub_date = _news_date(pub_date)
|
|
1228
1246
|
if self.context.has_rich:
|
|
1229
1247
|
self.context.console.print(f" [bold]{idx}.[/bold] {title}")
|
|
1230
1248
|
meta_parts = [p for p in [source, pub_date] if p]
|
|
@@ -294,6 +294,11 @@ def _nearest_levels(
|
|
|
294
294
|
return support, resistance
|
|
295
295
|
|
|
296
296
|
|
|
297
|
+
def _compact_levels(currency: str, levels: list[float]) -> str:
|
|
298
|
+
""""USD 332.54 / 328.35 / 325.81": the currency once."""
|
|
299
|
+
return f"{currency} " + " / ".join(f"{v:,.2f}" for v in levels) if levels else "—"
|
|
300
|
+
|
|
301
|
+
|
|
297
302
|
def _format_levels(currency: str, levels: list[float]) -> str:
|
|
298
303
|
return ", ".join(f"{currency} {v:,.2f}" for v in levels) if levels else "—"
|
|
299
304
|
|
|
@@ -389,22 +394,17 @@ def _append_timeframe_levels(
|
|
|
389
394
|
resistance = row.get("resistance") or []
|
|
390
395
|
action = _level_action_line(name, support, resistance, currency, english=english)
|
|
391
396
|
|
|
397
|
+
# Two lines a timeframe, not four: the levels on one line, what to do
|
|
398
|
+
# with them on the next. Every level stays; the data source is in the
|
|
399
|
+
# header already. The whole snapshot ran to about 48 lines.
|
|
392
400
|
if english:
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
lines.append(f"- **{name}** — {meta}")
|
|
397
|
-
lines.append(f" - Support: {_format_levels(currency, support)}")
|
|
398
|
-
lines.append(f" - Resistance: {_format_levels(currency, resistance)}")
|
|
399
|
-
lines.append(f" - Use: {action}")
|
|
401
|
+
lines.append(f"- **{name}** ({horizon}) — support {_compact_levels(currency, support)}"
|
|
402
|
+
f" · resistance {_compact_levels(currency, resistance)} ")
|
|
403
|
+
lines.append(f" {action}")
|
|
400
404
|
else:
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
lines.append(f"- **{name}** — {meta}")
|
|
405
|
-
lines.append(f" - 支撑:{_format_levels(currency, support)}")
|
|
406
|
-
lines.append(f" - 压力:{_format_levels(currency, resistance)}")
|
|
407
|
-
lines.append(f" - 用法:{action}")
|
|
405
|
+
lines.append(f"- **{name}**({horizon})— 支撑 {_compact_levels(currency, support)}"
|
|
406
|
+
f" · 压力 {_compact_levels(currency, resistance)} ")
|
|
407
|
+
lines.append(f" {action}")
|
|
408
408
|
|
|
409
409
|
|
|
410
410
|
_HORIZON_UNITS_EN = {"日": "days", "周": "weeks", "月": "months"}
|
|
@@ -38,7 +38,7 @@ def build_response_style_rule(lang: str) -> str:
|
|
|
38
38
|
return (
|
|
39
39
|
"## Terminal Answer Style\n"
|
|
40
40
|
"- Lead with the answer or conclusion. Do not start with filler such as 'Sure' or 'I can help'.\n"
|
|
41
|
-
"- Strict Currency: US assets (e.g. AAPL, TSLA)
|
|
41
|
+
"- Strict Currency: label amounts with the asset's currency as the data gives it — USD for US assets (e.g. AAPL, TSLA), CNY for A-shares, HKD for Hong Kong — and never mix currencies.\n"
|
|
42
42
|
"- Format Financial Metrics Cleanly: Use structured Markdown tables or concise bullet points for Price, RSI, MACD, MA, and Bollinger Bands.\n"
|
|
43
43
|
"- Never dump raw, unexecuted Python code or pseudo-scripts in chat when performing analytical queries. Synthesize insights directly.\n"
|
|
44
44
|
"- Never explain tool errors, missing parameters, or recovery mechanics to the user. Silently proceed with available data.\n"
|
|
@@ -53,7 +53,7 @@ def build_response_style_rule(lang: str) -> str:
|
|
|
53
53
|
return (
|
|
54
54
|
"## 终端回答风格\n"
|
|
55
55
|
"- 先给结论或直接答案,不要以“好的/当然/我来帮你”开头。\n"
|
|
56
|
-
"-
|
|
56
|
+
"- 严格匹配货币:按数据给出的货币代码标注金额——美股(如 AAPL、TSLA)用 USD,A股用 CNY,港股用 HKD;严禁混用,严禁将美股均线/价格标注为人民币。\n"
|
|
57
57
|
"- 金融指标结构化排版:价格、涨跌幅、RSI、MACD、均线、布林带等必须使用结构清晰的 Markdown 表格或整齐键值对呈现,禁止乱序纯文本堆砌。\n"
|
|
58
58
|
"- 严禁在对话中向用户输出未执行的 Python 伪代码或脚本片段;直接给出整理后的金融分析结论与核心数据。\n"
|
|
59
59
|
"- 严禁向用户解释底层工具调用失败的原因或道歉(如“因缺少参数导致web_search失败”);遇网络或工具异常时静默使用备用数据并继续分析。\n"
|
|
@@ -2752,6 +2752,50 @@ def _render_answer_block(text: str) -> None:
|
|
|
2752
2752
|
console.print(Padding(make_markdown(_strip_latex(text)), (0, 0, 0, 4)))
|
|
2753
2753
|
|
|
2754
2754
|
|
|
2755
|
+
_MODEL_UNAVAILABLE_MARKERS = (
|
|
2756
|
+
"vertex_needs_project", "vertex_not_logged_in", "vertex_gcloud_failed", "missing_api_key:",
|
|
2757
|
+
"no_cloud_provider", "no_provider", "all_providers_failed", "http 401", "http 403", "http 402",
|
|
2758
|
+
"insufficient balance", "http 429", "rate limit",
|
|
2759
|
+
)
|
|
2760
|
+
|
|
2761
|
+
|
|
2762
|
+
def _model_unavailable(error: object) -> bool:
|
|
2763
|
+
"""The turn failed because no model could be reached — not because of what was asked."""
|
|
2764
|
+
text = str(error or "").lower()
|
|
2765
|
+
return any(marker in text for marker in _MODEL_UNAVAILABLE_MARKERS)
|
|
2766
|
+
|
|
2767
|
+
|
|
2768
|
+
def _data_without_model(message: str, history: list) -> dict:
|
|
2769
|
+
"""What Aria can answer from data alone, for a turn whose model is unreachable.
|
|
2770
|
+
|
|
2771
|
+
With no Google project set, "AAPL price" printed setup guidance and
|
|
2772
|
+
nothing else, though the quote needs no model: the same pre-fetch that
|
|
2773
|
+
serves tool-less routes answers it.
|
|
2774
|
+
"""
|
|
2775
|
+
try:
|
|
2776
|
+
found = _run_deterministic_chain(message, model_has_tools=False, history=history)
|
|
2777
|
+
except Exception as exc:
|
|
2778
|
+
logger.debug("data fallback failed: %s", exc)
|
|
2779
|
+
return {}
|
|
2780
|
+
return found if found.get("success") and (found.get("response") or "").strip() else {}
|
|
2781
|
+
|
|
2782
|
+
|
|
2783
|
+
def _announce_route(command_text: str) -> None:
|
|
2784
|
+
"""Say which command a plain-language message ran: "→ /news AAPL".
|
|
2785
|
+
|
|
2786
|
+
Routed messages used to run their command silently, so a misroute looked
|
|
2787
|
+
like Aria misunderstanding, and nobody learned the command for next time.
|
|
2788
|
+
"""
|
|
2789
|
+
if _ARIA_BOT_MODE:
|
|
2790
|
+
return
|
|
2791
|
+
if HAS_RICH:
|
|
2792
|
+
from rich.text import Text
|
|
2793
|
+
|
|
2794
|
+
console.print(Text(f" → {command_text}", style="dim"))
|
|
2795
|
+
else:
|
|
2796
|
+
print(f" → {command_text}")
|
|
2797
|
+
|
|
2798
|
+
|
|
2755
2799
|
def _print_tool_call(tool_name: str, params: dict):
|
|
2756
2800
|
"""Print tool call header — Claude Code-style ⏺ bullet tree."""
|
|
2757
2801
|
if _ARIA_BOT_MODE:
|
|
@@ -4694,6 +4738,7 @@ class ArtheraTerminal:
|
|
|
4694
4738
|
if routed is not None:
|
|
4695
4739
|
self._send_message_route_active = True
|
|
4696
4740
|
try:
|
|
4741
|
+
_announce_route(routed.text)
|
|
4697
4742
|
self._maybe_show_intent_preflight(routed.text)
|
|
4698
4743
|
await self.commands.execute(routed.text)
|
|
4699
4744
|
finally:
|
|
@@ -4703,6 +4748,7 @@ class ArtheraTerminal:
|
|
|
4703
4748
|
if routed is not None:
|
|
4704
4749
|
self._send_message_route_active = True
|
|
4705
4750
|
try:
|
|
4751
|
+
_announce_route(routed.text)
|
|
4706
4752
|
self._maybe_show_intent_preflight(routed.text)
|
|
4707
4753
|
await self.commands.execute(routed.text)
|
|
4708
4754
|
finally:
|
|
@@ -5335,6 +5381,30 @@ class ArtheraTerminal:
|
|
|
5335
5381
|
result.get("error", "Unknown error"),
|
|
5336
5382
|
lang=self.config.get("ui_lang", "en") or "en",
|
|
5337
5383
|
)
|
|
5384
|
+
_offline_answer = (
|
|
5385
|
+
_data_without_model(message, self.conversation[:-1])
|
|
5386
|
+
if _model_unavailable(result.get("error")) else {}
|
|
5387
|
+
)
|
|
5388
|
+
if _offline_answer:
|
|
5389
|
+
# The data is the answer; the model problem is a note under it.
|
|
5390
|
+
_en_note = _detect_lang(message) == "en"
|
|
5391
|
+
_answer = _offline_answer["response"]
|
|
5392
|
+
if HAS_RICH:
|
|
5393
|
+
console.print()
|
|
5394
|
+
console.print(make_markdown(_strip_latex(_answer))) # its header carries the disclaimer
|
|
5395
|
+
else:
|
|
5396
|
+
print("\n" + _answer)
|
|
5397
|
+
self.conversation.append({"role": "assistant", "content": _answer})
|
|
5398
|
+
self._last_response = _answer
|
|
5399
|
+
error_presentation = AgentErrorPresentation(
|
|
5400
|
+
error=error_presentation.error,
|
|
5401
|
+
level="warning",
|
|
5402
|
+
lines=[
|
|
5403
|
+
("模型不可用,以上为数据快照(未经模型分析)。" if not _en_note else
|
|
5404
|
+
"The model is unavailable, so this is the data snapshot without model analysis."),
|
|
5405
|
+
*error_presentation.lines[-1:],
|
|
5406
|
+
],
|
|
5407
|
+
)
|
|
5338
5408
|
console.print() if HAS_RICH else print()
|
|
5339
5409
|
if error_presentation.use_generic_error_prefix:
|
|
5340
5410
|
_print_error(error_presentation.lines[0])
|
|
@@ -6357,7 +6427,7 @@ class ArtheraTerminal:
|
|
|
6357
6427
|
# Intercepts bare keywords like "analyze AAPL" → /analyze AAPL
|
|
6358
6428
|
# so users don't need to type the slash for common quant workflows.
|
|
6359
6429
|
self._maybe_show_intent_preflight(user_input)
|
|
6360
|
-
_routed = await try_top_level_route(user_input, self.commands)
|
|
6430
|
+
_routed = await try_top_level_route(user_input, self.commands, announce=_announce_route)
|
|
6361
6431
|
if _routed:
|
|
6362
6432
|
continue
|
|
6363
6433
|
|
|
@@ -321,31 +321,76 @@ if HAS_PT:
|
|
|
321
321
|
display_meta = meta_str,
|
|
322
322
|
)
|
|
323
323
|
|
|
324
|
+
def _mention_index(self):
|
|
325
|
+
if getattr(self, "_mentions", None) is None:
|
|
326
|
+
from aria_code.ui.mentions import MentionIndex
|
|
327
|
+
|
|
328
|
+
self._mentions = MentionIndex(self.workspace, output_root=self.output_root, symbols=self.symbols)
|
|
329
|
+
return self._mentions
|
|
330
|
+
|
|
331
|
+
def _kind_label(self, name: str) -> str:
|
|
332
|
+
for kind in REFERENCE_KINDS:
|
|
333
|
+
if kind.name == name:
|
|
334
|
+
return kind.label_zh if self.lang == "zh" else kind.label_en
|
|
335
|
+
return name
|
|
336
|
+
|
|
337
|
+
def _kind_shortcuts(self, frag: str) -> Iterator[Completion]:
|
|
338
|
+
lowered = frag.lower()
|
|
339
|
+
for kind in REFERENCE_KINDS:
|
|
340
|
+
if kind.name.startswith(lowered):
|
|
341
|
+
yield Completion(
|
|
342
|
+
f"{kind.name}:",
|
|
343
|
+
start_position=-len(frag),
|
|
344
|
+
display=FormattedText([("class:fz-hi", f"@{kind.name}"), ("class:fz-cat", ":")]),
|
|
345
|
+
display_meta=(f"只看{self._kind_label(kind.name)}" if self.lang == "zh"
|
|
346
|
+
else f"{self._kind_label(kind.name)} only"),
|
|
347
|
+
)
|
|
348
|
+
|
|
349
|
+
def _mention_completions(self, mentions, replace: int) -> Iterator[Completion]:
|
|
350
|
+
for mention in mentions:
|
|
351
|
+
hits = set(mention.matched)
|
|
352
|
+
parts = [("class:fz-hi" if i in hits else "", ch) for i, ch in enumerate(mention.label)]
|
|
353
|
+
yield Completion(
|
|
354
|
+
mention.insert_text,
|
|
355
|
+
start_position=-replace,
|
|
356
|
+
display=FormattedText(parts),
|
|
357
|
+
display_meta=self._kind_label(mention.kind),
|
|
358
|
+
)
|
|
359
|
+
|
|
324
360
|
def _reference_completions(self, frag: str) -> Iterator[Completion]:
|
|
325
|
-
"""Complete
|
|
361
|
+
"""Complete "@" references: results across every kind first.
|
|
362
|
+
|
|
363
|
+
"@" used to open on the kinds (file:, asset: …) and list files only
|
|
364
|
+
after a path character, so attaching a file took three steps. A
|
|
365
|
+
bare "@" now shows recently changed files, "@fx" searches files,
|
|
366
|
+
folders, assets and saved resources together, and "@file:" or
|
|
367
|
+
another kind prefix narrows to that kind.
|
|
368
|
+
"""
|
|
326
369
|
if ":" not in frag:
|
|
327
|
-
|
|
328
|
-
for kind in REFERENCE_KINDS:
|
|
329
|
-
if kind.name.startswith(lowered):
|
|
330
|
-
label = kind.label_zh if self.lang == "zh" else kind.label_en
|
|
331
|
-
yield Completion(
|
|
332
|
-
f"{kind.name}:",
|
|
333
|
-
start_position=-len(frag),
|
|
334
|
-
display=FormattedText([
|
|
335
|
-
("class:fz-hi", f"@{kind.name}"),
|
|
336
|
-
("class:fz-cat", ":"),
|
|
337
|
-
]),
|
|
338
|
-
display_meta=label,
|
|
339
|
-
)
|
|
340
|
-
# Keep the first-level @ menu semantic and compact. Plain-path
|
|
341
|
-
# completion remains available only after an explicit path
|
|
342
|
-
# prefix; normal discovery goes through @file:/@folder:.
|
|
370
|
+
# Browsing by path ("@src/", "@./", "@~/") works as before.
|
|
343
371
|
if frag and (frag.startswith((".", "/", "~")) or "/" in frag):
|
|
344
372
|
yield from self._file_completions(frag)
|
|
373
|
+
return
|
|
374
|
+
index = self._mention_index()
|
|
375
|
+
if not frag:
|
|
376
|
+
from aria_code.ui.mentions import Mention
|
|
377
|
+
|
|
378
|
+
recent = [Mention("file", path, 0) for path in index.recent_files()]
|
|
379
|
+
yield from self._mention_completions(recent, 0)
|
|
380
|
+
yield from self._kind_shortcuts("")
|
|
381
|
+
return
|
|
382
|
+
if len(frag) >= 2:
|
|
383
|
+
yield from self._kind_shortcuts(frag)
|
|
384
|
+
yield from self._mention_completions(index.search(frag), len(frag))
|
|
345
385
|
return
|
|
346
386
|
|
|
347
387
|
kind, value_frag = frag.split(":", 1)
|
|
348
388
|
kind = kind.lower()
|
|
389
|
+
path_like = value_frag.startswith((".", "/", "~")) or "/" in value_frag
|
|
390
|
+
if kind in {"file", "folder"} and value_frag and not path_like:
|
|
391
|
+
found = self._mention_index().search(value_frag, kind=kind)
|
|
392
|
+
yield from self._mention_completions(found, len(frag))
|
|
393
|
+
return
|
|
349
394
|
if kind == "asset":
|
|
350
395
|
for symbol in self.symbols:
|
|
351
396
|
if symbol.lower().startswith(value_frag.lower()):
|