aria-code 0.87.0__tar.gz → 0.89.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.87.0/src/aria_code.egg-info → aria_code-0.89.0}/PKG-INFO +1 -1
- {aria_code-0.87.0 → aria_code-0.89.0}/pyproject.toml +1 -1
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/_version.py +1 -1
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +30 -25
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/catalog.py +23 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/core_cmds.py +11 -9
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +6 -4
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +45 -8
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/aria_cli.py +12 -7
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/completer.py +2 -2
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/render/output.py +54 -12
- {aria_code-0.87.0 → aria_code-0.89.0/src/aria_code.egg-info}/PKG-INFO +1 -1
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code.egg-info/SOURCES.txt +4 -1
- aria_code-0.89.0/tests/test_file_links.py +43 -0
- aria_code-0.89.0/tests/test_narrow_chinese_output.py +62 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_output_rendering.py +19 -2
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_platform_publish.py +15 -11
- aria_code-0.89.0/tests/test_wrapped_indent.py +33 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/LICENSE +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/NOTICE +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/README.md +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/setup.cfg +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/adk_apps/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/base.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/code_review.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/critic.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/deepen.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/models.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/pipeline.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/themes.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/deep/tiers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/engineering/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/engineering/coder.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/engineering/tester.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/catalyst.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/debate.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/earnings.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/fundamental.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/macro.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/news.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/risk.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/sector.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/strategist.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/synthesis.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/financial/technical.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/orchestrator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/portfolio_agent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/business_match.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/signal_scheme.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/sports/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/sports/football_agent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/supervisor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/team.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/aliyun_data_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/README.md +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/channels/README.md +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/channels/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/channels/approvals.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/channels/conversation.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/channels/digest.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/channels/intake.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/channels/registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/channels/tradingview.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/README.md +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/_optional.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/broker_render.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/market.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/team.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/config_paths.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/config_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/constants.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/context.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/deterministic.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/direct.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/football_reports.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/google_login.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/helpers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/hooks.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/i18n.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/intent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/intent_router.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/main.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/market_hours.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/market_universe.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/message_processing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/preflight.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/project_aria.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/base.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/review_runner.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/sandbox.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/session_export.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/session_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tools/context.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/update_check.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/updater.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/daemon/README.md +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/vscode/README.md +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/apps/vscode/package.json +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/aria_daemon.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/aria_feishu_bot.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/aria_mcp_server.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/aria_relay_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/aria_relay_server.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/aria_telegram_bot.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ariarc.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/artifacts.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/backtest_engine.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/backtest_report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/automation.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/base.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/capabilities.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/cn/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/config.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/intl/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/paper_broker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/planning.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/brokers/trading.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/canva_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/change_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/aria_relay_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/canva_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/figma_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/football_data_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/kling_video_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/market_data_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/openai_image_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/runway_video_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/cloud_memory.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/command_safety.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/computer_use_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/dashboard_generator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/data_analysis_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/data_cleaner.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/data_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/base.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/router.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/demo_player.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/doctor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/domain/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/domain/backtest_engine.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/domain/backtest_report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/domain/finance_formulas.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/domain/strategy_vault.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/evals/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/evals/harness.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/evals/runner.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/external_agent_runner.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/figma_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/file_analysis_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/finance_formulas.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/football_data_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/image_gen_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/intent_classifier.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/kling_video_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/licensing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/local_finance_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/local_image_provider.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/local_llm_provider.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/macro_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/markdown_pdf.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/market_data_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/mcp_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/memory_manager.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/model_capability.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/notification_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/openai_image_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_core/export.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_core/paths.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_infra/product.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/cache.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/context.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/data.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/references.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/settings.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_services/usage.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packs/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packs/base.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packs/finance/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packs/logistics/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packs/payments/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packs/realty/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packs/registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/packs/rules.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/plan_utils.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/plugin_loader.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/portfolio_ledger.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/preview_server.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/privacy/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/privacy/feedback.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/project_review.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/project_review_api.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/project_review_server.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/project_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/llm/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/llm/anthropic.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/llm/base.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/llm/custom.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/llm/ollama.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/llm/registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/local_image_provider.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/local_llm_provider.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/providers/tool_messages.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/realty_data_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/relay_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/report_exporters.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/report_generator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/review_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/acceptance.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/agent_loop.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/approval.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/budget.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/checkpoints.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/crash_report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/events.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/gateway.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/lsp.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/orchestrator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/repo_map.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/run_state.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/run_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/self_healing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/subagent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/task_ledger.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/tool_executor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/tool_policy.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runtime/worktrees.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/runway_video_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/safety/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/safety/permissions.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/safety/service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/setup_wizard.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/spreadsheet_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/strategy_vault.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/artifact_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/broker_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/build_quant_engine.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/code_audit_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/computer_use_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/extended_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/image_gen_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/local_finance_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/logistics_carriers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/logistics_inventory.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/logistics_io.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/logistics_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/macro_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/notification_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/project_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/realty_data_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/tools/stripe_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/banner.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/console.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/image_render.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/input_box.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/mentions.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/picker.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/render/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/render/finance.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/render/market.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/render/responsive.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/render/team.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/robot.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/ui/startup_dashboard.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/utils/vscode_uri.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/video_analysis.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/video_editor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/workspace/__init__.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/workspace/files.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/workspace/verify.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/workspace_changes.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/workspace_context.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/workspace_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code/workspace_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code.egg-info/entry_points.txt +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code.egg-info/requires.txt +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/src/aria_code.egg-info/top_level.txt +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_adk_market_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_agent_team_fallback.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_analyze_file_tool.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_architecture_ledger_is_true.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_architecture_report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_aria_cli_core.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_aria_mcp_server.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_aria_sdk.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_artifact_publishing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_artifacts_and_reports.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ashare_prediction_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_backtest_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_backtest_engine.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_backtest_report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_broken_akshare_is_optional.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_broker_automation.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_broker_chat_confirm_gate.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_broker_planning.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_broker_safety.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_broker_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_budget.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_business_workflow_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_canva_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_canvas_cmds.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_card_approvals.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_channel_intake.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_channels.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_chart_handlers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_chat_bots_fail_closed.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_chat_routing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ci_security_workflow.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_cli_app_split.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_cli_bootstrap.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_cli_config_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_cli_lifecycle_hooks.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_cli_runtime_consumer.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_cli_tool_executor_module.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_cli_updater.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_cloud_memory.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_code_audit_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_code_review_agent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_codegen_output.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_coder_tester_self_healing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_coder_tool_safety.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_collaboration.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_command_loggers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_command_safety.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_completions_builder.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_config_paths.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_configured_provider.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_container_entrypoint.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_container_entrypoints.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_context_checkpoints.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_context_references.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_context_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_conversation_core.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_crash_report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_credential_file_permissions.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_custom_providers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_daemon_gateway_config.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_dashboard_generator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_data_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_data_service_imports.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_data_without_model.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_datasource_routing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_deep_analysis.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_degrades_without_quant_engine.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_doctor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_doctor_describes_the_current_install.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_doctor_npm_scope.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_engine_boundary.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_enterprise_tool_honesty.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_env_switch_docs.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_evals_harness.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_event_import_roots.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_extended_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_feishu_swarm_config.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_finalize_release.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_finance_renderers.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_finance_service_catalog.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_first_run_output.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_first_run_works.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_football_agent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_football_prediction_output.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_google_cloud_models.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_google_cloud_routing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_google_login.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_google_search_provider.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_headless_is_agentic.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_honest_surfaces.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_image_gen_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_image_inputs.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_import_graph_budget.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_intent_router.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_intent_signals.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_kling_video_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_lazy_rebind.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_legacy_module_imports.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_license_consistency.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_licensing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_local_image_provider.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_logistics_3pl.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_logistics_and_finance_agents.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_lsp.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_markdown_pdf.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_market_answers_in_english.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_market_data_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_market_history_inheritance.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_market_history_tool.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_market_hours.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_market_questions_on_backend.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_market_symbol_extraction.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_market_universe.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_mcp_circuit.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_mcp_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_mentions.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_model_capability_registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_model_choice_is_the_users.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_model_selection_state.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_native_binary_entrypoints.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_native_installer.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_natural_language_routing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_new_modules.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_no_uncommitted_imports.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_numeric_listings.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ollama_stream_imports.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ollama_stream_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_openai_image_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_operations_suite.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_packages_facade.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_packaging_constraints.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_packaging_manifest.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_packs_domains.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_pdf_report.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_pick_best_installed_model.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_plan_mode.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_platform_package_assembly.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_platform_packages.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_plotly_html_output.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_portfolio_ledger.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_post_turn_context_decision.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_preflight.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_preview_server.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_privacy_feedback.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_project_aria.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_project_review.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_project_review_api.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_prompt_assembly.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_prompt_selection.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_provider_autoconfig.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_provider_error_messages.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_provider_integration.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_provider_registry.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_public_service_status.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_quant_engine_namespace.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_rebind_contract.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_rebind_namespace_contract.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_relay_client_credentials.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_relay_event_verification.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_relay_sends_for_clients.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_relay_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_relay_url.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_release_chain.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_release_commit_identity.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_release_push_is_atomic.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_release_reaches_the_registries.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_release_verification_waits.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_release_workflow_permissions.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_report_charts.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_report_generator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_research_protocol.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_research_quality.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_responsive_rendering.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_review_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_root_module_budget.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_rsi_without_pandas_ta.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_acceptance.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_agent_loop.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_approval.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_bridge.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_bridge_fallback.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_checkpoints.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_event_identity.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_gateway.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_repo_map.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_run_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_tool_executor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runtime_worktrees.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_runway_video_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_safety_permissions.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_safety_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_safety_service_adoption.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_service_diagnostics_security.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_session_search.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_settings_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_shipper_digest.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_single_import_root.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_skill_agent_binding.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_skill_catalog.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_skill_loader.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_slash_popup.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_spreadsheet_tools.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_sse_stream_contract.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_startup_dashboard.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_startup_latency.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_status_language.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_streaming_pipeline.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_stripe_agent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_subagent.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_supervisor_routing.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_system_prompts.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_system_tools_output.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_task_orchestrator.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_team_synthesis.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_tls_trust_store.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_tool_policy.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_tool_scope.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_tool_step_output.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_trading_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_tradingview_bridge.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_turn_planning.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ui_completer_references.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ui_console_theme.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ui_input_box.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ui_language_and_model.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_ui_robot_banner.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_update_health_routes.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_verification_hint.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_verification_policy.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_version_consistency.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_version_counter.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_video_analysis.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_video_editor.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_vscode_mcp.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_warehouse_agents.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_warehouse_cli_registration.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_warehouse_erp_client.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_warehouse_workflow.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_wheel_is_installable.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_workspace_changes.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_workspace_context.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_workspace_files.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_workspace_scope.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.0}/tests/test_workspace_service.py +0 -0
- {aria_code-0.87.0 → aria_code-0.89.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.89.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.89.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" }
|
|
@@ -553,46 +553,51 @@ class BacktestCommandsMixin:
|
|
|
553
553
|
actual_end = self._bt_value(d, "end", "end_date", default=end_date)
|
|
554
554
|
bars = self._bt_int(d.get("bars"))
|
|
555
555
|
initial = self._bt_money(d.get("initial_capital", _initial_capital))
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
556
|
+
# One label per row, values wrapping in their own column: four
|
|
557
|
+
# "label: value" pairs on one line wrapped anywhere in an
|
|
558
|
+
# 80-column terminal, and the report path fell to column 0.
|
|
559
|
+
from rich.padding import Padding
|
|
560
|
+
from rich.style import Style
|
|
561
|
+
from rich.table import Table
|
|
562
|
+
from rich.text import Text
|
|
563
|
+
from aria_code.ui.render.output import file_uri
|
|
564
|
+
|
|
565
|
+
facts: list[tuple[str, object]] = [
|
|
566
|
+
("source", src),
|
|
567
|
+
("period", f"{actual_start} → {actual_end} · {bars} bars"),
|
|
568
|
+
("capital", initial),
|
|
569
|
+
("params", f"momentum={_momentum_period} fast={_fast_period} slow={_slow_period}"),
|
|
570
|
+
]
|
|
566
571
|
if d.get("provider_chain"):
|
|
567
572
|
chain = " → ".join(str(x) for x in d.get("provider_chain") or [])
|
|
568
573
|
status = d.get("data_status") or "complete"
|
|
569
574
|
missing = ", ".join(str(x) for x in (d.get("missing_fields") or [])) or "none"
|
|
570
|
-
|
|
571
|
-
f" [#57606a]data:[/#57606a] {chain}"
|
|
572
|
-
f" [#57606a]status:[/#57606a] {status}"
|
|
573
|
-
f" [#57606a]missing:[/#57606a] {missing}"
|
|
574
|
-
)
|
|
575
|
+
facts.append(("data", f"{chain} · {status} · missing {missing}"))
|
|
575
576
|
vol = self._bt_volume_summary(d)
|
|
576
577
|
if vol:
|
|
577
578
|
avg = vol.get("average")
|
|
578
579
|
last = vol.get("last")
|
|
579
580
|
coverage = self._bt_num(vol.get("coverage"))
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
f"avg {avg:,.0f} · last {last:,.0f} · coverage {coverage:.0%}"
|
|
583
|
-
if avg is not None and last is not None
|
|
584
|
-
else " [#57606a]volume:[/#57606a] unavailable"
|
|
585
|
-
)
|
|
581
|
+
facts.append(("volume", f"avg {avg:,.0f} · last {last:,.0f} · coverage {coverage:.0%}"
|
|
582
|
+
if avg is not None and last is not None else "unavailable"))
|
|
586
583
|
if d.get("report_path"):
|
|
587
584
|
_report = str(d["report_path"])
|
|
588
585
|
_home = str(pathlib.Path.home())
|
|
589
|
-
if _report.startswith(_home + os.sep)
|
|
590
|
-
|
|
591
|
-
|
|
586
|
+
_shown = "~" + _report[len(_home):] if _report.startswith(_home + os.sep) else _report
|
|
587
|
+
facts.append(("report", Text(_shown, style=Style(link=file_uri(_report)))))
|
|
588
|
+
grid = Table.grid(padding=(0, 1))
|
|
589
|
+
grid.add_column(style="#57606a", no_wrap=True)
|
|
590
|
+
grid.add_column(overflow="fold")
|
|
591
|
+
for label, value in facts:
|
|
592
|
+
grid.add_row(f"{label}:", value if isinstance(value, Text) else Text(str(value)))
|
|
593
|
+
self.context.console.print(Padding(grid, (0, 0, 0, 2)))
|
|
592
594
|
if trades == 0:
|
|
595
|
+
_zh_bt = str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh")
|
|
593
596
|
self.context.console.print(
|
|
594
597
|
" [yellow]注意:[/yellow] # Trades 为 0,表示本次规则没有触发入场;"
|
|
595
|
-
"收益可能来自全程空仓/持仓逻辑或上游交易统计口径。"
|
|
598
|
+
"收益可能来自全程空仓/持仓逻辑或上游交易统计口径。" if _zh_bt else
|
|
599
|
+
" [yellow]Note:[/yellow] 0 trades — the rules never triggered an entry; any return "
|
|
600
|
+
"comes from holding or from how the data source counts trades."
|
|
596
601
|
)
|
|
597
602
|
else:
|
|
598
603
|
print(f"Total Return: {d.get('total_return',0)*100:.1f}% Sharpe: {d.get('sharpe_ratio',0):.2f} MaxDD: {d.get('max_drawdown',0)*100:.1f}%")
|
|
@@ -158,3 +158,26 @@ def short_description(description: str) -> str:
|
|
|
158
158
|
text = str(description or "")
|
|
159
159
|
cut = text.find(": /")
|
|
160
160
|
return (text[:cut] if cut > 0 else text).strip()
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
# What /help and the "/" popup say about the commands they show, in the Chinese
|
|
164
|
+
# UI: the descriptions in the command table are English, so a Chinese session
|
|
165
|
+
# read "Show commands and examples" under 命令.
|
|
166
|
+
COMMAND_DESCRIPTIONS_ZH = {
|
|
167
|
+
"/help": "命令与示例", "/model": "切换模型", "/review": "代码审查", "/plan": "起草计划",
|
|
168
|
+
"/init": "为当前项目生成 ARIA.md", "/status": "运行状态:引擎 · 模型 · 工具 · 上下文",
|
|
169
|
+
"/sessions": "查看与搜索会话", "/clear": "清空对话", "/compact": "压缩上下文",
|
|
170
|
+
"/copy": "复制上一条回答", "/rewind": "恢复代码或对话", "/permissions": "工具权限",
|
|
171
|
+
"/config": "查看与修改配置", "/doctor": "诊断安装、模型与 API Key", "/login": "登录",
|
|
172
|
+
"/code": "生成并运行代码", "/ta": "技术指标", "/backtest": "回测并生成 HTML 报告",
|
|
173
|
+
"/team": "多智能体研究团队", "/report": "研究报告", "/portfolio": "投资组合",
|
|
174
|
+
"/inventory": "3PL 库存策略:补货点、安全库存、ABC/XYZ、呆滞库存",
|
|
175
|
+
"/carriers": "3PL 承运商评分:按线路排名、成本异常与节省",
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
def describe(name: str, description: str, lang: str = "en") -> str:
|
|
180
|
+
"""The short description to show for a command, in the UI language."""
|
|
181
|
+
if str(lang).lower().startswith("zh") and name in COMMAND_DESCRIPTIONS_ZH:
|
|
182
|
+
return COMMAND_DESCRIPTIONS_ZH[name]
|
|
183
|
+
return short_description(description)
|
|
@@ -13,6 +13,7 @@ NameError,而这正是 requires-python = "<3.14,>=3.10" 声明支持的全部
|
|
|
13
13
|
全绿。已发布的 4.3.0 同样中招:pip install 后运行 aria-code 直接崩溃。
|
|
14
14
|
"""
|
|
15
15
|
|
|
16
|
+
from aria_code.ui.render.output import file_uri as _file_uri
|
|
16
17
|
from aria_code.apps.cli.i18n import ui_text
|
|
17
18
|
from ._ui import print_error
|
|
18
19
|
|
|
@@ -263,12 +264,13 @@ class CoreCommandsMixin:
|
|
|
263
264
|
commands that matter scrolled out of view. The rest is a topic away.
|
|
264
265
|
"""
|
|
265
266
|
from aria_code.apps.cli.commands.catalog import (
|
|
266
|
-
CORE_SLASH_COMMANDS, ENTRY_SLASH_COMMANDS, HELP_TOPICS,
|
|
267
|
+
CORE_SLASH_COMMANDS, ENTRY_SLASH_COMMANDS, HELP_TOPICS, describe,
|
|
267
268
|
)
|
|
268
269
|
zh = str(self.terminal.config.get("ui_lang", "en")).lower().startswith("zh")
|
|
269
270
|
T = (lambda a, b: a) if zh else (lambda a, b: b)
|
|
270
|
-
|
|
271
|
-
|
|
271
|
+
lang = "zh" if zh else "en"
|
|
272
|
+
core = [(n, describe(n, self.commands[n][1], lang)) for n in CORE_SLASH_COMMANDS if n in self.commands]
|
|
273
|
+
entry = [(n, describe(n, self.commands[n][1], lang)) for n in ENTRY_SLASH_COMMANDS if n in self.commands]
|
|
272
274
|
examples = (
|
|
273
275
|
T("给 utils.py 补上测试并运行", "Add tests for utils.py and run them"),
|
|
274
276
|
T("NVDA 这周走势怎么样?", "How's NVDA this week?"),
|
|
@@ -2049,7 +2051,7 @@ class CoreCommandsMixin:
|
|
|
2049
2051
|
"command": f"/tv {symbol} --pine",
|
|
2050
2052
|
}
|
|
2051
2053
|
if self.context.has_rich:
|
|
2052
|
-
self.context.console.print(f" [green]✓[/green] Pine strategy saved: [link={pine_path}]{pine_path}[/link]")
|
|
2054
|
+
self.context.console.print(f" [green]✓[/green] Pine strategy saved: [link={_file_uri(pine_path)}]{pine_path}[/link]")
|
|
2053
2055
|
self.context.console.print(" [dim]Use: TradingView → Pine Editor → paste script → Save → Add to chart[/dim]")
|
|
2054
2056
|
else:
|
|
2055
2057
|
print(f"Pine strategy saved: {pine_path}")
|
|
@@ -2058,7 +2060,7 @@ class CoreCommandsMixin:
|
|
|
2058
2060
|
companion = _write_text_companion(str(pine_path))
|
|
2059
2061
|
if companion:
|
|
2060
2062
|
if self.context.has_rich:
|
|
2061
|
-
self.context.console.print(f" [green]✓[/green] Text copy saved: [link={companion}]{companion}[/link]")
|
|
2063
|
+
self.context.console.print(f" [green]✓[/green] Text copy saved: [link={_file_uri(companion)}]{companion}[/link]")
|
|
2062
2064
|
else:
|
|
2063
2065
|
print(f"Text copy saved: {companion}")
|
|
2064
2066
|
if copy_pine:
|
|
@@ -2208,7 +2210,7 @@ class CoreCommandsMixin:
|
|
|
2208
2210
|
from rich.markup import escape as _esc
|
|
2209
2211
|
|
|
2210
2212
|
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]")
|
|
2213
|
+
self.context.console.print(f" {_T('已保存', 'saved')}: [link={_file_uri(path)}]{path_label}[/link]")
|
|
2212
2214
|
self.context.console.print(f" [dim]{_esc(_summary)}[/dim]")
|
|
2213
2215
|
if issues:
|
|
2214
2216
|
self.context.console.print(f" [yellow]⚠ {_issues_head}[/yellow]")
|
|
@@ -2266,7 +2268,7 @@ class CoreCommandsMixin:
|
|
|
2266
2268
|
}
|
|
2267
2269
|
if self.context.has_rich:
|
|
2268
2270
|
self.context.console.print(f" [green]✓[/green] comparison chart generated [dim]({elapsed_ms}ms)[/dim]")
|
|
2269
|
-
self.context.console.print(f" saved: [link={path}]{path_label}[/link]")
|
|
2271
|
+
self.context.console.print(f" saved: [link={_file_uri(path)}]{path_label}[/link]")
|
|
2270
2272
|
rows = result.get("metrics") or []
|
|
2271
2273
|
for row in rows[:6]:
|
|
2272
2274
|
self.context.console.print(
|
|
@@ -2537,9 +2539,9 @@ class CoreCommandsMixin:
|
|
|
2537
2539
|
self.context.console.print()
|
|
2538
2540
|
self.context.console.print(f" [green]✓[/green] {T('技术图表已生成', 'Chart saved')}")
|
|
2539
2541
|
if html_path:
|
|
2540
|
-
self.context.console.print(f" [dim]HTML:[/dim] [link={html_path}]{_display_path(html_path)}[/link]")
|
|
2542
|
+
self.context.console.print(f" [dim]HTML:[/dim] [link={_file_uri(html_path)}]{_display_path(html_path)}[/link]")
|
|
2541
2543
|
if png_path:
|
|
2542
|
-
self.context.console.print(f" [dim]PNG :[/dim] [link={png_path}]{_display_path(png_path)}[/link]")
|
|
2544
|
+
self.context.console.print(f" [dim]PNG :[/dim] [link={_file_uri(png_path)}]{_display_path(png_path)}[/link]")
|
|
2543
2545
|
elif png_error:
|
|
2544
2546
|
self.context.console.print(f" [yellow]{T('PNG 跳过', 'PNG skipped')}:[/yellow] {png_error[:90]}")
|
|
2545
2547
|
else:
|
|
@@ -7,6 +7,8 @@ by _rebind_mixin_globals() called at module load time.
|
|
|
7
7
|
|
|
8
8
|
from __future__ import annotations
|
|
9
9
|
|
|
10
|
+
from aria_code.ui.render.output import file_uri as _file_uri
|
|
11
|
+
|
|
10
12
|
from aria_code.apps.cli.i18n import ui_text
|
|
11
13
|
|
|
12
14
|
from ._ui import Panel, print_error
|
|
@@ -470,7 +472,7 @@ class PortfolioCommandsMixin:
|
|
|
470
472
|
if self.context.has_rich:
|
|
471
473
|
self.context.console.print(
|
|
472
474
|
f" [green]PDF 导出成功[/green] "
|
|
473
|
-
f"[link={_pdf_out}]{_pdf_out.name}[/link]"
|
|
475
|
+
f"[link={_file_uri(_pdf_out)}]{_pdf_out.name}[/link]"
|
|
474
476
|
)
|
|
475
477
|
else:
|
|
476
478
|
print(f" PDF: {_pdf_out}")
|
|
@@ -577,7 +579,7 @@ class PortfolioCommandsMixin:
|
|
|
577
579
|
else:
|
|
578
580
|
self.context.console.print(
|
|
579
581
|
f"\n [green]✅ 研报已保存[/green]"
|
|
580
|
-
f" [link={path}]{path_label}[/link]"
|
|
582
|
+
f" [link={_file_uri(path)}]{path_label}[/link]"
|
|
581
583
|
f" [dim]({_file_kb}KB)[/dim]"
|
|
582
584
|
)
|
|
583
585
|
self.context.console.print(f" [dim]文件: {path_label}[/dim]")
|
|
@@ -608,7 +610,7 @@ class PortfolioCommandsMixin:
|
|
|
608
610
|
if self.context.has_rich:
|
|
609
611
|
self.context.console.print(
|
|
610
612
|
f" [green]PDF 导出成功[/green]"
|
|
611
|
-
f" [link={_pdf_path}]{_pdf_path.name}[/link]"
|
|
613
|
+
f" [link={_file_uri(_pdf_path)}]{_pdf_path.name}[/link]"
|
|
612
614
|
f" [dim]({_pdf_kb}KB)[/dim]"
|
|
613
615
|
)
|
|
614
616
|
else:
|
|
@@ -635,7 +637,7 @@ class PortfolioCommandsMixin:
|
|
|
635
637
|
_idx = await update_report_index(out_f.parent)
|
|
636
638
|
if _idx and self.context.has_rich:
|
|
637
639
|
self.context.console.print(
|
|
638
|
-
f" [dim]索引已更新: [link={_idx}]{_idx.name}[/link][/dim]"
|
|
640
|
+
f" [dim]索引已更新: [link={_file_uri(_idx)}]{_idx.name}[/link][/dim]"
|
|
639
641
|
)
|
|
640
642
|
except Exception as _e:
|
|
641
643
|
logger.debug("[report] index update error: %s", _e)
|
|
@@ -156,8 +156,38 @@ _LABELS = {
|
|
|
156
156
|
}
|
|
157
157
|
|
|
158
158
|
|
|
159
|
+
def _inventory_headline(result: dict, zh: bool) -> str:
|
|
160
|
+
"""The first line of /inventory, in the UI language.
|
|
161
|
+
|
|
162
|
+
The tool's summary is English; in a Chinese session the detail lines under
|
|
163
|
+
it were Chinese and the headline above them was not. The formulas in the
|
|
164
|
+
basis line stay as the tool writes them.
|
|
165
|
+
"""
|
|
166
|
+
if not zh:
|
|
167
|
+
return result["summary"]
|
|
168
|
+
data, counts = result["data"], result["data"].get("counts", {})
|
|
169
|
+
return (f"分析 {len(data['items'])} 个 SKU({result.get('source', '')}):"
|
|
170
|
+
f"{counts.get('reorder', 0)} 个需补货,{counts.get('insufficient_history', 0)} 个历史数据不足,"
|
|
171
|
+
f"{counts.get('no_demand', 0)} 个无需求;呆滞 {data.get('dead_stock', 0)} 个,慢动 {data.get('slow_stock', 0)} 个。")
|
|
172
|
+
|
|
173
|
+
|
|
174
|
+
def _carriers_headline(result: dict, zh: bool) -> str:
|
|
175
|
+
"""The first line of /carriers, in the UI language (see _inventory_headline)."""
|
|
176
|
+
if not zh:
|
|
177
|
+
return result["summary"]
|
|
178
|
+
import re
|
|
179
|
+
|
|
180
|
+
data = result["data"]
|
|
181
|
+
waybills = re.match(r"(\d+)", result.get("summary", ""))
|
|
182
|
+
lanes = {c["lane"] for c in data.get("scorecard", [])}
|
|
183
|
+
carriers = {c["carrier"] for c in data.get("scorecard", [])}
|
|
184
|
+
return (f"{waybills.group(1) if waybills else '?'} 张运单,{len(lanes)} 条线路、{len(carriers)} 家承运商"
|
|
185
|
+
f"({result.get('source', '')});{len(data.get('anomalies', []))} 个异常待核实;"
|
|
186
|
+
f"{len(data.get('savings', []))} 个节省机会,预计共 {data.get('estimated_total_saving', 0):,.2f}。")
|
|
187
|
+
|
|
188
|
+
|
|
159
189
|
def _labels(self) -> dict:
|
|
160
|
-
"""Labels in the UI language. The tools'
|
|
190
|
+
"""Labels in the UI language. The tools' formulas stay as they write them."""
|
|
161
191
|
config = getattr(getattr(self, "terminal", None), "config", None) or {}
|
|
162
192
|
lang = str(config.get("ui_lang", "en") or "en").lower()
|
|
163
193
|
return _LABELS["zh" if lang.startswith("zh") else "en"]
|
|
@@ -169,12 +199,19 @@ def _abc_xyz(item: dict) -> str:
|
|
|
169
199
|
|
|
170
200
|
|
|
171
201
|
def _emit(self, text: str, style: str = "") -> None:
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
202
|
+
"""One line of a report, wrapped under its own indent.
|
|
203
|
+
|
|
204
|
+
The indent was typed as leading spaces, so in an 80-column terminal a
|
|
205
|
+
wrapped line went back to column 0 ("cover · ABC/XYZ –/X" under the
|
|
206
|
+
margin). It is plain text, not markup: a SKU or file name may hold "[".
|
|
207
|
+
"""
|
|
208
|
+
if not self.context.has_rich:
|
|
177
209
|
print(text)
|
|
210
|
+
return
|
|
211
|
+
from aria_code.ui.render.output import print_hanging
|
|
212
|
+
|
|
213
|
+
body = text.lstrip(" ")
|
|
214
|
+
print_hanging(self.context.console, text[: len(text) - len(body)], body, style)
|
|
178
215
|
|
|
179
216
|
|
|
180
217
|
class LogisticsCommandsMixin:
|
|
@@ -207,7 +244,7 @@ class LogisticsCommandsMixin:
|
|
|
207
244
|
data = result["data"]
|
|
208
245
|
if not data["scope"]["client_facing"]:
|
|
209
246
|
_emit(self, data["scope"]["marker"], "bold red")
|
|
210
|
-
_emit(self, result["
|
|
247
|
+
_emit(self, _inventory_headline(result, text is _LABELS["zh"]), "bold")
|
|
211
248
|
for item in data["items"]:
|
|
212
249
|
if item["action"] != "reorder":
|
|
213
250
|
continue
|
|
@@ -239,7 +276,7 @@ class LogisticsCommandsMixin:
|
|
|
239
276
|
data = result["data"]
|
|
240
277
|
if not data["scope"]["client_facing"]:
|
|
241
278
|
_emit(self, data["scope"]["marker"], "bold red")
|
|
242
|
-
_emit(self, result["
|
|
279
|
+
_emit(self, _carriers_headline(result, text is _LABELS["zh"]), "bold")
|
|
243
280
|
for entry in data["scorecard"]:
|
|
244
281
|
rank = f"#{entry['rank_in_lane']}" if entry["rank_in_lane"] else text["too_few"]
|
|
245
282
|
on_time = (text["on_time"].format(rate=entry["on_time_rate"], low=entry["on_time_lower_bound"])
|
|
@@ -103,6 +103,7 @@ except ImportError:
|
|
|
103
103
|
readline = None
|
|
104
104
|
import logging
|
|
105
105
|
import time
|
|
106
|
+
from aria_code.ui.render.output import file_uri as _file_uri
|
|
106
107
|
import shlex
|
|
107
108
|
import pathlib
|
|
108
109
|
import uuid
|
|
@@ -2308,13 +2309,13 @@ def _print_pending_artifact_location(pending_artifact: dict) -> None:
|
|
|
2308
2309
|
console.print(f" [dim]类型: {kind}[/dim]")
|
|
2309
2310
|
if paths:
|
|
2310
2311
|
for label, path in paths:
|
|
2311
|
-
console.print(f" [dim]{label}:[/dim] [link={path}]{_display_path(path, fallback=label)}[/link]")
|
|
2312
|
+
console.print(f" [dim]{label}:[/dim] [link={_file_uri(path)}]{_display_path(path, fallback=label)}[/link]")
|
|
2312
2313
|
elif command:
|
|
2313
2314
|
console.print(" [yellow]上一项任务只记录了命令,尚未记录具体文件路径。[/yellow]")
|
|
2314
2315
|
if child_paths:
|
|
2315
2316
|
console.print(" [dim]包含的单标的图表:[/dim]")
|
|
2316
2317
|
for child_label, label, path in child_paths:
|
|
2317
|
-
console.print(f" [dim]{child_label} {label}:[/dim] [link={path}]{_display_path(path, fallback=child_label)}[/link]")
|
|
2318
|
+
console.print(f" [dim]{child_label} {label}:[/dim] [link={_file_uri(path)}]{_display_path(path, fallback=child_label)}[/link]")
|
|
2318
2319
|
if command:
|
|
2319
2320
|
console.print(f" [dim]复现命令: {command}[/dim]")
|
|
2320
2321
|
console.print()
|
|
@@ -2515,7 +2516,7 @@ Plotly.newPlot('chart', [
|
|
|
2515
2516
|
"rows": z_rows,
|
|
2516
2517
|
})
|
|
2517
2518
|
if HAS_RICH:
|
|
2518
|
-
console.print(f" [dim]Z-Score 图表: [link={art.path}]{_display_path(art.path)}[/link][/dim]")
|
|
2519
|
+
console.print(f" [dim]Z-Score 图表: [link={_file_uri(art.path)}]{_display_path(art.path)}[/link][/dim]")
|
|
2519
2520
|
import subprocess
|
|
2520
2521
|
try:
|
|
2521
2522
|
subprocess.Popen(["open", str(art.path)])
|
|
@@ -4400,13 +4401,17 @@ class ArtheraTerminal:
|
|
|
4400
4401
|
# improve its finance model — so disclose it up front.
|
|
4401
4402
|
import os as _os
|
|
4402
4403
|
if not _os.environ.get("ARIA_NO_TELEMETRY"):
|
|
4403
|
-
|
|
4404
|
-
|
|
4404
|
+
# Padded, not prefixed with spaces: in 80 columns the
|
|
4405
|
+
# second line fell back to column 0.
|
|
4406
|
+
from rich.padding import Padding as _Pad
|
|
4407
|
+
from rich.text import Text as _Txt
|
|
4408
|
+
console.print(_Pad(_Txt.from_markup(
|
|
4409
|
+
"[dim]隐私:反馈默认[bold]仅存本地[/bold],不上传。"
|
|
4405
4410
|
"opt-in 后可用于改进金融模型 · /privacy 查看与开关 · /bug 报告问题[/dim]"
|
|
4406
4411
|
if str(_ui_lang).lower().startswith("zh") else
|
|
4407
|
-
"
|
|
4412
|
+
"[dim]Feedback stays [bold]on this machine[/bold] unless you opt in to "
|
|
4408
4413
|
"help improve Aria · /privacy · /bug[/dim]"
|
|
4409
|
-
)
|
|
4414
|
+
), (0, 0, 0, 2)))
|
|
4410
4415
|
else:
|
|
4411
4416
|
if _banner_mode != "off":
|
|
4412
4417
|
from ui.banner import render_full_banner as _rfb
|
|
@@ -21,8 +21,8 @@ from aria_code.apps.cli.commands.catalog import (
|
|
|
21
21
|
COMMAND_ALIASES,
|
|
22
22
|
CORE_SLASH_COMMANDS,
|
|
23
23
|
ENTRY_SLASH_COMMANDS,
|
|
24
|
+
describe,
|
|
24
25
|
popup_rank,
|
|
25
|
-
short_description,
|
|
26
26
|
)
|
|
27
27
|
from aria_code.packages.aria_services.references import REFERENCE_KINDS, reference_search_roots
|
|
28
28
|
|
|
@@ -307,7 +307,7 @@ if HAS_PT:
|
|
|
307
307
|
"设置": "运行设置" if self.lang == "zh" else "Runtime",
|
|
308
308
|
"系统": "会话" if self.lang == "zh" else "Session",
|
|
309
309
|
}.get(cat, "")
|
|
310
|
-
desc =
|
|
310
|
+
desc = describe(name, desc, self.lang)
|
|
311
311
|
meta_body = desc[:44] + ("…" if len(desc) > 44 else "")
|
|
312
312
|
meta_str = f"{cat_label} · {meta_body}" if cat_label else meta_body
|
|
313
313
|
|
|
@@ -52,6 +52,43 @@ def _is_markdown_table_separator(line: str) -> bool:
|
|
|
52
52
|
return bool(cells) and all(_TABLE_SEPARATOR_CELL.fullmatch(cell) for cell in cells)
|
|
53
53
|
|
|
54
54
|
|
|
55
|
+
# Column headers that name no dimension — the value column of a key/value table.
|
|
56
|
+
_GENERIC_TABLE_HEADERS = {"value", "values", "meaning", "数值", "值", "含义", "说明"}
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _table_rows_as_lines(headers: list[str], rows: list[list[str]]) -> list[str]:
|
|
60
|
+
"""One line per table row: the first cell as its label, the rest after it.
|
|
61
|
+
|
|
62
|
+
Each cell used to become its own bullet — "• 指标:最新价 / • 数值:USD 332.89"
|
|
63
|
+
— so a ten-row snapshot table took about thirty lines in an 80-column
|
|
64
|
+
terminal. Generic value columns ("Value", "数值") lose their header; a
|
|
65
|
+
column that names a dimension keeps it ("观察:价格高于 MA20"). A value
|
|
66
|
+
already contained in the one before it ("51.9,中性" then "中性") is dropped.
|
|
67
|
+
"""
|
|
68
|
+
lines: list[str] = []
|
|
69
|
+
for row in rows:
|
|
70
|
+
cells = [(header, (row[pos] if pos < len(row) else "").strip())
|
|
71
|
+
for pos, header in enumerate(headers) if header]
|
|
72
|
+
if not cells:
|
|
73
|
+
continue
|
|
74
|
+
label = cells[0][1] or "—"
|
|
75
|
+
parts: list[str] = []
|
|
76
|
+
previous = ""
|
|
77
|
+
for header, value in cells[1:]:
|
|
78
|
+
if not value or value in ("—", "-") or (previous and value in previous):
|
|
79
|
+
continue
|
|
80
|
+
generic = header.strip().lower() in _GENERIC_TABLE_HEADERS
|
|
81
|
+
parts.append(value if generic else f"{header}{':' if _has_cjk(header) else ': '}{value}")
|
|
82
|
+
previous = value
|
|
83
|
+
colon = ":" if _has_cjk(label) or any(_has_cjk(h) for h, _ in cells) else ": "
|
|
84
|
+
lines.append(f"- **{label}**{colon}{' · '.join(parts) or '—'}")
|
|
85
|
+
return lines
|
|
86
|
+
|
|
87
|
+
|
|
88
|
+
def _has_cjk(text: str) -> bool:
|
|
89
|
+
return any("\u4e00" <= ch <= "\u9fff" for ch in text or "")
|
|
90
|
+
|
|
91
|
+
|
|
55
92
|
def adapt_markdown_for_width(markup: str, width: int, *, table_breakpoint: int = 96) -> str:
|
|
56
93
|
"""Convert GFM tables to stacked records when the terminal is narrow.
|
|
57
94
|
|
|
@@ -92,18 +129,7 @@ def adapt_markdown_for_width(markup: str, width: int, *, table_breakpoint: int =
|
|
|
92
129
|
cursor += 1
|
|
93
130
|
|
|
94
131
|
if headers and rows:
|
|
95
|
-
|
|
96
|
-
pairs = [
|
|
97
|
-
(header, row[pos] if pos < len(row) else "—")
|
|
98
|
-
for pos, header in enumerate(headers)
|
|
99
|
-
if header
|
|
100
|
-
]
|
|
101
|
-
if not pairs:
|
|
102
|
-
continue
|
|
103
|
-
first_header, first_value = pairs[0]
|
|
104
|
-
output.append(f"- **{first_header}**:{first_value or '—'}")
|
|
105
|
-
for header, value in pairs[1:]:
|
|
106
|
-
output.append(f" - **{header}**:{value or '—'}")
|
|
132
|
+
output.extend(_table_rows_as_lines(headers, rows))
|
|
107
133
|
index = cursor
|
|
108
134
|
continue
|
|
109
135
|
|
|
@@ -179,6 +205,22 @@ def format_turn_footer(metadata, *, mode: str = "compact", copy_available: bool
|
|
|
179
205
|
return " · ".join(out)
|
|
180
206
|
|
|
181
207
|
|
|
208
|
+
def file_uri(path: object) -> str:
|
|
209
|
+
"""A terminal-hyperlink target for a local file: file:///Users/…/chart.html.
|
|
210
|
+
|
|
211
|
+
Saved files were linked as [link=/Users/…/chart.html]: OSC 8 hyperlinks
|
|
212
|
+
take a URI, so terminals that support them had nothing to open. A value
|
|
213
|
+
that already has a scheme (https://…) is returned unchanged.
|
|
214
|
+
"""
|
|
215
|
+
text = str(path or "")
|
|
216
|
+
if not text or "://" in text:
|
|
217
|
+
return text
|
|
218
|
+
try:
|
|
219
|
+
return pathlib.Path(text).expanduser().resolve().as_uri()
|
|
220
|
+
except (OSError, ValueError):
|
|
221
|
+
return text
|
|
222
|
+
|
|
223
|
+
|
|
182
224
|
def display_path(path: object, *, fallback: str = "file") -> str:
|
|
183
225
|
"""Return a path-safe display value for user-facing UI."""
|
|
184
226
|
if not path:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aria-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.89.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
|
|
@@ -572,6 +572,7 @@ tests/test_evals_harness.py
|
|
|
572
572
|
tests/test_event_import_roots.py
|
|
573
573
|
tests/test_extended_tools.py
|
|
574
574
|
tests/test_feishu_swarm_config.py
|
|
575
|
+
tests/test_file_links.py
|
|
575
576
|
tests/test_finalize_release.py
|
|
576
577
|
tests/test_finance_renderers.py
|
|
577
578
|
tests/test_finance_service_catalog.py
|
|
@@ -614,6 +615,7 @@ tests/test_mentions.py
|
|
|
614
615
|
tests/test_model_capability_registry.py
|
|
615
616
|
tests/test_model_choice_is_the_users.py
|
|
616
617
|
tests/test_model_selection_state.py
|
|
618
|
+
tests/test_narrow_chinese_output.py
|
|
617
619
|
tests/test_native_binary_entrypoints.py
|
|
618
620
|
tests/test_native_installer.py
|
|
619
621
|
tests/test_natural_language_routing.py
|
|
@@ -743,4 +745,5 @@ tests/test_workspace_context.py
|
|
|
743
745
|
tests/test_workspace_files.py
|
|
744
746
|
tests/test_workspace_scope.py
|
|
745
747
|
tests/test_workspace_service.py
|
|
746
|
-
tests/test_workspace_verify.py
|
|
748
|
+
tests/test_workspace_verify.py
|
|
749
|
+
tests/test_wrapped_indent.py
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
"""Saved files are links a terminal can open.
|
|
2
|
+
|
|
3
|
+
They were linked as [link=/Users/…/chart.html]: terminal hyperlinks (OSC 8)
|
|
4
|
+
take a URI, so a terminal that supports them had nothing to open, and the
|
|
5
|
+
line showed only "232347_AAPL_chart.html".
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import io
|
|
11
|
+
import pathlib
|
|
12
|
+
import re
|
|
13
|
+
|
|
14
|
+
from rich.console import Console
|
|
15
|
+
|
|
16
|
+
from aria_code.ui.render.output import file_uri
|
|
17
|
+
|
|
18
|
+
SRC = pathlib.Path(__file__).resolve().parents[1] / "src" / "aria_code"
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def test_a_path_becomes_a_file_uri(tmp_path):
|
|
22
|
+
target = tmp_path / "my charts" / "AAPL_chart.html"
|
|
23
|
+
assert file_uri(str(target)) == target.resolve().as_uri()
|
|
24
|
+
assert file_uri(str(target)).startswith("file:///") and "%20" in file_uri(str(target))
|
|
25
|
+
assert file_uri("https://example.com/x") == "https://example.com/x"
|
|
26
|
+
assert file_uri("") == ""
|
|
27
|
+
|
|
28
|
+
|
|
29
|
+
def test_the_terminal_receives_the_uri(tmp_path):
|
|
30
|
+
target = tmp_path / "AAPL_chart.html"
|
|
31
|
+
console = Console(file=io.StringIO(), force_terminal=True, color_system="truecolor")
|
|
32
|
+
console.print(f"saved: [link={file_uri(target)}]AAPL_chart.html[/link]")
|
|
33
|
+
assert f"\x1b]8;id=" in console.file.getvalue() and target.resolve().as_uri() in console.file.getvalue()
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
def test_every_file_link_goes_through_file_uri():
|
|
37
|
+
raw = []
|
|
38
|
+
for path in SRC.rglob("*.py"):
|
|
39
|
+
for number, line in enumerate(path.read_text(encoding="utf-8").splitlines(), 1):
|
|
40
|
+
for target in re.findall(r"\[link=\{([^}]+)\}\]", line):
|
|
41
|
+
if not target.startswith("_file_uri(") and "url" not in target.lower():
|
|
42
|
+
raw.append(f"{path.relative_to(SRC)}:{number}: {target}")
|
|
43
|
+
assert not raw, raw
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
"""The Chinese UI in an 80-column terminal reads as Chinese and stays short.
|
|
2
|
+
|
|
3
|
+
Recorded: /help and the "/" popup described commands in English under 命令,
|
|
4
|
+
and /inventory and /carriers put an English headline over Chinese detail
|
|
5
|
+
lines. (Narrow tables are covered in test_output_rendering.)
|
|
6
|
+
"""
|
|
7
|
+
|
|
8
|
+
from __future__ import annotations
|
|
9
|
+
|
|
10
|
+
import io
|
|
11
|
+
import sys
|
|
12
|
+
|
|
13
|
+
from rich.console import Console
|
|
14
|
+
|
|
15
|
+
from aria_code.apps.cli.commands.catalog import COMMAND_DESCRIPTIONS_ZH, CORE_SLASH_COMMANDS, ENTRY_SLASH_COMMANDS, describe
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
def test_every_command_help_shows_has_a_chinese_description():
|
|
19
|
+
missing = [n for n in (*CORE_SLASH_COMMANDS, *ENTRY_SLASH_COMMANDS) if n not in COMMAND_DESCRIPTIONS_ZH]
|
|
20
|
+
assert not missing, missing
|
|
21
|
+
assert describe("/help", "Show commands and examples", "zh") == "命令与示例"
|
|
22
|
+
assert describe("/help", "Show commands and examples", "en") == "Show commands and examples"
|
|
23
|
+
assert describe("/realty", "Real-estate data: /realty X", "zh") == "Real-estate data"
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def test_help_in_chinese_describes_in_chinese(monkeypatch):
|
|
27
|
+
sys.argv = ["aria-code"]
|
|
28
|
+
import aria_code.aria_cli as cli
|
|
29
|
+
|
|
30
|
+
terminal = cli.ArtheraTerminal(dict(cli.DEFAULT_CONFIG, ui_lang="zh"))
|
|
31
|
+
console = Console(file=io.StringIO(), width=80, color_system=None)
|
|
32
|
+
monkeypatch.setattr(terminal.commands.context, "console", console)
|
|
33
|
+
monkeypatch.setattr(terminal.commands.context, "has_rich", True)
|
|
34
|
+
terminal.commands.cmd_help("")
|
|
35
|
+
text = console.file.getvalue()
|
|
36
|
+
assert "命令与示例" in text and "Show commands and examples" not in text
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def test_the_popup_describes_in_chinese():
|
|
40
|
+
from prompt_toolkit.document import Document
|
|
41
|
+
|
|
42
|
+
from aria_code.ui.completer import AriaPTCompleter
|
|
43
|
+
|
|
44
|
+
completer = AriaPTCompleter({"/help": (lambda a: None, "Show commands and examples")}, [], [], lang="zh")
|
|
45
|
+
meta = str(next(completer.get_completions(Document("/he"), None)).display_meta_text)
|
|
46
|
+
assert "命令与示例" in meta
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def test_logistics_headlines_follow_the_ui_language():
|
|
50
|
+
from aria_code.apps.cli.commands.warehouse_cmds import _carriers_headline, _inventory_headline
|
|
51
|
+
|
|
52
|
+
inventory = {"summary": "7 SKUs analysed (file:skus.csv): 3 to reorder", "source": "file:skus.csv",
|
|
53
|
+
"data": {"items": [{}] * 7, "counts": {"reorder": 3, "insufficient_history": 1, "no_demand": 1},
|
|
54
|
+
"dead_stock": 0, "slow_stock": 0}}
|
|
55
|
+
assert _inventory_headline(inventory, zh=True) == (
|
|
56
|
+
"分析 7 个 SKU(file:skus.csv):3 个需补货,1 个历史数据不足,1 个无需求;呆滞 0 个,慢动 0 个。")
|
|
57
|
+
assert _inventory_headline(inventory, zh=False) == inventory["summary"]
|
|
58
|
+
carriers = {"summary": "100 waybills across 3 lanes and 5 carriers", "source": "file:waybills.csv",
|
|
59
|
+
"data": {"scorecard": [{"lane": "A", "carrier": "X"}, {"lane": "B", "carrier": "Y"}],
|
|
60
|
+
"anomalies": [1, 2], "savings": [1], "estimated_total_saving": 645.49}}
|
|
61
|
+
assert _carriers_headline(carriers, zh=True) == (
|
|
62
|
+
"100 张运单,2 条线路、2 家承运商(file:waybills.csv);2 个异常待核实;1 个节省机会,预计共 645.49。")
|