aria-code 0.106.0__tar.gz → 0.108.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.106.0/src/aria_code.egg-info → aria_code-0.108.0}/PKG-INFO +4 -2
- {aria_code-0.106.0 → aria_code-0.108.0}/README.md +3 -1
- {aria_code-0.106.0 → aria_code-0.108.0}/pyproject.toml +1 -1
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/_version.py +1 -1
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/chat_turn.py +11 -6
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/headless.py +12 -8
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/base.py +4 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/chat_routing.py +3 -9
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +30 -2
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +11 -6
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/runtime_consumer.py +8 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tools/file_tools.py +8 -7
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tools/system_tools.py +4 -2
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tools/write_tools.py +7 -4
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/workspace_route.py +29 -3
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/aria_cli.py +21 -1
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/settings.py +4 -1
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/acceptance.py +8 -5
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/agent_loop.py +26 -5
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/gateway.py +11 -4
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/tool_executor.py +55 -8
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/safety/sandbox.py +3 -2
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/workspace/files.py +32 -6
- {aria_code-0.106.0 → aria_code-0.108.0/src/aria_code.egg-info}/PKG-INFO +4 -2
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code.egg-info/SOURCES.txt +1 -0
- aria_code-0.108.0/tests/test_local_workspace_execution.py +257 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_os_sandbox.py +22 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_release_chain.py +23 -2
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_release_verification_waits.py +47 -21
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_agent_loop.py +2 -1
- aria_code-0.108.0/tests/test_sse_stream_contract.py +93 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_tool_step_output.py +18 -4
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_wheel_is_installable.py +10 -3
- aria_code-0.106.0/tests/test_sse_stream_contract.py +0 -32
- {aria_code-0.106.0 → aria_code-0.108.0}/LICENSE +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/NOTICE +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/setup.cfg +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/adk_apps/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/base.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/code_review.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/critic.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/deepen.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/models.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/pipeline.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/themes.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/deep/tiers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/engineering/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/engineering/coder.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/engineering/tester.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/catalyst.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/debate.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/earnings.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/fundamental.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/macro.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/news.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/risk.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/sector.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/strategist.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/synthesis.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/financial/technical.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/orchestrator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/portfolio_agent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/business_match.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/signal_scheme.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/sports/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/sports/football_agent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/supervisor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/team.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/aliyun_data_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/README.md +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/channels/README.md +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/channels/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/channels/approvals.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/channels/conversation.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/channels/digest.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/channels/intake.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/channels/registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/channels/tradingview.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/README.md +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/_optional.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/broker_render.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/core_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/market.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/team.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/config_paths.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/config_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/constants.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/context.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/deterministic.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/direct.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/earnings_view.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/exec_events.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/football_reports.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/google_login.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/helpers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/hooks.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/i18n.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/intent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/intent_router.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/main.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/market_hours.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/market_universe.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/message_processing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/mixin_binding.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/preflight.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/project_aria.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/review_runner.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/sandbox.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/session_export.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/session_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/terminal_chrome.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tools/context.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/update_check.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/updater.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/daemon/README.md +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/vscode/README.md +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/apps/vscode/package.json +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/aria_daemon.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/aria_feishu_bot.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/aria_mcp_server.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/aria_relay_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/aria_relay_server.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/aria_telegram_bot.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ariarc.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/artifacts.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/backtest_engine.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/backtest_report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/automation.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/base.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/capabilities.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/cn/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/config.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/intl/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/paper_broker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/planning.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/brokers/trading.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/canva_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/change_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/aria_relay_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/canva_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/figma_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/football_data_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/kling_video_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/market_data_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/openai_image_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/runway_video_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/cloud_memory.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/command_safety.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/computer_use_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/dashboard_generator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/data_analysis_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/data_cleaner.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/data_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/base.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/router.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/demo_player.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/doctor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/domain/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/domain/backtest_engine.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/domain/backtest_report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/domain/finance_formulas.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/domain/strategy_vault.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/evals/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/evals/harness.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/evals/runner.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/evals/summary.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/external_agent_runner.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/figma_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/file_analysis_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/finance_formulas.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/football_data_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/image_gen_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/intent_classifier.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/kling_video_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/licensing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/local_finance_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/local_image_provider.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/local_llm_provider.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/macro_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/markdown_pdf.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/market_data_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/mcp_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/memory_manager.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/model_capability.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/notification_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/openai_image_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_core/export.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_core/paths.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_infra/product.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/cache.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/context.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/data.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/references.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_services/usage.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packs/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packs/base.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packs/finance/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packs/logistics/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packs/payments/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packs/realty/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packs/registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/packs/rules.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/plan_utils.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/plugin_loader.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/portfolio_ledger.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/preview_server.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/privacy/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/privacy/feedback.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/project_review.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/project_review_api.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/project_review_server.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/project_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/llm/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/llm/anthropic.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/llm/base.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/llm/custom.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/llm/ollama.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/llm/registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/local_image_provider.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/local_llm_provider.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/providers/tool_messages.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/realty_data_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/relay_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/report_exporters.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/report_generator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/review_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/approval.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/budget.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/checkpoints.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/crash_report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/events.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/lsp.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/orchestrator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/processes.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/repo_map.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/run_state.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/run_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/self_healing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/subagent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/task_ledger.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/tool_policy.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runtime/worktrees.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/runway_video_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/safety/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/safety/permissions.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/safety/service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/setup_wizard.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/spreadsheet_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/strategy_vault.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/artifact_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/broker_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/build_quant_engine.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/code_audit_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/computer_use_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/extended_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/image_gen_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/local_finance_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/logistics_carriers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/logistics_inventory.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/logistics_io.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/logistics_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/macro_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/notification_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/project_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/realty_data_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/tools/stripe_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/banner.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/completer.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/console.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/image_render.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/input_box.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/mentions.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/picker.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/render/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/render/finance.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/render/market.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/render/output.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/render/responsive.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/render/team.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/robot.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/ui/startup_dashboard.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/utils/vscode_uri.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/video_analysis.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/video_editor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/workspace/__init__.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/workspace/verify.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/workspace_changes.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/workspace_context.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/workspace_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code/workspace_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code.egg-info/entry_points.txt +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code.egg-info/requires.txt +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/src/aria_code.egg-info/top_level.txt +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_adk_market_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_agent_key_points_language.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_agent_team_fallback.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_analyze_file_tool.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_architecture_ledger_is_true.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_architecture_report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_aria_cli_core.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_aria_mcp_server.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_aria_sdk.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_artifact_publishing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_artifacts_and_reports.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ashare_prediction_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_background_processes.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_backtest_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_backtest_engine.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_backtest_report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_backtest_runs_what_it_names.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_broken_akshare_is_optional.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_broker_automation.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_broker_chat_confirm_gate.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_broker_planning.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_broker_safety.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_broker_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_budget.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_business_workflow_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_canva_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_canvas_cmds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_card_approvals.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_channel_intake.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_channels.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_chart_handlers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_chat_bots_fail_closed.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_chat_routing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ci_security_workflow.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_cli_app_split.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_cli_bootstrap.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_cli_config_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_cli_lifecycle_hooks.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_cli_runtime_consumer.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_cli_tool_executor_module.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_cli_updater.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_cloud_memory.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_code_audit_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_code_review_agent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_codegen_output.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_coder_tester_self_healing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_coder_tool_safety.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_collaboration.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_command_loggers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_command_safety.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_compare_strategies.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_completions_builder.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_config_paths.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_configured_provider.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_container_entrypoint.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_container_entrypoints.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_context_checkpoints.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_context_references.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_context_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_conversation_core.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_crash_report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_credential_file_permissions.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_custom_providers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_daemon_gateway_config.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_dashboard_generator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_data_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_data_service_imports.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_data_without_model.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_datasource_routing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_deep_analysis.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_degrades_without_quant_engine.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_doctor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_doctor_describes_the_current_install.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_doctor_npm_scope.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_edit_and_command_safety.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_engine_boundary.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_english_output_group.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_enterprise_tool_honesty.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_env_switch_docs.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_eval_summary.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_eval_task_bank.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_eval_trajectories.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_evals_harness.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_event_import_roots.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_exec_events.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_extended_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_feishu_swarm_config.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_file_links.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_finalize_release.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_finance_renderers.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_finance_service_catalog.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_first_run_output.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_first_run_works.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_football_agent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_football_prediction_output.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_google_cloud_models.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_google_cloud_routing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_google_login.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_google_search_provider.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_headless_command_approval.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_headless_is_agentic.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_honest_surfaces.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_image_gen_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_image_inputs.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_import_graph_budget.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_intent_router.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_intent_signals.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_kling_video_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_lazy_rebind.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_legacy_module_imports.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_license_consistency.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_licensing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_local_image_provider.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_logistics_3pl.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_logistics_and_finance_agents.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_lsp.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_markdown_pdf.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_market_answers_in_english.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_market_data_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_market_history_inheritance.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_market_history_tool.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_market_hours.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_market_questions_on_backend.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_market_symbol_extraction.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_market_universe.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_mcp_circuit.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_mcp_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_mentions.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_model_capability_registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_model_choice_is_the_users.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_model_selection_state.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_narrow_chinese_output.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_native_binary_entrypoints.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_native_installer.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_natural_language_routing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_new_modules.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_no_tools_route.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_no_uncommitted_imports.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_numeric_listings.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ollama_stream_imports.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ollama_stream_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_openai_image_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_operations_suite.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_output_discipline_prompt.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_output_rendering.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_packages_facade.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_packaging_constraints.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_packaging_manifest.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_packs_domains.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_pdf_report.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_pick_best_installed_model.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_plan_mode.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_platform_package_assembly.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_platform_packages.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_platform_publish.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_plotly_html_output.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_portfolio_language.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_portfolio_ledger.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_post_turn_context_decision.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_preflight.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_preview_server.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_privacy_feedback.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_project_aria.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_project_context_files.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_project_review.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_project_review_api.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_prompt_assembly.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_prompt_selection.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_provider_autoconfig.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_provider_error_messages.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_provider_integration.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_provider_registry.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_public_service_status.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_quant_engine_namespace.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_rebind_contract.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_rebind_namespace_contract.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_relay_client_credentials.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_relay_event_verification.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_relay_sends_for_clients.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_relay_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_relay_url.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_release_commit_identity.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_release_push_is_atomic.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_release_reaches_the_registries.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_release_workflow_permissions.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_report_charts.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_report_generator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_report_prompt_language.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_research_protocol.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_research_quality.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_responsive_rendering.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_review_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_risk_earnings_ops.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_root_module_budget.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_rsi_without_pandas_ta.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_acceptance.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_approval.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_bridge.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_bridge_fallback.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_checkpoints.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_event_identity.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_gateway.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_repo_map.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_run_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_tool_executor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runtime_worktrees.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_runway_video_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_safety_permissions.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_safety_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_safety_service_adoption.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_service_diagnostics_security.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_session_search.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_settings_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_shell_commands_as_written.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_shipper_digest.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_single_import_root.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_skill_agent_binding.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_skill_catalog.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_skill_loader.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_slash_popup.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_spreadsheet_tools.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_startup_dashboard.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_startup_keeps_cloud_model.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_startup_latency.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_status_language.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_streaming_pipeline.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_stripe_agent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_subagent.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_supervisor_routing.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_system_prompts.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_system_tools_output.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_task_orchestrator.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_team_analysts.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_team_synthesis.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_terminal_mixins.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_terminal_snapshots.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_tls_trust_store.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_tool_policy.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_tool_scope.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_trading_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_tradingview_bridge.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_turn_planning.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ui_completer_references.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ui_console_theme.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ui_input_box.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ui_language_and_model.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_ui_robot_banner.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_update_health_routes.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_verification_hint.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_verification_policy.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_version_consistency.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_version_counter.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_vertex_empty_rounds.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_vertex_models.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_video_analysis.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_video_editor.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_vscode_mcp.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_warehouse_agents.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_warehouse_cli_registration.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_warehouse_erp_client.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_warehouse_workflow.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_workspace_changes.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_workspace_context.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_workspace_files.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_workspace_scope.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_workspace_service.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_workspace_verify.py +0 -0
- {aria_code-0.106.0 → aria_code-0.108.0}/tests/test_wrapped_indent.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: aria-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.108.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
|
|
@@ -246,11 +246,13 @@ aria-code --local
|
|
|
246
246
|
Or run a single task in an existing project:
|
|
247
247
|
|
|
248
248
|
```bash
|
|
249
|
-
aria-code -p "Inspect this project, fix the failing tests, run them, and summarize the diff."
|
|
249
|
+
aria-code -C ~/Projects/my-app -p "Inspect this project, fix the failing tests, run them, and summarize the diff."
|
|
250
250
|
```
|
|
251
251
|
|
|
252
252
|
Aria may request approval before editing files or running commands, according to the configured permission mode. Review changes and test results before committing them.
|
|
253
253
|
|
|
254
|
+
Google Cloud models can use Aria's local file and command tools: inference stays in the cloud while edits and tests run on your computer. Use `--read-dir DIR` for additional file-reading locations and `--add-dir DIR` for additional writable directories. Command-line directory grants last for this invocation only. See [local projects and file access](docs/local-workspace.md) for permissions and Google authentication.
|
|
255
|
+
|
|
254
256
|
In a script or CI job, `--json` prints one JSON result and `--format jsonl` prints one JSON event per line as the turn runs (`turn.started`, `tool.started`, `tool.completed`, `turn.completed`). Only JSON goes to stdout, and a failed turn exits 1. With no one there to approve, pass `--allow-tools edit_file,run_command` for the tools the job may use.
|
|
255
257
|
|
|
256
258
|
```bash
|
|
@@ -90,11 +90,13 @@ aria-code --local
|
|
|
90
90
|
Or run a single task in an existing project:
|
|
91
91
|
|
|
92
92
|
```bash
|
|
93
|
-
aria-code -p "Inspect this project, fix the failing tests, run them, and summarize the diff."
|
|
93
|
+
aria-code -C ~/Projects/my-app -p "Inspect this project, fix the failing tests, run them, and summarize the diff."
|
|
94
94
|
```
|
|
95
95
|
|
|
96
96
|
Aria may request approval before editing files or running commands, according to the configured permission mode. Review changes and test results before committing them.
|
|
97
97
|
|
|
98
|
+
Google Cloud models can use Aria's local file and command tools: inference stays in the cloud while edits and tests run on your computer. Use `--read-dir DIR` for additional file-reading locations and `--add-dir DIR` for additional writable directories. Command-line directory grants last for this invocation only. See [local projects and file access](docs/local-workspace.md) for permissions and Google authentication.
|
|
99
|
+
|
|
98
100
|
In a script or CI job, `--json` prints one JSON result and `--format jsonl` prints one JSON event per line as the turn runs (`turn.started`, `tool.started`, `tool.completed`, `turn.completed`). Only JSON goes to stdout, and a failed turn exits 1. With no one there to approve, pass `--allow-tools edit_file,run_command` for the tools the job may use.
|
|
99
101
|
|
|
100
102
|
```bash
|
|
@@ -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.108.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" }
|
|
@@ -203,6 +203,8 @@ class ChatTurnMixin:
|
|
|
203
203
|
# 识别公司名 → ticker 并调 get_market_data,不需要硬编码字典。
|
|
204
204
|
# 本地小模型(<14B)工具调用不稳定,保留确定性路由作降级。
|
|
205
205
|
_curr_model_id = self.config.get("model", "")
|
|
206
|
+
from aria_code.apps.cli.workspace_route import workspace_config
|
|
207
|
+
_runtime_config = workspace_config(message, _curr_model_id, self.config, self.api_url)
|
|
206
208
|
_model_has_tools = False
|
|
207
209
|
if _HAS_MODEL_CAP:
|
|
208
210
|
try:
|
|
@@ -213,7 +215,7 @@ class ChatTurnMixin:
|
|
|
213
215
|
if _model_has_tools:
|
|
214
216
|
try:
|
|
215
217
|
from apps.cli.providers.chat_routing import model_receives_local_tools
|
|
216
|
-
_model_has_tools = model_receives_local_tools(_curr_model_id,
|
|
218
|
+
_model_has_tools = model_receives_local_tools(_curr_model_id, _runtime_config, self.api_url)
|
|
217
219
|
except Exception:
|
|
218
220
|
pass
|
|
219
221
|
|
|
@@ -505,9 +507,8 @@ class ChatTurnMixin:
|
|
|
505
507
|
print(f"{_agent_name}{' · ' + _answer_model if _answer_model else ''}")
|
|
506
508
|
# A task about this folder on a model that cannot open it gets a guess
|
|
507
509
|
# that reads like a result (backend_chat answered "5" for a function
|
|
508
|
-
# that returns -1).
|
|
509
|
-
|
|
510
|
-
if not _model_has_tools and not getattr(self, "_no_tools_notice_shown", False):
|
|
510
|
+
# that returns -1). Stop this task before generating a guessed result.
|
|
511
|
+
if not _model_has_tools:
|
|
511
512
|
from apps.cli.workspace_route import needs_workspace, no_tools_message
|
|
512
513
|
if needs_workspace(message):
|
|
513
514
|
self._no_tools_notice_shown = True
|
|
@@ -518,6 +519,7 @@ class ChatTurnMixin:
|
|
|
518
519
|
print_hanging(console, " ! ", _why, style="yellow")
|
|
519
520
|
else:
|
|
520
521
|
print(f" ! {_why}")
|
|
522
|
+
return
|
|
521
523
|
# ── Single-shot turn through the shared runtime Gateway ─────────────
|
|
522
524
|
# The per-round inline agent loop that used to live here was removed
|
|
523
525
|
# (2026-07) after the runtime path was validated with real turns:
|
|
@@ -619,7 +621,7 @@ class ChatTurnMixin:
|
|
|
619
621
|
_rt_turn = await run_chat_via_runtime(
|
|
620
622
|
prompt=current_message, history=self.conversation[:-1],
|
|
621
623
|
local_tools=LOCAL_TOOLS, tool_schemas=LOCAL_TOOL_SCHEMAS,
|
|
622
|
-
model=model, config=
|
|
624
|
+
model=model, config=_runtime_config, api_url=self.api_url,
|
|
623
625
|
ollama_url=self.config.get("ollama_url", "http://localhost:11434"),
|
|
624
626
|
cancel_event=self.cancel_event,
|
|
625
627
|
on_token=on_token, on_thinking=on_thinking,
|
|
@@ -686,8 +688,11 @@ class ChatTurnMixin:
|
|
|
686
688
|
or str(self.config.get("local_provider") or "ollama")
|
|
687
689
|
)
|
|
688
690
|
result = {
|
|
689
|
-
"success":
|
|
691
|
+
"success": bool(getattr(_rt_turn, "ok", False)),
|
|
690
692
|
"response": _rt_text,
|
|
693
|
+
"error": getattr(_rt_turn, "error", None) or getattr(_rt_final, "error", ""),
|
|
694
|
+
"stop_reason": getattr(_rt_final, "stop_reason", "completed"),
|
|
695
|
+
"acceptance": getattr(_rt_final, "acceptance", None),
|
|
691
696
|
"provider": _rt_provider,
|
|
692
697
|
"cancelled": False,
|
|
693
698
|
"usage": {
|
|
@@ -100,8 +100,9 @@ class HeadlessMixin:
|
|
|
100
100
|
# The route counts as much as the model: on backend_chat the model gets
|
|
101
101
|
# no local tools whatever it could do with them. This only looked at the
|
|
102
102
|
# model, so the deterministic chain skipped its data pre-fetch there.
|
|
103
|
-
from aria_code.apps.cli.workspace_route import no_tools_message, needs_workspace, route_has_tools
|
|
104
|
-
|
|
103
|
+
from aria_code.apps.cli.workspace_route import no_tools_message, needs_workspace, route_has_tools, workspace_config
|
|
104
|
+
_runtime_config = workspace_config(prompt, _curr_model_id_p, self.config, self.api_url)
|
|
105
|
+
_model_has_tools_p = route_has_tools(_curr_model_id_p, _runtime_config, self.api_url)
|
|
105
106
|
|
|
106
107
|
# ── Broker guide intent: broad discovery should not start an add wizard ──
|
|
107
108
|
if _is_broker_guide_intent(prompt):
|
|
@@ -171,7 +172,7 @@ class HeadlessMixin:
|
|
|
171
172
|
_turn = await run_chat_via_runtime(
|
|
172
173
|
prompt=prompt, history=[],
|
|
173
174
|
local_tools=LOCAL_TOOLS, tool_schemas=LOCAL_TOOL_SCHEMAS,
|
|
174
|
-
model=model, config=
|
|
175
|
+
model=model, config=_runtime_config, api_url=self.api_url,
|
|
175
176
|
ollama_url=self.config.get("ollama_url", "http://localhost:11434"),
|
|
176
177
|
thinking_mode=thinking_mode, user_context=user_context,
|
|
177
178
|
auth_token=auth_token, project_context=_PROJECT_CONTEXT,
|
|
@@ -194,13 +195,11 @@ class HeadlessMixin:
|
|
|
194
195
|
return_result=True,
|
|
195
196
|
)
|
|
196
197
|
_tools_used = list(getattr(_turn.final, "tools", []) or [])
|
|
197
|
-
#
|
|
198
|
-
#
|
|
199
|
-
# exiting 1 there told a script the task failed while the edit
|
|
200
|
-
# sat finished on disk. Narrow on purpose — any other error,
|
|
201
|
-
# and a turn that ran no tools at all, still fails.
|
|
198
|
+
# A missing closing message can count as success only with
|
|
199
|
+
# passing acceptance evidence, never merely because a tool ran.
|
|
202
200
|
_empty_after_work = (
|
|
203
201
|
_turn.error == "empty_response" and bool(_tools_used)
|
|
202
|
+
and (getattr(_turn.final, "acceptance", None) or {}).get("verified") is True
|
|
204
203
|
)
|
|
205
204
|
result = {
|
|
206
205
|
"success": _turn.ok or _empty_after_work,
|
|
@@ -213,6 +212,7 @@ class HeadlessMixin:
|
|
|
213
212
|
"provider": getattr(_turn.final, "provider", ""),
|
|
214
213
|
"tools_used": _tools_used,
|
|
215
214
|
"acceptance": getattr(_turn.final, "acceptance", None),
|
|
215
|
+
"stop_reason": getattr(_turn.final, "stop_reason", "") or _turn.error or "completed",
|
|
216
216
|
}
|
|
217
217
|
finally:
|
|
218
218
|
if _prompt_spinner is not None:
|
|
@@ -238,6 +238,10 @@ class HeadlessMixin:
|
|
|
238
238
|
# its checks must say so on stderr rather than print a confident summary
|
|
239
239
|
# and exit 0.
|
|
240
240
|
_acceptance = (result or {}).get("acceptance") or {}
|
|
241
|
+
if _acceptance.get("verified") is False:
|
|
242
|
+
result["success"] = False
|
|
243
|
+
result["error"] = result.get("error") or "checks_failed"
|
|
244
|
+
result["stop_reason"] = "checks_failed"
|
|
241
245
|
if _acceptance.get("verified") is False and not quiet:
|
|
242
246
|
_zh = str(self.config.get("ui_lang", "en")).lower().startswith("zh")
|
|
243
247
|
print(f"⚠ {'验收未通过' if _zh else 'Checks failed'}: {_acceptance.get('headline', '')}",
|
|
@@ -253,6 +253,7 @@ class AriaSSEProvider:
|
|
|
253
253
|
system_override: Optional[str] = None,
|
|
254
254
|
project_context: str = "",
|
|
255
255
|
use_react_gateway: bool = False,
|
|
256
|
+
local_tools: bool = False,
|
|
256
257
|
) -> None:
|
|
257
258
|
self.api_url = api_url
|
|
258
259
|
self.model = model
|
|
@@ -262,6 +263,7 @@ class AriaSSEProvider:
|
|
|
262
263
|
self.system_override = system_override
|
|
263
264
|
self.project_context = project_context
|
|
264
265
|
self.use_react_gateway = use_react_gateway
|
|
266
|
+
self.local_tools = local_tools
|
|
265
267
|
|
|
266
268
|
async def stream(
|
|
267
269
|
self,
|
|
@@ -296,6 +298,8 @@ class AriaSSEProvider:
|
|
|
296
298
|
cancel_event=cancel_event,
|
|
297
299
|
project_context=self.project_context,
|
|
298
300
|
use_react_gateway=self.use_react_gateway,
|
|
301
|
+
tool_schemas=list(tools or []) if self.local_tools else None,
|
|
302
|
+
local_tool_execution=self.local_tools,
|
|
299
303
|
)
|
|
300
304
|
|
|
301
305
|
async for event in _stream_callback_provider(_invoke, done_provider="aria_sse"):
|
|
@@ -97,15 +97,9 @@ def first_round_route(model: str, config: dict, api_url: Optional[str]) -> str:
|
|
|
97
97
|
|
|
98
98
|
|
|
99
99
|
def model_receives_local_tools(model: str, config: dict, api_url: Optional[str]) -> bool:
|
|
100
|
-
"""
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
model there cannot fetch market data through Aria's tools. Treating it as
|
|
104
|
-
tool-capable skipped the local market pre-fetch as well, and a question
|
|
105
|
-
like "分析苹果股票" reached the backend with no data at all — the
|
|
106
|
-
evidence gate then refused the answer.
|
|
107
|
-
"""
|
|
108
|
-
return first_round_route(model, config, api_url) != "cloud"
|
|
100
|
+
"""Legacy chat has no local tools; client execution requires an opt-in
|
|
101
|
+
protocol acknowledgement. Direct inference carries the local schemas."""
|
|
102
|
+
return first_round_route(model, config, api_url) != "cloud" or bool(config.get("backend_local_tools"))
|
|
109
103
|
|
|
110
104
|
|
|
111
105
|
def is_placeholder_response(
|
|
@@ -19,18 +19,21 @@ def build_chat_payload(
|
|
|
19
19
|
user_context: Optional[dict],
|
|
20
20
|
project_context: str,
|
|
21
21
|
use_react_gateway: bool,
|
|
22
|
+
tool_schemas: Optional[list] = None,
|
|
23
|
+
local_tool_execution: bool = False,
|
|
22
24
|
) -> tuple[str, dict]:
|
|
23
25
|
"""Build either the legacy chat payload or the shared ReAct envelope.
|
|
24
26
|
|
|
25
27
|
This is deliberately pure: it gives CLI, desktop, and iOS an auditable
|
|
26
28
|
parity point without forcing the local-first CLI to use cloud services.
|
|
27
29
|
"""
|
|
30
|
+
payload: dict
|
|
28
31
|
if use_react_gateway:
|
|
29
32
|
context = dict(user_context or {})
|
|
30
33
|
if project_context:
|
|
31
34
|
context["project_context"] = project_context
|
|
32
35
|
mode = str(context.pop("workspace_mode", "code"))
|
|
33
|
-
|
|
36
|
+
payload = {
|
|
34
37
|
"message": {
|
|
35
38
|
"role": "user",
|
|
36
39
|
"content": [{"type": "text", "text": message}],
|
|
@@ -41,8 +44,11 @@ def build_chat_payload(
|
|
|
41
44
|
"model": {"id": model or "auto", "effort": thinking_mode or "auto"},
|
|
42
45
|
"context": context,
|
|
43
46
|
}
|
|
47
|
+
if local_tool_execution:
|
|
48
|
+
payload.update(tools=list(tool_schemas or []), tool_execution="client", tool_protocol="aria-local-v1")
|
|
49
|
+
return "/api/v2/chat/react", payload
|
|
44
50
|
|
|
45
|
-
payload
|
|
51
|
+
payload = {
|
|
46
52
|
"message": message,
|
|
47
53
|
"conversation_history": history[-20:],
|
|
48
54
|
"model": model,
|
|
@@ -53,6 +59,10 @@ def build_chat_payload(
|
|
|
53
59
|
if project_context:
|
|
54
60
|
user_context = {**user_context, "project_context": project_context}
|
|
55
61
|
payload["user_context"] = user_context
|
|
62
|
+
elif project_context:
|
|
63
|
+
payload["user_context"] = {"project_context": project_context}
|
|
64
|
+
if local_tool_execution:
|
|
65
|
+
payload.update(tools=list(tool_schemas or []), tool_execution="client", tool_protocol="aria-local-v1")
|
|
56
66
|
return "/api/v2/ai/chat/stream", payload
|
|
57
67
|
|
|
58
68
|
|
|
@@ -72,6 +82,8 @@ async def stream_chat(
|
|
|
72
82
|
cancel_event: Optional[asyncio.Event] = None,
|
|
73
83
|
project_context: str = "",
|
|
74
84
|
use_react_gateway: bool = False,
|
|
85
|
+
tool_schemas: Optional[list] = None,
|
|
86
|
+
local_tool_execution: bool = False,
|
|
75
87
|
) -> dict:
|
|
76
88
|
"""Stream AI chat via SSE with cancel support and user context.
|
|
77
89
|
|
|
@@ -88,6 +100,7 @@ async def stream_chat(
|
|
|
88
100
|
message, history, model=model, thinking_mode=thinking_mode,
|
|
89
101
|
user_context=user_context, project_context=project_context,
|
|
90
102
|
use_react_gateway=use_react_gateway,
|
|
103
|
+
tool_schemas=tool_schemas, local_tool_execution=local_tool_execution,
|
|
91
104
|
)
|
|
92
105
|
url = f"{base_url.rstrip('/')}{endpoint}"
|
|
93
106
|
|
|
@@ -117,6 +130,7 @@ async def stream_chat(
|
|
|
117
130
|
tools_used = []
|
|
118
131
|
sources = []
|
|
119
132
|
tool_calls_pending = []
|
|
133
|
+
local_tools_acknowledged = False
|
|
120
134
|
usage = {"prompt_tokens": 0, "completion_tokens": 0, "thinking_tokens": 0}
|
|
121
135
|
|
|
122
136
|
try:
|
|
@@ -178,6 +192,17 @@ async def stream_chat(
|
|
|
178
192
|
return {"success": False, "error": f"Backend: {err_msg}"}
|
|
179
193
|
|
|
180
194
|
evt = data.get("type", event_type)
|
|
195
|
+
if local_tool_execution:
|
|
196
|
+
local_tools_acknowledged = local_tools_acknowledged or (
|
|
197
|
+
data.get("tool_protocol") == "aria-local-v1"
|
|
198
|
+
and data.get("tool_execution") == "client"
|
|
199
|
+
)
|
|
200
|
+
if evt == "tool_call" and not local_tools_acknowledged:
|
|
201
|
+
return {"success": False, "error": "backend_local_tools_unsupported",
|
|
202
|
+
"response": full_response}
|
|
203
|
+
if evt == "tool_result":
|
|
204
|
+
return {"success": False, "error": "backend_executed_client_tool",
|
|
205
|
+
"response": full_response}
|
|
181
206
|
|
|
182
207
|
if evt == "delta":
|
|
183
208
|
token = data.get("text", data.get("content", ""))
|
|
@@ -222,6 +247,9 @@ async def stream_chat(
|
|
|
222
247
|
elif evt == "error":
|
|
223
248
|
return {"success": False, "error": data.get("message", data.get("error", "Unknown error"))}
|
|
224
249
|
|
|
250
|
+
if local_tool_execution and not local_tools_acknowledged:
|
|
251
|
+
return {"success": False, "error": "backend_local_tools_unsupported",
|
|
252
|
+
"response": full_response}
|
|
225
253
|
return {
|
|
226
254
|
"success": True,
|
|
227
255
|
"response": full_response,
|
|
@@ -110,22 +110,23 @@ def build_acceptance_gate(executor, config: Optional[dict] = None, message: str
|
|
|
110
110
|
|
|
111
111
|
import os
|
|
112
112
|
from aria_code.runtime.acceptance import AcceptanceGate
|
|
113
|
+
from aria_code.runtime.approval import ApprovalDecision
|
|
113
114
|
|
|
114
115
|
timeout = int(cfg.get("acceptance_timeout", 300) or 300)
|
|
116
|
+
root = cfg.get("_session_workspace_root") or cfg.get("workspace_root") or os.getcwd()
|
|
117
|
+
if getattr(executor, "execution_context", None) is not None:
|
|
118
|
+
root = dict(executor.execution_context() or {}).get("_workspace") or root
|
|
115
119
|
|
|
116
120
|
def _runner(command: str) -> dict:
|
|
117
121
|
return executor.execute_local("run_command", {
|
|
118
122
|
"command": command,
|
|
119
|
-
"
|
|
120
|
-
"permission_mode": mode,
|
|
121
|
-
"network_enabled": bool(cfg.get("network_enabled", True)),
|
|
122
|
-
"user_approved": True,
|
|
123
|
+
"cwd": str(root),
|
|
123
124
|
"timeout": timeout,
|
|
124
|
-
})
|
|
125
|
+
}, approval=ApprovalDecision.allow(policy="balanced", user_approved=True))
|
|
125
126
|
|
|
126
127
|
return AcceptanceGate(
|
|
127
128
|
runner=_runner,
|
|
128
|
-
root=
|
|
129
|
+
root=root,
|
|
129
130
|
max_attempts=int(cfg.get("acceptance_max_attempts", 2) or 2),
|
|
130
131
|
commands=_declared_acceptance_commands(cfg, message),
|
|
131
132
|
)
|
|
@@ -259,6 +260,7 @@ def make_provider_fn(
|
|
|
259
260
|
user_context=_cloud_uctx, auth_token=auth_token,
|
|
260
261
|
project_context=project_context,
|
|
261
262
|
use_react_gateway=bool(config.get("arthera_react_gateway")),
|
|
263
|
+
local_tools=bool(config.get("backend_local_tools")),
|
|
262
264
|
),
|
|
263
265
|
_on_token,
|
|
264
266
|
)
|
|
@@ -340,6 +342,9 @@ async def run_chat_via_runtime(
|
|
|
340
342
|
usage metadata during final rendering.
|
|
341
343
|
"""
|
|
342
344
|
from aria_code.runtime.gateway import run_turn
|
|
345
|
+
from aria_code.apps.cli.workspace_route import workspace_config
|
|
346
|
+
|
|
347
|
+
config = workspace_config(prompt, model, config, api_url)
|
|
343
348
|
|
|
344
349
|
provider_fn = make_provider_fn(
|
|
345
350
|
model=model, config=config, api_url=api_url, ollama_url=ollama_url,
|
|
@@ -455,6 +455,8 @@ class TerminalRuntimeEventConsumer:
|
|
|
455
455
|
)
|
|
456
456
|
if can_live:
|
|
457
457
|
now = time.time()
|
|
458
|
+
if self.live_display is not None and now - self.last_live_update < self.live_update_interval:
|
|
459
|
+
return
|
|
458
460
|
md = self.markdown_cls(self.strip_latex(self.response_text))
|
|
459
461
|
if self.live_display is None:
|
|
460
462
|
self.live_display = self.live_cls(
|
|
@@ -611,6 +613,12 @@ class TerminalRuntimeEventConsumer:
|
|
|
611
613
|
else:
|
|
612
614
|
print(f" {'✓' if passed else '✗'} {message}")
|
|
613
615
|
return
|
|
616
|
+
if state in {"max_rounds", "budget_exhausted", "loop_guard", "checks_failed"}:
|
|
617
|
+
if self.has_rich and self.console is not None:
|
|
618
|
+
self.console.print(f" [yellow]Task incomplete: {message}[/yellow]")
|
|
619
|
+
else:
|
|
620
|
+
print(f" Task incomplete: {message}")
|
|
621
|
+
return
|
|
614
622
|
if state != "fallback":
|
|
615
623
|
return
|
|
616
624
|
match = re.search(r"(?:from\s+)?(\w+)\s*(?:→|->|to)\s*(\w+)", message or "", re.I)
|
|
@@ -28,7 +28,7 @@ from aria_code.workspace import WorkspaceFiles # noqa: E402
|
|
|
28
28
|
from aria_code.workspace.files import WorkspaceSecurity
|
|
29
29
|
import os
|
|
30
30
|
|
|
31
|
-
def _get_workspace_files():
|
|
31
|
+
def _get_workspace_files(params=None):
|
|
32
32
|
"""Reads for the local CLI: cwd, home, and the temp dirs.
|
|
33
33
|
|
|
34
34
|
``allow_home=False`` used to be hardcoded here to "force restrict to the
|
|
@@ -42,7 +42,7 @@ def _get_workspace_files():
|
|
|
42
42
|
everywhere else: ARIA_RUNTIME_SCOPE=remote, which Dockerfile.review sets.
|
|
43
43
|
Leaving the flag unset here honours it without disabling the local paths.
|
|
44
44
|
"""
|
|
45
|
-
security = WorkspaceSecurity
|
|
45
|
+
security = WorkspaceSecurity.from_tool_params(params or {})
|
|
46
46
|
return WorkspaceFiles(security=security)
|
|
47
47
|
|
|
48
48
|
|
|
@@ -57,7 +57,7 @@ def tool_read_file(params: dict) -> dict:
|
|
|
57
57
|
limit = int(params.get("limit", 0) or 0)
|
|
58
58
|
if not offset and not limit:
|
|
59
59
|
limit = 160
|
|
60
|
-
result = _get_workspace_files().read_file(path, offset=offset, limit=limit)
|
|
60
|
+
result = _get_workspace_files(params).read_file(path, offset=offset, limit=limit)
|
|
61
61
|
content = result.content
|
|
62
62
|
if limit and result.lines >= limit and "use offset/limit to read more" not in content:
|
|
63
63
|
content += "\n... [default read limit applied — use offset/limit to read more]"
|
|
@@ -75,7 +75,7 @@ def tool_list_files(params: dict) -> dict:
|
|
|
75
75
|
path = params.get("path", ".")
|
|
76
76
|
pattern = params.get("pattern", "*")
|
|
77
77
|
try:
|
|
78
|
-
data = _get_workspace_files().list_files(path, pattern)
|
|
78
|
+
data = _get_workspace_files(params).list_files(path, pattern)
|
|
79
79
|
return {"success": True, "data": {
|
|
80
80
|
"path": data["path"],
|
|
81
81
|
"pattern": data["pattern"],
|
|
@@ -94,7 +94,7 @@ def tool_search_code(params: dict) -> dict:
|
|
|
94
94
|
if not pattern:
|
|
95
95
|
return {"success": False, "error": "Missing 'pattern' parameter"}
|
|
96
96
|
try:
|
|
97
|
-
data = _get_workspace_files().search_code(pattern, path, file_glob)
|
|
97
|
+
data = _get_workspace_files(params).search_code(pattern, path, file_glob)
|
|
98
98
|
return {"success": True, "data": {
|
|
99
99
|
"pattern": data["pattern"],
|
|
100
100
|
"path": data["path"],
|
|
@@ -114,13 +114,14 @@ def tool_glob(params: dict) -> dict:
|
|
|
114
114
|
root = (params.get("path", ".") or ".").strip()
|
|
115
115
|
limit = min(int(params.get("limit", 200)), 1000)
|
|
116
116
|
try:
|
|
117
|
-
|
|
117
|
+
security = WorkspaceSecurity.from_tool_params(params)
|
|
118
|
+
p = security.require_safe(root)
|
|
118
119
|
if not p.is_dir():
|
|
119
120
|
return {"success": False, "error": f"Directory not found: {p}"}
|
|
120
121
|
results = sorted(
|
|
121
122
|
str(fp.relative_to(p) if fp.is_relative_to(p) else fp)
|
|
122
123
|
for fp in p.glob(pattern)
|
|
123
|
-
if fp.is_file()
|
|
124
|
+
if fp.is_file() and security.is_safe_path(fp)
|
|
124
125
|
)[:limit]
|
|
125
126
|
return {"success": True, "data": {
|
|
126
127
|
"pattern": pattern,
|
|
@@ -218,6 +218,8 @@ def tool_run_command(
|
|
|
218
218
|
argv if (argv and not use_shell) else command,
|
|
219
219
|
use_shell=use_shell, mode=mode, network=network, cwd=cwd,
|
|
220
220
|
setting=params.get("os_sandbox"),
|
|
221
|
+
workspace=params.get("_workspace"),
|
|
222
|
+
extra=params.get("_allowed_write_roots", ()),
|
|
221
223
|
)
|
|
222
224
|
result = subprocess.run(
|
|
223
225
|
confined or (argv if (argv and not use_shell) else command),
|
|
@@ -285,7 +287,8 @@ def _start_background(params, command, argv, use_shell, cwd, mode, network, *, d
|
|
|
285
287
|
|
|
286
288
|
target = argv if (argv and not use_shell) else command
|
|
287
289
|
confined = _os_sandbox.wrap(target, use_shell=use_shell, mode=mode, network=network, cwd=cwd,
|
|
288
|
-
setting=params.get("os_sandbox"))
|
|
290
|
+
setting=params.get("os_sandbox"), workspace=params.get("_workspace"),
|
|
291
|
+
extra=params.get("_allowed_write_roots", ()))
|
|
289
292
|
result = processes.start(confined or target, shell=use_shell and not confined, cwd=cwd,
|
|
290
293
|
label=command, wait=min(float(params.get("wait_seconds", 3) or 0), 30.0),
|
|
291
294
|
until=params.get("until"))
|
|
@@ -639,4 +642,3 @@ def tool_ask_user(params: dict, *, console=None, has_rich: bool = True) -> dict:
|
|
|
639
642
|
return {"success": False, "error": "User cancelled the input."}
|
|
640
643
|
|
|
641
644
|
return {"success": True, "data": {"user_answer": answer}}
|
|
642
|
-
|
|
@@ -118,7 +118,10 @@ def _print_lsp_diags(diags: list, console, has_rich: bool, limit: int = 6) -> No
|
|
|
118
118
|
console.print(f" [dim]… +{extra} more[/dim]") if has_rich else print(f" ... +{extra} more")
|
|
119
119
|
|
|
120
120
|
|
|
121
|
-
def _is_safe(p: pathlib.Path) -> bool:
|
|
121
|
+
def _is_safe(p: pathlib.Path, params: dict | None = None) -> bool:
|
|
122
|
+
if params and params.get("_workspace"):
|
|
123
|
+
from aria_code.workspace.files import WorkspaceSecurity
|
|
124
|
+
return WorkspaceSecurity.from_tool_params(params).is_safe_path(p, write=True)
|
|
122
125
|
return _ac()._is_safe_path(p)
|
|
123
126
|
|
|
124
127
|
|
|
@@ -458,7 +461,7 @@ def tool_write_file(params: dict) -> dict:
|
|
|
458
461
|
if not raw_path.is_absolute():
|
|
459
462
|
raw_path = _relative_write_base() / raw_path
|
|
460
463
|
p = raw_path.resolve()
|
|
461
|
-
if not _is_safe(p):
|
|
464
|
+
if not _is_safe(p, params):
|
|
462
465
|
return {"success": False, "error": f"Access denied: path '{p}' is outside allowed directories"}
|
|
463
466
|
|
|
464
467
|
existed = p.exists()
|
|
@@ -694,7 +697,7 @@ def tool_edit_file(params: dict) -> dict:
|
|
|
694
697
|
p = pathlib.Path(path).expanduser().resolve()
|
|
695
698
|
if not p.exists():
|
|
696
699
|
return {"success": False, "error": f"File not found: {p}"}
|
|
697
|
-
if not _is_safe(p):
|
|
700
|
+
if not _is_safe(p, params):
|
|
698
701
|
return {"success": False, "error": f"Access denied: path '{p}' is outside allowed directories"}
|
|
699
702
|
|
|
700
703
|
content = p.read_text(errors="replace")
|
|
@@ -813,7 +816,7 @@ def tool_multi_edit(params: dict) -> dict:
|
|
|
813
816
|
p = pathlib.Path(path).expanduser().resolve()
|
|
814
817
|
if not p.exists():
|
|
815
818
|
return {"success": False, "error": f"File not found: {p}"}
|
|
816
|
-
if not _is_safe(p):
|
|
819
|
+
if not _is_safe(p, params):
|
|
817
820
|
return {"success": False, "error": f"Access denied: path '{p}' is outside allowed directories"}
|
|
818
821
|
|
|
819
822
|
content = p.read_text(errors="replace")
|
|
@@ -31,7 +31,8 @@ _RUN_EN = re.compile(r"\b(?:run|execute)\s+(?:`|python3?\b|pytest\b|npm\b|npx\b|
|
|
|
31
31
|
_RUN_ZH = re.compile(r"(?:运行|执行|跑一下|跑)\s*(?:`|python|pytest|npm|node|git|make|命令|脚本|测试)", re.I)
|
|
32
32
|
_IMPORT = re.compile(r"\b(?:import|from)\s+([A-Za-z_]\w*)")
|
|
33
33
|
_HERE_ZH = ("这个项目", "该项目", "当前项目", "这个仓库", "当前仓库", "这个目录", "当前目录", "这个文件夹",
|
|
34
|
-
"当前文件夹", "这个代码库", "本项目", "本仓库", "失败的测试", "我的代码"
|
|
34
|
+
"当前文件夹", "这个代码库", "本项目", "本仓库", "失败的测试", "我的代码",
|
|
35
|
+
"我的项目", "本地项目", "本地文件", "电脑文件", "桌面文件", "创建项目", "新建项目")
|
|
35
36
|
|
|
36
37
|
|
|
37
38
|
def needs_workspace(text: str, cwd: Path | str | None = None) -> bool:
|
|
@@ -41,13 +42,18 @@ def needs_workspace(text: str, cwd: Path | str | None = None) -> bool:
|
|
|
41
42
|
return True
|
|
42
43
|
if _HERE_EN.search(message) or any(word in message for word in _HERE_ZH):
|
|
43
44
|
return True
|
|
45
|
+
if re.search(r"\b(?:create|build|scaffold|initialize)\s+(?:a\s+|an\s+|new\s+)?(?:react\s+|next\.js\s+)?(?:app|project|website)\b", message, re.I):
|
|
46
|
+
return True
|
|
44
47
|
if _RUN_EN.search(message) or _RUN_ZH.search(message):
|
|
45
48
|
return True
|
|
46
49
|
base = Path(cwd or Path.cwd())
|
|
47
50
|
for module in _IMPORT.findall(message):
|
|
48
51
|
if (base / f"{module}.py").is_file() or (base / module / "__init__.py").is_file():
|
|
49
52
|
return True
|
|
50
|
-
|
|
53
|
+
tokens = _PATH_TOKEN.findall(message)
|
|
54
|
+
# Chinese prose can touch an ASCII filename without whitespace (修改calc.py).
|
|
55
|
+
tokens += re.findall(r"[A-Za-z0-9_./~-]+\.[A-Za-z0-9]{1,6}\b", message)
|
|
56
|
+
for token in tokens:
|
|
51
57
|
candidate = token.strip("./") if token.startswith("./") else token
|
|
52
58
|
try:
|
|
53
59
|
if candidate and (base / candidate).exists():
|
|
@@ -92,4 +98,24 @@ def no_tools_message(config: dict, *, lang: str = "en") -> str:
|
|
|
92
98
|
"qwen2.5-coder), or start with aria-code --local.")
|
|
93
99
|
|
|
94
100
|
|
|
95
|
-
|
|
101
|
+
def workspace_config(text: str, model: str, config: dict, api_url: str | None) -> dict:
|
|
102
|
+
"""Choose authenticated Google inference with local tools for workspace tasks.
|
|
103
|
+
|
|
104
|
+
Change only this turn's inference transport, never the saved config or
|
|
105
|
+
the user's model. A backend chat setting must not turn edits into guesses.
|
|
106
|
+
"""
|
|
107
|
+
from aria_code.apps.cli.providers.chat_routing import force_backend, model_provider, normalize_provider_name
|
|
108
|
+
if not needs_workspace(text) or not force_backend(config, api_url):
|
|
109
|
+
return config
|
|
110
|
+
if config.get("backend_local_tools"):
|
|
111
|
+
return config
|
|
112
|
+
provider = model_provider(model) or normalize_provider_name(config.get("local_provider", ""))
|
|
113
|
+
if provider not in {"google", "vertexai", "vertex-ai", "google-genai"}:
|
|
114
|
+
return config
|
|
115
|
+
from aria_code.apps.cli.providers.base import google_readiness
|
|
116
|
+
if google_readiness(config):
|
|
117
|
+
return config
|
|
118
|
+
return {**config, "backend_chat": False, "_workspace_transport": "google"}
|
|
119
|
+
|
|
120
|
+
|
|
121
|
+
__all__ = ["needs_workspace", "route_has_tools", "no_tools_message", "workspace_config"]
|
|
@@ -4963,6 +4963,11 @@ Examples:
|
|
|
4963
4963
|
parser.add_argument("--banner", choices=["full", "compact", "off"], help="Banner mode: full|compact|off")
|
|
4964
4964
|
parser.add_argument("--resume", action="store_true", help="Resume last session")
|
|
4965
4965
|
parser.add_argument("--session", help="Load specific session ID")
|
|
4966
|
+
parser.add_argument("-C", "--cd", metavar="DIR", help="Open a local project directory")
|
|
4967
|
+
parser.add_argument("--add-dir", action="append", default=[], metavar="DIR",
|
|
4968
|
+
help="Allow reads and writes in an additional directory (repeatable)")
|
|
4969
|
+
parser.add_argument("--read-dir", action="append", default=[], metavar="DIR",
|
|
4970
|
+
help="Allow reads in an additional directory (repeatable)")
|
|
4966
4971
|
parser.add_argument(
|
|
4967
4972
|
"--dangerously-skip-permissions",
|
|
4968
4973
|
action="store_true",
|
|
@@ -4977,6 +4982,14 @@ Examples:
|
|
|
4977
4982
|
parser.add_argument("args", nargs="*", help="Command arguments")
|
|
4978
4983
|
|
|
4979
4984
|
args = parser.parse_args()
|
|
4985
|
+
# Resolve every path relative to the invocation directory before changing it.
|
|
4986
|
+
_write_roots = [str(pathlib.Path(p).expanduser().resolve()) for p in args.add_dir]
|
|
4987
|
+
_read_roots = [str(pathlib.Path(p).expanduser().resolve()) for p in args.read_dir]
|
|
4988
|
+
if args.cd:
|
|
4989
|
+
_project_dir = pathlib.Path(args.cd).expanduser().resolve()
|
|
4990
|
+
if not _project_dir.is_dir():
|
|
4991
|
+
parser.error(f"Project directory does not exist: {_project_dir}")
|
|
4992
|
+
os.chdir(_project_dir)
|
|
4980
4993
|
|
|
4981
4994
|
# Machine-readable -p output: stdout carries only JSON. Everything else —
|
|
4982
4995
|
# banners, tool steps, warnings, anything a tool prints — goes to stderr.
|
|
@@ -4988,6 +5001,9 @@ Examples:
|
|
|
4988
5001
|
sys.stdout = sys.stderr
|
|
4989
5002
|
|
|
4990
5003
|
config = load_config()
|
|
5004
|
+
config["_session_workspace_root"] = str(pathlib.Path.cwd().resolve())
|
|
5005
|
+
config["_session_write_roots"] = _write_roots
|
|
5006
|
+
config["_session_read_roots"] = _read_roots
|
|
4991
5007
|
|
|
4992
5008
|
# ── Start background update check (non-blocking, daemon thread) ──────────
|
|
4993
5009
|
try:
|
|
@@ -5006,9 +5022,13 @@ Examples:
|
|
|
5006
5022
|
raw_model = str(args.model).strip()
|
|
5007
5023
|
if "/" in raw_model and not raw_model.startswith("http"):
|
|
5008
5024
|
provider_name, selected_model = raw_model.split("/", 1)
|
|
5009
|
-
from apps.cli.providers.chat_routing import normalize_provider_name
|
|
5025
|
+
from apps.cli.providers.chat_routing import normalize_provider_name, KNOWN_MODEL_PROVIDERS
|
|
5010
5026
|
|
|
5011
5027
|
provider_name = normalize_provider_name(provider_name)
|
|
5028
|
+
if provider_name in KNOWN_MODEL_PROVIDERS:
|
|
5029
|
+
# --model names the inference provider explicitly, just as /model
|
|
5030
|
+
# does. A stale backend_chat flag must not override that choice.
|
|
5031
|
+
config["backend_chat"] = False
|
|
5012
5032
|
config["local_provider"] = provider_name
|
|
5013
5033
|
config["model"] = selected_model
|
|
5014
5034
|
config["local_mode"] = provider_name in {
|
|
@@ -27,7 +27,10 @@ from typing import Any, Optional
|
|
|
27
27
|
STALE_ARIA_MODEL_PREFIXES = ("aria-opus", "aria-prelude", "aria-sonata:3", "aria-sonata:4")
|
|
28
28
|
|
|
29
29
|
# Keys that are session state, not configuration — never persisted.
|
|
30
|
-
NEVER_PERSIST = frozenset({
|
|
30
|
+
NEVER_PERSIST = frozenset({
|
|
31
|
+
"conversation_history", "_session_workspace_root", "_session_write_roots",
|
|
32
|
+
"_session_read_roots", "_workspace_transport",
|
|
33
|
+
})
|
|
31
34
|
|
|
32
35
|
|
|
33
36
|
@dataclass
|