aria-code 0.52.0__py3-none-any.whl
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/__init__.py +42 -0
- aria_code/_version.py +20 -0
- aria_code/adk_apps/__init__.py +1 -0
- aria_code/adk_apps/aria_code_review/__init__.py +1 -0
- aria_code/adk_apps/aria_code_review/agent.py +32 -0
- aria_code/adk_apps/aria_research/__init__.py +1 -0
- aria_code/adk_apps/aria_research/agent.py +31 -0
- aria_code/agents/__init__.py +34 -0
- aria_code/agents/base.py +318 -0
- aria_code/agents/code_review.py +200 -0
- aria_code/agents/deep/__init__.py +37 -0
- aria_code/agents/deep/calibration_loop.py +144 -0
- aria_code/agents/deep/critic.py +125 -0
- aria_code/agents/deep/deepen.py +193 -0
- aria_code/agents/deep/models.py +149 -0
- aria_code/agents/deep/pipeline.py +164 -0
- aria_code/agents/deep/quant_fusion.py +192 -0
- aria_code/agents/deep/themes.py +95 -0
- aria_code/agents/deep/tiers.py +106 -0
- aria_code/agents/engineering/__init__.py +14 -0
- aria_code/agents/engineering/coder.py +222 -0
- aria_code/agents/engineering/tester.py +145 -0
- aria_code/agents/financial/__init__.py +21 -0
- aria_code/agents/financial/cashflow_burn.py +119 -0
- aria_code/agents/financial/catalyst.py +279 -0
- aria_code/agents/financial/corporate_finance.py +175 -0
- aria_code/agents/financial/debate.py +224 -0
- aria_code/agents/financial/earnings.py +303 -0
- aria_code/agents/financial/fundamental.py +191 -0
- aria_code/agents/financial/macro.py +99 -0
- aria_code/agents/financial/news.py +207 -0
- aria_code/agents/financial/risk.py +165 -0
- aria_code/agents/financial/sector.py +279 -0
- aria_code/agents/financial/strategist.py +121 -0
- aria_code/agents/financial/stripe_revenue.py +127 -0
- aria_code/agents/financial/synthesis.py +274 -0
- aria_code/agents/financial/technical.py +258 -0
- aria_code/agents/orchestrator.py +44 -0
- aria_code/agents/portfolio_agent.py +363 -0
- aria_code/agents/realty/__init__.py +62 -0
- aria_code/agents/realty/asset_diagnosis.py +152 -0
- aria_code/agents/realty/business_match.py +166 -0
- aria_code/agents/realty/cashflow_verify.py +209 -0
- aria_code/agents/realty/contract_rules.py +210 -0
- aria_code/agents/realty/energy_anomaly.py +189 -0
- aria_code/agents/realty/exit_settlement.py +208 -0
- aria_code/agents/realty/fulfillment_risk.py +206 -0
- aria_code/agents/realty/ops_optimize.py +160 -0
- aria_code/agents/realty/revenue_share.py +215 -0
- aria_code/agents/registry.py +158 -0
- aria_code/agents/signal_scheme.py +111 -0
- aria_code/agents/sports/__init__.py +0 -0
- aria_code/agents/sports/football_agent.py +197 -0
- aria_code/agents/supervisor.py +113 -0
- aria_code/agents/team.py +492 -0
- aria_code/agents/warehouse/__init__.py +25 -0
- aria_code/agents/warehouse/contracts.py +26 -0
- aria_code/agents/warehouse/dashboard.py +155 -0
- aria_code/agents/warehouse/fulfillment_leadtime.py +95 -0
- aria_code/agents/warehouse/inbound_exceptions.py +25 -0
- aria_code/agents/warehouse/inventory_health.py +24 -0
- aria_code/agents/warehouse/local_run.py +71 -0
- aria_code/agents/warehouse/local_snapshot.py +132 -0
- aria_code/agents/warehouse/logistics_cost.py +84 -0
- aria_code/agents/warehouse/logistics_sync.py +21 -0
- aria_code/agents/warehouse/workflow.py +31 -0
- aria_code/aliyun_data_client.py +4 -0
- aria_code/apps/README.md +12 -0
- aria_code/apps/__init__.py +2 -0
- aria_code/apps/channels/README.md +15 -0
- aria_code/apps/channels/__init__.py +17 -0
- aria_code/apps/channels/intake.py +92 -0
- aria_code/apps/channels/registry.py +95 -0
- aria_code/apps/channels/tradingview.py +94 -0
- aria_code/apps/cli/README.md +13 -0
- aria_code/apps/cli/__init__.py +2 -0
- aria_code/apps/cli/_optional.py +120 -0
- aria_code/apps/cli/bootstrap.py +145 -0
- aria_code/apps/cli/broker_render.py +206 -0
- aria_code/apps/cli/codegen_paths.py +29 -0
- aria_code/apps/cli/commands/__init__.py +16 -0
- aria_code/apps/cli/commands/_business_render.py +78 -0
- aria_code/apps/cli/commands/_ui.py +71 -0
- aria_code/apps/cli/commands/analysis_cmds.py +369 -0
- aria_code/apps/cli/commands/ashare_prediction_cmds.py +327 -0
- aria_code/apps/cli/commands/auth_cmds.py +239 -0
- aria_code/apps/cli/commands/backtest_cmds.py +2543 -0
- aria_code/apps/cli/commands/broker_cmds.py +1234 -0
- aria_code/apps/cli/commands/business_workflow_cmds.py +319 -0
- aria_code/apps/cli/commands/canvas_cmds.py +77 -0
- aria_code/apps/cli/commands/catalog.py +87 -0
- aria_code/apps/cli/commands/core_cmds.py +2520 -0
- aria_code/apps/cli/commands/data_cmds.py +457 -0
- aria_code/apps/cli/commands/diagnostic_cmds.py +230 -0
- aria_code/apps/cli/commands/diagnostic_ops_cmds.py +813 -0
- aria_code/apps/cli/commands/file_cmds.py +312 -0
- aria_code/apps/cli/commands/finance_service_cmds.py +60 -0
- aria_code/apps/cli/commands/fx_commodity_cmds.py +123 -0
- aria_code/apps/cli/commands/market.py +434 -0
- aria_code/apps/cli/commands/market_cmds.py +1381 -0
- aria_code/apps/cli/commands/market_context.py +425 -0
- aria_code/apps/cli/commands/market_render.py +7 -0
- aria_code/apps/cli/commands/model_cmds.py +2153 -0
- aria_code/apps/cli/commands/ops_cmds.py +721 -0
- aria_code/apps/cli/commands/orchestrator_cmds.py +179 -0
- aria_code/apps/cli/commands/pdf_export_cmds.py +125 -0
- aria_code/apps/cli/commands/portfolio_cmds.py +1278 -0
- aria_code/apps/cli/commands/report.py +437 -0
- aria_code/apps/cli/commands/scaffold_templates.py +617 -0
- aria_code/apps/cli/commands/session_cmds.py +236 -0
- aria_code/apps/cli/commands/session_ux_cmds.py +359 -0
- aria_code/apps/cli/commands/team.py +669 -0
- aria_code/apps/cli/commands/team_render.py +8 -0
- aria_code/apps/cli/commands/ui_cmds.py +401 -0
- aria_code/apps/cli/commands/warehouse_cmds.py +79 -0
- aria_code/apps/cli/commands/workflow_cmds.py +480 -0
- aria_code/apps/cli/commands/workspace_cmds.py +1494 -0
- aria_code/apps/cli/config_paths.py +73 -0
- aria_code/apps/cli/config_store.py +78 -0
- aria_code/apps/cli/constants.py +88 -0
- aria_code/apps/cli/context.py +34 -0
- aria_code/apps/cli/deterministic.py +191 -0
- aria_code/apps/cli/direct.py +48 -0
- aria_code/apps/cli/finance_service_catalog.py +111 -0
- aria_code/apps/cli/football_reports.py +231 -0
- aria_code/apps/cli/github_app_auth.py +135 -0
- aria_code/apps/cli/google_login.py +196 -0
- aria_code/apps/cli/handlers/__init__.py +11 -0
- aria_code/apps/cli/handlers/broker_handlers.py +122 -0
- aria_code/apps/cli/handlers/chart_handlers.py +1309 -0
- aria_code/apps/cli/handlers/market_handlers.py +2513 -0
- aria_code/apps/cli/handlers/realty_handlers.py +114 -0
- aria_code/apps/cli/handlers/sports_handlers.py +22 -0
- aria_code/apps/cli/handlers/strategy_advice.py +82 -0
- aria_code/apps/cli/helpers.py +302 -0
- aria_code/apps/cli/hooks.py +180 -0
- aria_code/apps/cli/i18n.py +297 -0
- aria_code/apps/cli/intent.py +136 -0
- aria_code/apps/cli/intent_router.py +276 -0
- aria_code/apps/cli/intent_signals.py +344 -0
- aria_code/apps/cli/lifecycle_hooks.py +48 -0
- aria_code/apps/cli/local_tool_schemas.py +536 -0
- aria_code/apps/cli/main.py +29 -0
- aria_code/apps/cli/market_metadata.py +135 -0
- aria_code/apps/cli/market_universe.py +487 -0
- aria_code/apps/cli/message_processing.py +310 -0
- aria_code/apps/cli/model_catalog.py +620 -0
- aria_code/apps/cli/pdf_report.py +977 -0
- aria_code/apps/cli/plan_mode.py +139 -0
- aria_code/apps/cli/plotly_html.py +15 -0
- aria_code/apps/cli/prediction_feedback.py +202 -0
- aria_code/apps/cli/preflight.py +502 -0
- aria_code/apps/cli/project_aria.py +60 -0
- aria_code/apps/cli/prompt_assembly.py +59 -0
- aria_code/apps/cli/prompts/__init__.py +0 -0
- aria_code/apps/cli/prompts/coding.py +53 -0
- aria_code/apps/cli/prompts/select.py +142 -0
- aria_code/apps/cli/prompts/system_prompts.py +552 -0
- aria_code/apps/cli/prompts/ui.py +436 -0
- aria_code/apps/cli/provider_endpoints.py +237 -0
- aria_code/apps/cli/provider_keys.py +73 -0
- aria_code/apps/cli/providers/__init__.py +1 -0
- aria_code/apps/cli/providers/base.py +521 -0
- aria_code/apps/cli/providers/chat_routing.py +128 -0
- aria_code/apps/cli/providers/collaboration.py +98 -0
- aria_code/apps/cli/providers/llm/__init__.py +1 -0
- aria_code/apps/cli/providers/llm/offline_responses.py +68 -0
- aria_code/apps/cli/providers/llm/ollama_stream.py +1594 -0
- aria_code/apps/cli/providers/llm/response_cache.py +60 -0
- aria_code/apps/cli/providers/llm/sse_stream.py +257 -0
- aria_code/apps/cli/providers/runtime_bridge.py +353 -0
- aria_code/apps/cli/providers/vertexai_stream.py +316 -0
- aria_code/apps/cli/runtime_consumer.py +657 -0
- aria_code/apps/cli/sandbox.py +32 -0
- aria_code/apps/cli/session_export.py +120 -0
- aria_code/apps/cli/session_jsonl.py +208 -0
- aria_code/apps/cli/session_store.py +112 -0
- aria_code/apps/cli/skills_catalog.py +273 -0
- aria_code/apps/cli/todo_tracker.py +190 -0
- aria_code/apps/cli/tool_executor.py +823 -0
- aria_code/apps/cli/tool_registry.py +34 -0
- aria_code/apps/cli/tool_scope.py +106 -0
- aria_code/apps/cli/tools/__init__.py +40 -0
- aria_code/apps/cli/tools/context.py +46 -0
- aria_code/apps/cli/tools/file_tools.py +180 -0
- aria_code/apps/cli/tools/market_tools.py +620 -0
- aria_code/apps/cli/tools/notebook_tools.py +111 -0
- aria_code/apps/cli/tools/system_tools.py +726 -0
- aria_code/apps/cli/tools/write_tools.py +845 -0
- aria_code/apps/cli/tradingview_bridge.py +529 -0
- aria_code/apps/cli/turn_planning.py +137 -0
- aria_code/apps/cli/update_check.py +153 -0
- aria_code/apps/cli/utils/__init__.py +0 -0
- aria_code/apps/cli/utils/market_detect.py +1597 -0
- aria_code/apps/daemon/README.md +14 -0
- aria_code/apps/vscode/README.md +115 -0
- aria_code/apps/vscode/package.json +70 -0
- aria_code/aria_cli.py +6743 -0
- aria_code/aria_daemon.py +1398 -0
- aria_code/aria_feishu_bot.py +1423 -0
- aria_code/aria_mcp_server.py +7 -0
- aria_code/aria_relay_client.py +4 -0
- aria_code/aria_relay_server.py +490 -0
- aria_code/aria_telegram_bot.py +202 -0
- aria_code/ariarc.py +385 -0
- aria_code/artifacts.py +581 -0
- aria_code/backtest_engine.py +4 -0
- aria_code/backtest_report.py +4 -0
- aria_code/brokers/__init__.py +78 -0
- aria_code/brokers/automation.py +193 -0
- aria_code/brokers/base.py +231 -0
- aria_code/brokers/capabilities.py +264 -0
- aria_code/brokers/cn/__init__.py +10 -0
- aria_code/brokers/cn/easytrader_broker.py +193 -0
- aria_code/brokers/cn/futu_broker.py +194 -0
- aria_code/brokers/cn/longbridge_broker.py +190 -0
- aria_code/brokers/cn/tiger_broker.py +196 -0
- aria_code/brokers/cn/xtquant_broker.py +225 -0
- aria_code/brokers/config.py +414 -0
- aria_code/brokers/intl/__init__.py +5 -0
- aria_code/brokers/intl/alpaca_broker.py +183 -0
- aria_code/brokers/intl/ibkr_broker.py +215 -0
- aria_code/brokers/intl/trading212_broker.py +183 -0
- aria_code/brokers/intl/webull_broker.py +156 -0
- aria_code/brokers/paper_broker.py +266 -0
- aria_code/brokers/planning.py +296 -0
- aria_code/brokers/registry.py +213 -0
- aria_code/brokers/trading.py +267 -0
- aria_code/canva_client.py +4 -0
- aria_code/change_store.py +127 -0
- aria_code/clients/__init__.py +0 -0
- aria_code/clients/aliyun_data_client.py +660 -0
- aria_code/clients/aria_relay_client.py +182 -0
- aria_code/clients/canva_client.py +284 -0
- aria_code/clients/figma_client.py +100 -0
- aria_code/clients/football_data_client.py +1671 -0
- aria_code/clients/kling_video_client.py +182 -0
- aria_code/clients/market_data_client.py +1976 -0
- aria_code/clients/openai_image_client.py +242 -0
- aria_code/clients/runway_video_client.py +157 -0
- aria_code/clients/warehouse_erp_client.py +105 -0
- aria_code/cloud_memory.py +181 -0
- aria_code/command_safety.py +19 -0
- aria_code/computer_use_tools.py +4 -0
- aria_code/dashboard_generator.py +579 -0
- aria_code/data_analysis_tools.py +4 -0
- aria_code/data_cleaner.py +483 -0
- aria_code/data_service.py +513 -0
- aria_code/datasources/__init__.py +23 -0
- aria_code/datasources/base.py +166 -0
- aria_code/datasources/router.py +253 -0
- aria_code/datasources/sources/__init__.py +15 -0
- aria_code/datasources/sources/akshare_source.py +269 -0
- aria_code/datasources/sources/alpha_vantage_source.py +203 -0
- aria_code/datasources/sources/edgar_source.py +219 -0
- aria_code/datasources/sources/finnhub_source.py +198 -0
- aria_code/datasources/sources/fred_source.py +223 -0
- aria_code/datasources/sources/tushare_source.py +143 -0
- aria_code/datasources/sources/web_scraper_source.py +278 -0
- aria_code/datasources/sources/world_bank_source.py +206 -0
- aria_code/datasources/sources/yfinance_source.py +152 -0
- aria_code/demo_player.py +207 -0
- aria_code/doctor.py +813 -0
- aria_code/domain/__init__.py +0 -0
- aria_code/domain/backtest_engine.py +354 -0
- aria_code/domain/backtest_report.py +472 -0
- aria_code/domain/finance_formulas.py +389 -0
- aria_code/domain/portfolio_ledger.py +307 -0
- aria_code/domain/strategy_vault.py +421 -0
- aria_code/evals/__init__.py +37 -0
- aria_code/evals/harness.py +598 -0
- aria_code/evals/runner.py +238 -0
- aria_code/external_agent_runner.py +115 -0
- aria_code/figma_client.py +4 -0
- aria_code/file_analysis_tools.py +4 -0
- aria_code/finance_formulas.py +4 -0
- aria_code/football_data_client.py +4 -0
- aria_code/image_gen_tools.py +4 -0
- aria_code/intent_classifier.py +386 -0
- aria_code/kling_video_client.py +4 -0
- aria_code/licensing.py +151 -0
- aria_code/local_finance_tools.py +4 -0
- aria_code/local_image_provider.py +4 -0
- aria_code/local_llm_provider.py +4 -0
- aria_code/macro_tools.py +4 -0
- aria_code/markdown_pdf.py +289 -0
- aria_code/market_data_client.py +4 -0
- aria_code/mcp_client.py +639 -0
- aria_code/memory_manager.py +246 -0
- aria_code/model_capability.py +486 -0
- aria_code/notification_tools.py +4 -0
- aria_code/openai_image_client.py +4 -0
- aria_code/packages/__init__.py +23 -0
- aria_code/packages/adk_bridge/__init__.py +11 -0
- aria_code/packages/adk_bridge/code_review_tools.py +49 -0
- aria_code/packages/adk_bridge/market_tools.py +125 -0
- aria_code/packages/aria_agents/__init__.py +5 -0
- aria_code/packages/aria_agents/manifest.py +78 -0
- aria_code/packages/aria_core/__init__.py +34 -0
- aria_code/packages/aria_core/architecture.py +269 -0
- aria_code/packages/aria_core/export.py +147 -0
- aria_code/packages/aria_core/manifest.py +65 -0
- aria_code/packages/aria_core/paths.py +57 -0
- aria_code/packages/aria_core/secure_file.py +68 -0
- aria_code/packages/aria_infra/__init__.py +15 -0
- aria_code/packages/aria_infra/arthera.py +52 -0
- aria_code/packages/aria_infra/doctor.py +246 -0
- aria_code/packages/aria_infra/product.py +40 -0
- aria_code/packages/aria_mcp/__init__.py +25 -0
- aria_code/packages/aria_mcp/bridge.py +201 -0
- aria_code/packages/aria_mcp/circuit.py +82 -0
- aria_code/packages/aria_mcp/config.py +111 -0
- aria_code/packages/aria_mcp/installer.py +95 -0
- aria_code/packages/aria_mcp/server.py +1550 -0
- aria_code/packages/aria_mcp/tools.py +81 -0
- aria_code/packages/aria_sdk/__init__.py +19 -0
- aria_code/packages/aria_sdk/client.py +396 -0
- aria_code/packages/aria_sdk/providers.py +70 -0
- aria_code/packages/aria_sdk/streaming.py +79 -0
- aria_code/packages/aria_sdk/types.py +86 -0
- aria_code/packages/aria_services/__init__.py +92 -0
- aria_code/packages/aria_services/cache.py +60 -0
- aria_code/packages/aria_services/context.py +356 -0
- aria_code/packages/aria_services/context_checkpoints.py +157 -0
- aria_code/packages/aria_services/data.py +11 -0
- aria_code/packages/aria_services/provider_health.py +268 -0
- aria_code/packages/aria_services/references.py +247 -0
- aria_code/packages/aria_services/registry.py +249 -0
- aria_code/packages/aria_services/research_protocol.py +57 -0
- aria_code/packages/aria_services/research_quality.py +186 -0
- aria_code/packages/aria_services/settings.py +157 -0
- aria_code/packages/aria_services/usage.py +151 -0
- aria_code/packages/aria_skills/__init__.py +46 -0
- aria_code/packages/aria_skills/catalog.py +149 -0
- aria_code/packages/aria_skills/loader.py +455 -0
- aria_code/packages/aria_skills/registry.py +84 -0
- aria_code/packages/aria_tools/__init__.py +5 -0
- aria_code/packages/aria_tools/financial/__init__.py +8 -0
- aria_code/packages/aria_tools/financial/_paths.py +130 -0
- aria_code/packages/aria_tools/financial/compliance.py +31 -0
- aria_code/packages/aria_tools/financial/factors.py +33 -0
- aria_code/packages/aria_tools/financial/risk_tools.py +33 -0
- aria_code/packages/aria_tools/financial/strategy.py +31 -0
- aria_code/packages/aria_tools/registry.py +128 -0
- aria_code/packages/quant_engine/__init__.py +34 -0
- aria_code/packages/quant_engine/_namespace.py +62 -0
- aria_code/packages/quant_engine/backtest/__init__.py +14 -0
- aria_code/packages/quant_engine/backtest/core.py +53 -0
- aria_code/packages/quant_engine/backtest/engine.py +96 -0
- aria_code/packages/quant_engine/portfolio/__init__.py +13 -0
- aria_code/packages/quant_engine/portfolio/optimizer.py +85 -0
- aria_code/packages/quant_engine/sports/__init__.py +80 -0
- aria_code/packages/quant_engine/sports/calibrator.py +354 -0
- aria_code/packages/quant_engine/sports/dixon_coles.py +234 -0
- aria_code/packages/quant_engine/sports/elo.py +300 -0
- aria_code/packages/quant_engine/sports/form.py +188 -0
- aria_code/packages/quant_engine/sports/h2h.py +195 -0
- aria_code/packages/quant_engine/sports/ml_model.py +377 -0
- aria_code/packages/quant_engine/sports/predictor.py +312 -0
- aria_code/packages/quant_engine/sports/tracker.py +665 -0
- aria_code/packages/quant_engine/stochastic/__init__.py +35 -0
- aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +195 -0
- aria_code/packages/quant_engine/stochastic/ito_calculus.py +477 -0
- aria_code/packages/quant_engine/stochastic/kelly_criterion.py +181 -0
- aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +95 -0
- aria_code/packages/quant_engine/stochastic/options_pricing.py +576 -0
- aria_code/packages/quant_engine/stochastic/stochastic_processes.py +90 -0
- aria_code/packs/__init__.py +85 -0
- aria_code/packs/base.py +168 -0
- aria_code/packs/finance/__init__.py +250 -0
- aria_code/packs/logistics/__init__.py +169 -0
- aria_code/packs/payments/__init__.py +139 -0
- aria_code/packs/realty/__init__.py +190 -0
- aria_code/packs/registry.py +202 -0
- aria_code/packs/rules.py +90 -0
- aria_code/plan_utils.py +194 -0
- aria_code/plugin_loader.py +328 -0
- aria_code/portfolio_ledger.py +4 -0
- aria_code/preview_server.py +449 -0
- aria_code/privacy/__init__.py +5 -0
- aria_code/privacy/feedback.py +123 -0
- aria_code/project_review.py +278 -0
- aria_code/project_review_api.py +235 -0
- aria_code/project_review_server.py +18 -0
- aria_code/project_tools.py +4 -0
- aria_code/providers/__init__.py +30 -0
- aria_code/providers/llm/__init__.py +19 -0
- aria_code/providers/llm/anthropic.py +184 -0
- aria_code/providers/llm/autoconfig.py +213 -0
- aria_code/providers/llm/base.py +139 -0
- aria_code/providers/llm/custom.py +158 -0
- aria_code/providers/llm/ollama.py +129 -0
- aria_code/providers/llm/openai_compat.py +313 -0
- aria_code/providers/llm/registry.py +444 -0
- aria_code/providers/local_image_provider.py +202 -0
- aria_code/providers/local_llm_provider.py +589 -0
- aria_code/realty_data_tools.py +4 -0
- aria_code/report_exporters.py +150 -0
- aria_code/report_generator.py +1764 -0
- aria_code/runtime/__init__.py +169 -0
- aria_code/runtime/acceptance.py +481 -0
- aria_code/runtime/agent_loop.py +1520 -0
- aria_code/runtime/approval.py +57 -0
- aria_code/runtime/budget.py +232 -0
- aria_code/runtime/checkpoints.py +432 -0
- aria_code/runtime/crash_report.py +174 -0
- aria_code/runtime/events.py +113 -0
- aria_code/runtime/gateway.py +150 -0
- aria_code/runtime/lsp.py +484 -0
- aria_code/runtime/orchestrator.py +55 -0
- aria_code/runtime/repo_map.py +700 -0
- aria_code/runtime/run_state.py +127 -0
- aria_code/runtime/run_store.py +450 -0
- aria_code/runtime/self_healing.py +422 -0
- aria_code/runtime/subagent.py +547 -0
- aria_code/runtime/task_ledger.py +86 -0
- aria_code/runtime/task_orchestrator.py +90 -0
- aria_code/runtime/tool_executor.py +217 -0
- aria_code/runtime/tool_policy.py +107 -0
- aria_code/runtime/worktrees.py +215 -0
- aria_code/runway_video_client.py +4 -0
- aria_code/safety/__init__.py +23 -0
- aria_code/safety/permissions.py +306 -0
- aria_code/safety/service.py +102 -0
- aria_code/setup_wizard.py +673 -0
- aria_code/spreadsheet_tools.py +4 -0
- aria_code/strategy_vault.py +4 -0
- aria_code/tools/__init__.py +0 -0
- aria_code/tools/artifact_tools.py +252 -0
- aria_code/tools/broker_tools.py +92 -0
- aria_code/tools/build_quant_engine.py +97 -0
- aria_code/tools/code_audit_tools.py +192 -0
- aria_code/tools/computer_use_tools.py +504 -0
- aria_code/tools/data_analysis_tools.py +809 -0
- aria_code/tools/enterprise_finance_tools.py +156 -0
- aria_code/tools/extended_tools.py +240 -0
- aria_code/tools/file_analysis_tools.py +885 -0
- aria_code/tools/image_gen_tools.py +114 -0
- aria_code/tools/local_finance_tools.py +3417 -0
- aria_code/tools/logistics_tools.py +135 -0
- aria_code/tools/macro_tools.py +369 -0
- aria_code/tools/notification_tools.py +249 -0
- aria_code/tools/project_tools.py +525 -0
- aria_code/tools/realty_data_tools.py +659 -0
- aria_code/tools/spreadsheet_tools.py +388 -0
- aria_code/tools/stripe_tools.py +115 -0
- aria_code/ui/__init__.py +105 -0
- aria_code/ui/banner.py +508 -0
- aria_code/ui/completer.py +501 -0
- aria_code/ui/console.py +281 -0
- aria_code/ui/image_render.py +243 -0
- aria_code/ui/input_box.py +488 -0
- aria_code/ui/picker.py +201 -0
- aria_code/ui/render/__init__.py +11 -0
- aria_code/ui/render/finance.py +1705 -0
- aria_code/ui/render/market.py +225 -0
- aria_code/ui/render/output.py +775 -0
- aria_code/ui/render/responsive.py +75 -0
- aria_code/ui/render/team.py +354 -0
- aria_code/ui/robot.py +235 -0
- aria_code/ui/startup_dashboard.py +109 -0
- aria_code/utils/vscode_uri.py +37 -0
- aria_code/video_analysis.py +147 -0
- aria_code/video_editor.py +271 -0
- aria_code/workspace/__init__.py +6 -0
- aria_code/workspace/files.py +193 -0
- aria_code/workspace/verify.py +113 -0
- aria_code/workspace_changes.py +199 -0
- aria_code/workspace_context.py +233 -0
- aria_code/workspace_service.py +196 -0
- aria_code/workspace_tools.py +150 -0
- aria_code-0.52.0.dist-info/METADATA +237 -0
- aria_code-0.52.0.dist-info/RECORD +478 -0
- aria_code-0.52.0.dist-info/WHEEL +5 -0
- aria_code-0.52.0.dist-info/entry_points.txt +3 -0
- aria_code-0.52.0.dist-info/licenses/LICENSE +201 -0
- aria_code-0.52.0.dist-info/licenses/NOTICE +49 -0
- aria_code-0.52.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
"""Command-line entry point for the verifiable eval suites.
|
|
2
|
+
|
|
3
|
+
python3 -m aria_code.evals.runner evals/suites/core.yaml
|
|
4
|
+
python3 -m aria_code.evals.runner evals/suites/core.yaml --tag logistics
|
|
5
|
+
python3 -m aria_code.evals.runner evals/suites/core.yaml --check # no agent
|
|
6
|
+
|
|
7
|
+
``--check`` is the mode worth knowing about. It runs every task's pre-flight
|
|
8
|
+
and nothing else, so it answers "is this suite still measuring anything?"
|
|
9
|
+
without a model, an API key, or a minute of runtime. Run it in CI: a fixture
|
|
10
|
+
that has drifted green is a silent scoreboard inflation, and this is what
|
|
11
|
+
catches it on the commit that caused it rather than a month later.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
from __future__ import annotations
|
|
15
|
+
|
|
16
|
+
import argparse
|
|
17
|
+
import sys
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
|
|
20
|
+
from .harness import (
|
|
21
|
+
ERROR,
|
|
22
|
+
FAIL,
|
|
23
|
+
INVALID,
|
|
24
|
+
PASS,
|
|
25
|
+
SuiteResult,
|
|
26
|
+
TaskResult,
|
|
27
|
+
load_suite,
|
|
28
|
+
run_suite,
|
|
29
|
+
write_report,
|
|
30
|
+
)
|
|
31
|
+
|
|
32
|
+
_ICONS = {PASS: "✓", FAIL: "✗", INVALID: "⚠", ERROR: "!"}
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class _TimedOut:
|
|
36
|
+
"""Marker: the agent was cut off before it could finish.
|
|
37
|
+
|
|
38
|
+
Carries a non-zero ``returncode`` so the harness's existing solver-failure
|
|
39
|
+
check classifies it as ERROR — excluded from the score — rather than as a
|
|
40
|
+
task the model failed.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
returncode = 124
|
|
44
|
+
|
|
45
|
+
def __init__(self, seconds: int) -> None:
|
|
46
|
+
self.stderr = f"the agent was still working when the {seconds}s budget ran out"
|
|
47
|
+
self.stdout = ""
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def check_only_solver(prompt: str, workspace: Path) -> None:
|
|
51
|
+
"""A solver that does nothing, so only the pre-flight is exercised.
|
|
52
|
+
|
|
53
|
+
Every task should come back FAIL under it. A PASS means the fixture is
|
|
54
|
+
already green; anything else means the fixture or its check is broken.
|
|
55
|
+
"""
|
|
56
|
+
return None
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def build_agent_solver(*, model: str = "", timeout: int = 900, local: bool = False):
|
|
60
|
+
"""Drive the real Aria agent over one task, in the task's own workspace.
|
|
61
|
+
|
|
62
|
+
The agent is invoked as a subprocess in headless mode rather than in this
|
|
63
|
+
process on purpose: a task that leaves the interpreter's cwd, module cache
|
|
64
|
+
or event loop in a strange state then cannot contaminate the next task's
|
|
65
|
+
score.
|
|
66
|
+
|
|
67
|
+
``--dangerously-skip-permissions`` is not optional here, and it is safe for
|
|
68
|
+
the same reason the flag is dangerous everywhere else: the agent is pointed
|
|
69
|
+
at a throwaway copy of a fixture. Without it every write waits on an
|
|
70
|
+
approval prompt that no one is there to answer, so every task times out and
|
|
71
|
+
the suite scores zero for a reason that has nothing to do with the model.
|
|
72
|
+
"""
|
|
73
|
+
import subprocess
|
|
74
|
+
|
|
75
|
+
def _solve(prompt: str, workspace: Path):
|
|
76
|
+
command = [
|
|
77
|
+
sys.executable, "-m", "aria_code.aria_cli",
|
|
78
|
+
"-p", prompt,
|
|
79
|
+
"--dangerously-skip-permissions",
|
|
80
|
+
"--no-banner",
|
|
81
|
+
]
|
|
82
|
+
if model:
|
|
83
|
+
command.extend(["--model", model])
|
|
84
|
+
if local:
|
|
85
|
+
command.append("--local")
|
|
86
|
+
try:
|
|
87
|
+
return subprocess.run(
|
|
88
|
+
command,
|
|
89
|
+
cwd=str(workspace),
|
|
90
|
+
capture_output=True,
|
|
91
|
+
text=True,
|
|
92
|
+
timeout=timeout,
|
|
93
|
+
check=False,
|
|
94
|
+
)
|
|
95
|
+
except subprocess.TimeoutExpired:
|
|
96
|
+
# A truncated run is not a measured failure.
|
|
97
|
+
#
|
|
98
|
+
# I first scored this as FAIL, reasoning "it had its time and
|
|
99
|
+
# produced nothing". That holds only when the budget is generous
|
|
100
|
+
# relative to how long the work takes. It was not: the same task
|
|
101
|
+
# completed in 78–146s alone and exceeded 600s inside a suite,
|
|
102
|
+
# where back-to-back turns contend and get throttled. Scoring that
|
|
103
|
+
# as FAIL blamed the model for the harness cutting it off — which
|
|
104
|
+
# is precisely the confusion PASS/FAIL vs ERROR exists to prevent.
|
|
105
|
+
return _TimedOut(timeout)
|
|
106
|
+
|
|
107
|
+
return _solve
|
|
108
|
+
|
|
109
|
+
|
|
110
|
+
def _print_result(result: TaskResult) -> None:
|
|
111
|
+
icon = _ICONS.get(result.outcome, "?")
|
|
112
|
+
line = f" {icon} {result.task_id} ({result.seconds:.1f}s)"
|
|
113
|
+
if result.detail:
|
|
114
|
+
line += f" — {result.detail}"
|
|
115
|
+
print(line)
|
|
116
|
+
if result.outcome == FAIL and result.changed:
|
|
117
|
+
print(f" changed: {', '.join(result.changed)}")
|
|
118
|
+
if result.outcome in (FAIL, INVALID, ERROR) and result.log:
|
|
119
|
+
for log_line in result.log.splitlines()[-8:]:
|
|
120
|
+
print(f" {log_line}")
|
|
121
|
+
|
|
122
|
+
|
|
123
|
+
def main(argv: list[str] | None = None) -> int:
|
|
124
|
+
parser = argparse.ArgumentParser(prog="aria-evals", description=__doc__)
|
|
125
|
+
parser.add_argument("suite", help="path to a suite YAML file")
|
|
126
|
+
parser.add_argument("--fixtures", default="", help="fixtures root (default: <suite>/../fixtures)")
|
|
127
|
+
parser.add_argument("--only", nargs="*", default=[], help="run only these task ids")
|
|
128
|
+
parser.add_argument("--tag", nargs="*", default=[], help="run only tasks with these tags")
|
|
129
|
+
parser.add_argument("--check", action="store_true",
|
|
130
|
+
help="run only the pre-flight: verify every task still starts red")
|
|
131
|
+
parser.add_argument("--model", default="", help="model to pass to the agent")
|
|
132
|
+
parser.add_argument("--local", action="store_true",
|
|
133
|
+
help="run the agent local-only (Ollama), skipping the cloud backend")
|
|
134
|
+
parser.add_argument("--solve-timeout", type=int, default=900,
|
|
135
|
+
help="seconds to give the agent per task (default 900)")
|
|
136
|
+
parser.add_argument("--repeat", type=int, default=1, metavar="N",
|
|
137
|
+
help="run the suite N times; pass@1 is then passes/attempts (default 1)")
|
|
138
|
+
parser.add_argument("--report", default="", help="write the scoreboard to this JSON path")
|
|
139
|
+
parser.add_argument("--keep", action="store_true", help="keep task workspaces for inspection")
|
|
140
|
+
parser.add_argument("--scratch", default="", help="scratch root (implies --keep)")
|
|
141
|
+
args = parser.parse_args(argv)
|
|
142
|
+
|
|
143
|
+
suite_path = Path(args.suite).expanduser().resolve()
|
|
144
|
+
fixtures = Path(args.fixtures).expanduser().resolve() if args.fixtures else (
|
|
145
|
+
suite_path.parent.parent / "fixtures"
|
|
146
|
+
)
|
|
147
|
+
|
|
148
|
+
try:
|
|
149
|
+
name, tasks = load_suite(suite_path)
|
|
150
|
+
except Exception as exc:
|
|
151
|
+
print(f"could not load suite: {exc}", file=sys.stderr)
|
|
152
|
+
return 2
|
|
153
|
+
|
|
154
|
+
if not tasks:
|
|
155
|
+
print(f"suite {name} has no tasks", file=sys.stderr)
|
|
156
|
+
return 2
|
|
157
|
+
|
|
158
|
+
solver = check_only_solver if args.check else build_agent_solver(
|
|
159
|
+
model=args.model, timeout=args.solve_timeout, local=args.local,
|
|
160
|
+
)
|
|
161
|
+
mode = "pre-flight only" if args.check else f"agent{f' ({args.model})' if args.model else ''}"
|
|
162
|
+
print(f"\n{name} — {len(tasks)} task(s), {mode}\n")
|
|
163
|
+
|
|
164
|
+
repeats = max(1, args.repeat)
|
|
165
|
+
suite: SuiteResult | None = None
|
|
166
|
+
for attempt in range(repeats):
|
|
167
|
+
if repeats > 1:
|
|
168
|
+
print(f" — attempt {attempt + 1}/{repeats} —")
|
|
169
|
+
run = run_suite(
|
|
170
|
+
tasks,
|
|
171
|
+
solver=solver,
|
|
172
|
+
fixtures_root=fixtures,
|
|
173
|
+
name=name,
|
|
174
|
+
only=args.only,
|
|
175
|
+
tags=args.tag,
|
|
176
|
+
scratch_root=args.scratch or None,
|
|
177
|
+
keep_workspace=args.keep,
|
|
178
|
+
on_result=_print_result,
|
|
179
|
+
)
|
|
180
|
+
if suite is None:
|
|
181
|
+
suite = run
|
|
182
|
+
else:
|
|
183
|
+
suite.merge(run)
|
|
184
|
+
assert suite is not None
|
|
185
|
+
|
|
186
|
+
print(f"\n{suite.summary_line()}")
|
|
187
|
+
if repeats > 1:
|
|
188
|
+
# Print the per-task record, because an aggregate hides the tasks that
|
|
189
|
+
# flip. A task at 2/3 is a different engineering problem from two tasks
|
|
190
|
+
# at 1/1 and 1/2.
|
|
191
|
+
for task_id, stats in sorted(suite.per_task().items()):
|
|
192
|
+
if stats["attempts"]:
|
|
193
|
+
print(f" {task_id:<28} {stats['passed']}/{stats['attempts']}")
|
|
194
|
+
by_tag = suite.by_tag()
|
|
195
|
+
if by_tag and not args.check:
|
|
196
|
+
for tag, stats in by_tag.items():
|
|
197
|
+
if stats["scored"]:
|
|
198
|
+
print(f" {tag:<16} {stats['passed']}/{stats['scored']} ({stats['pass_rate']:.0%})")
|
|
199
|
+
|
|
200
|
+
if args.report:
|
|
201
|
+
print(f"\nreport → {write_report(suite, args.report)}")
|
|
202
|
+
|
|
203
|
+
if args.check:
|
|
204
|
+
# In check mode the only acceptable outcome is "every task is still
|
|
205
|
+
# broken". A pass here means a fixture drifted green and the suite is
|
|
206
|
+
# quietly measuring less than it claims.
|
|
207
|
+
#
|
|
208
|
+
# "Could not run" is reported separately from "drifted green" because
|
|
209
|
+
# they call for opposite responses and were previously indistinguishable:
|
|
210
|
+
# CI installed the package without pytest, every task errored with
|
|
211
|
+
# "environment is missing pytest", and the verdict said five fixtures had
|
|
212
|
+
# stopped being red. That reads as a fixture problem and sends whoever
|
|
213
|
+
# sees it to look at the fixtures, which are fine.
|
|
214
|
+
errored = [r for r in suite.results if r.outcome == ERROR]
|
|
215
|
+
drifted = [r.task_id for r in suite.results
|
|
216
|
+
if r.outcome != FAIL and r.outcome != ERROR]
|
|
217
|
+
|
|
218
|
+
if errored:
|
|
219
|
+
print(f"\n✗ {len(errored)} task(s) could not run — this is an "
|
|
220
|
+
f"environment problem, not a drifted fixture:")
|
|
221
|
+
for result in errored:
|
|
222
|
+
print(f" {result.task_id}: {result.detail}")
|
|
223
|
+
print("\n The suite declares what it needs with `requires:`. "
|
|
224
|
+
"Install it and run again;")
|
|
225
|
+
print(" `pip install -e \".[dev]\"` covers the pytest the shipped "
|
|
226
|
+
"suite asks for.")
|
|
227
|
+
if drifted:
|
|
228
|
+
print(f"\n✗ {len(drifted)} task(s) no longer start red: {', '.join(drifted)}")
|
|
229
|
+
if errored or drifted:
|
|
230
|
+
return 1
|
|
231
|
+
print(f"\n✓ all {len(suite.results)} task(s) still start red")
|
|
232
|
+
return 0
|
|
233
|
+
|
|
234
|
+
return 0 if suite.failed == 0 and suite.errored == 0 and suite.invalid == 0 else 1
|
|
235
|
+
|
|
236
|
+
|
|
237
|
+
if __name__ == "__main__":
|
|
238
|
+
raise SystemExit(main())
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
"""Delegate a task to the Claude Code or Codex CLI as an external headless agent.
|
|
2
|
+
|
|
3
|
+
Complements runtime/subagent.py's spawn_task system: by default a spawned
|
|
4
|
+
task runs inside aria-code's own LLM loop, but a task can instead be
|
|
5
|
+
delegated to another agentic coding CLI already installed on the machine
|
|
6
|
+
(``backend="claude"`` / ``backend="codex"``), reusing whatever coding
|
|
7
|
+
capability that tool has. Both runners return plain text — a success/failure
|
|
8
|
+
string, never a raised exception — so a missing binary or a CLI-side failure
|
|
9
|
+
degrades the same way a normal subagent failure does (task.status="failed"
|
|
10
|
+
with .error set), and never crashes the background task loop.
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from __future__ import annotations
|
|
14
|
+
|
|
15
|
+
import asyncio
|
|
16
|
+
import json
|
|
17
|
+
import shutil
|
|
18
|
+
from typing import Optional
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
async def _run_cli(
|
|
22
|
+
binary: str,
|
|
23
|
+
args: list[str],
|
|
24
|
+
*,
|
|
25
|
+
cwd: Optional[str],
|
|
26
|
+
timeout: float,
|
|
27
|
+
) -> tuple[bool, str]:
|
|
28
|
+
"""Run one CLI invocation. Returns (ok, text) — never raises."""
|
|
29
|
+
if not shutil.which(binary):
|
|
30
|
+
return False, f"{binary} CLI not found on PATH. Install it first."
|
|
31
|
+
try:
|
|
32
|
+
proc = await asyncio.create_subprocess_exec(
|
|
33
|
+
binary, *args,
|
|
34
|
+
cwd=cwd,
|
|
35
|
+
stdout=asyncio.subprocess.PIPE,
|
|
36
|
+
stderr=asyncio.subprocess.PIPE,
|
|
37
|
+
)
|
|
38
|
+
except Exception as exc:
|
|
39
|
+
return False, f"Failed to launch {binary}: {exc}"
|
|
40
|
+
|
|
41
|
+
try:
|
|
42
|
+
stdout, stderr = await asyncio.wait_for(proc.communicate(), timeout=timeout)
|
|
43
|
+
except asyncio.TimeoutError:
|
|
44
|
+
proc.kill()
|
|
45
|
+
return False, f"{binary} CLI timed out after {timeout:.0f}s."
|
|
46
|
+
|
|
47
|
+
out_text = stdout.decode("utf-8", errors="replace")
|
|
48
|
+
if proc.returncode != 0:
|
|
49
|
+
err_text = stderr.decode("utf-8", errors="replace")[:500]
|
|
50
|
+
return False, f"{binary} CLI exited {proc.returncode}: {err_text or out_text[:500]}"
|
|
51
|
+
return True, out_text
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _extract_json_result(raw: str, *keys: str) -> str:
|
|
55
|
+
"""Best-effort pull of the human-readable result out of a CLI's JSON output.
|
|
56
|
+
|
|
57
|
+
Both CLIs' exact JSON shapes can vary by version, so this tries each
|
|
58
|
+
candidate key and falls back to the raw text — a schema drift should
|
|
59
|
+
degrade to "less clean output", not a crash or an empty result.
|
|
60
|
+
"""
|
|
61
|
+
raw = raw.strip()
|
|
62
|
+
if not raw:
|
|
63
|
+
return "(no output)"
|
|
64
|
+
try:
|
|
65
|
+
data = json.loads(raw)
|
|
66
|
+
except json.JSONDecodeError:
|
|
67
|
+
return raw
|
|
68
|
+
if isinstance(data, dict):
|
|
69
|
+
for key in keys:
|
|
70
|
+
value = data.get(key)
|
|
71
|
+
if isinstance(value, str) and value:
|
|
72
|
+
return value
|
|
73
|
+
return raw
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
async def run_claude_code_headless(
|
|
77
|
+
prompt: str,
|
|
78
|
+
*,
|
|
79
|
+
cwd: Optional[str] = None,
|
|
80
|
+
timeout: float = 600.0,
|
|
81
|
+
) -> str:
|
|
82
|
+
"""Delegate `prompt` to `claude -p` (Claude Code headless mode)."""
|
|
83
|
+
ok, text = await _run_cli(
|
|
84
|
+
"claude",
|
|
85
|
+
["-p", prompt, "--output-format", "json"],
|
|
86
|
+
cwd=cwd,
|
|
87
|
+
timeout=timeout,
|
|
88
|
+
)
|
|
89
|
+
if not ok:
|
|
90
|
+
return f"错误: {text}"
|
|
91
|
+
return _extract_json_result(text, "result", "response")
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
async def run_codex_headless(
|
|
95
|
+
prompt: str,
|
|
96
|
+
*,
|
|
97
|
+
cwd: Optional[str] = None,
|
|
98
|
+
timeout: float = 600.0,
|
|
99
|
+
) -> str:
|
|
100
|
+
"""Delegate `prompt` to `codex exec` (OpenAI Codex CLI headless mode)."""
|
|
101
|
+
ok, text = await _run_cli(
|
|
102
|
+
"codex",
|
|
103
|
+
["exec", prompt, "--json"],
|
|
104
|
+
cwd=cwd,
|
|
105
|
+
timeout=timeout,
|
|
106
|
+
)
|
|
107
|
+
if not ok:
|
|
108
|
+
return f"错误: {text}"
|
|
109
|
+
return _extract_json_result(text, "result", "message", "output")
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
RUNNERS = {
|
|
113
|
+
"claude": run_claude_code_headless,
|
|
114
|
+
"codex": run_codex_headless,
|
|
115
|
+
}
|