aria-code 0.167.0__py3-none-win_amd64.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_bots/__init__.py +7 -0
- aria_bots/channels/README.md +97 -0
- aria_bots/channels/__init__.py +1 -0
- aria_bots/channels/approvals.py +263 -0
- aria_bots/channels/conversation.py +280 -0
- aria_bots/channels/digest.py +186 -0
- aria_bots/channels/registry.py +95 -0
- aria_bots/engine.py +144 -0
- aria_bots/feishu_bot.py +1385 -0
- aria_bots/logistics/__init__.py +1 -0
- aria_bots/logistics/carriers.py +253 -0
- aria_bots/logistics/freight.py +154 -0
- aria_bots/logistics/inventory.py +242 -0
- aria_bots/logistics/mcp_server.py +156 -0
- aria_bots/logistics/records.py +119 -0
- aria_bots/logistics/tenancy.py +152 -0
- aria_bots/market.py +91 -0
- aria_bots/relay_client.py +326 -0
- aria_bots/telegram_bot.py +299 -0
- aria_code/__init__.py +111 -0
- aria_code/_bin/aria-native.exe +0 -0
- aria_code/_bin/aria-runtime.exe +0 -0
- aria_code/_version.py +20 -0
- aria_code/account_memory.py +296 -0
- aria_code/account_session.py +166 -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 +49 -0
- aria_code/agents/base.py +329 -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 +315 -0
- aria_code/agents/financial/fundamental.py +178 -0
- aria_code/agents/financial/macro.py +111 -0
- aria_code/agents/financial/news.py +231 -0
- aria_code/agents/financial/risk.py +146 -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 +277 -0
- aria_code/agents/orchestrator.py +44 -0
- aria_code/agents/portfolio_agent.py +392 -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 +168 -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 +500 -0
- aria_code/agents/video/__init__.py +16 -0
- aria_code/agents/video/director.py +376 -0
- aria_code/agents/video/qa_agent.py +143 -0
- aria_code/agents/video/script_doctor.py +112 -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/navigation.schema.json +110 -0
- aria_code/agents/warehouse/task_agent.py +172 -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 +9 -0
- aria_code/apps/channels/__init__.py +17 -0
- aria_code/apps/channels/approvals.py +11 -0
- aria_code/apps/channels/conversation.py +11 -0
- aria_code/apps/channels/digest.py +11 -0
- aria_code/apps/channels/intake.py +92 -0
- aria_code/apps/channels/registry.py +11 -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/app_server.py +656 -0
- aria_code/apps/cli/auto_update.py +125 -0
- aria_code/apps/cli/bootstrap.py +206 -0
- aria_code/apps/cli/broker_render.py +206 -0
- aria_code/apps/cli/chat_turn.py +1327 -0
- aria_code/apps/cli/cloud_models.py +231 -0
- aria_code/apps/cli/codegen_paths.py +29 -0
- aria_code/apps/cli/commands/__init__.py +34 -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 +378 -0
- aria_code/apps/cli/commands/ashare_prediction_cmds.py +327 -0
- aria_code/apps/cli/commands/auth_cmds.py +215 -0
- aria_code/apps/cli/commands/backtest_cmds.py +2518 -0
- aria_code/apps/cli/commands/broker_cmds.py +1236 -0
- aria_code/apps/cli/commands/business_workflow_cmds.py +379 -0
- aria_code/apps/cli/commands/canvas_cmds.py +77 -0
- aria_code/apps/cli/commands/catalog.py +189 -0
- aria_code/apps/cli/commands/core_cmds.py +2748 -0
- aria_code/apps/cli/commands/data_cmds.py +521 -0
- aria_code/apps/cli/commands/diagnostic_cmds.py +285 -0
- aria_code/apps/cli/commands/diagnostic_ops_cmds.py +813 -0
- aria_code/apps/cli/commands/engineering_cmds.py +399 -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 +544 -0
- aria_code/apps/cli/commands/market_cmds.py +1419 -0
- aria_code/apps/cli/commands/market_context.py +432 -0
- aria_code/apps/cli/commands/market_render.py +7 -0
- aria_code/apps/cli/commands/model_cmds.py +2374 -0
- aria_code/apps/cli/commands/ops_cmds.py +721 -0
- aria_code/apps/cli/commands/orchestrator_cmds.py +181 -0
- aria_code/apps/cli/commands/pdf_export_cmds.py +125 -0
- aria_code/apps/cli/commands/portfolio_cmds.py +1316 -0
- aria_code/apps/cli/commands/report.py +476 -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 +723 -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 +297 -0
- aria_code/apps/cli/commands/workflow_cmds.py +629 -0
- aria_code/apps/cli/commands/workspace_cmds.py +1543 -0
- aria_code/apps/cli/config_paths.py +73 -0
- aria_code/apps/cli/config_store.py +158 -0
- aria_code/apps/cli/constants.py +88 -0
- aria_code/apps/cli/context.py +34 -0
- aria_code/apps/cli/conversation_policy.py +53 -0
- aria_code/apps/cli/deterministic.py +200 -0
- aria_code/apps/cli/direct.py +48 -0
- aria_code/apps/cli/earnings_view.py +172 -0
- aria_code/apps/cli/endpoint_migration.py +64 -0
- aria_code/apps/cli/exec_events.py +255 -0
- aria_code/apps/cli/file_references.py +155 -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 +239 -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 +1314 -0
- aria_code/apps/cli/handlers/market_handlers.py +2570 -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/headless.py +352 -0
- aria_code/apps/cli/helpers.py +326 -0
- aria_code/apps/cli/hooks.py +180 -0
- aria_code/apps/cli/i18n.py +310 -0
- aria_code/apps/cli/intent.py +136 -0
- aria_code/apps/cli/intent_router.py +305 -0
- aria_code/apps/cli/intent_shadow.py +72 -0
- aria_code/apps/cli/intent_signals.py +347 -0
- aria_code/apps/cli/lifecycle_hooks.py +48 -0
- aria_code/apps/cli/local_tool_schemas.py +550 -0
- aria_code/apps/cli/main.py +39 -0
- aria_code/apps/cli/market_hours.py +100 -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/mixin_binding.py +32 -0
- aria_code/apps/cli/model_catalog.py +652 -0
- aria_code/apps/cli/model_probe.py +169 -0
- aria_code/apps/cli/model_retirement.py +65 -0
- aria_code/apps/cli/native_branding.py +12 -0
- aria_code/apps/cli/native_bridge.py +118 -0
- aria_code/apps/cli/native_entry.py +58 -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 +78 -0
- aria_code/apps/cli/prompts/__init__.py +0 -0
- aria_code/apps/cli/prompts/coding.py +71 -0
- aria_code/apps/cli/prompts/select.py +193 -0
- aria_code/apps/cli/prompts/system_prompts.py +562 -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 +775 -0
- aria_code/apps/cli/providers/chat_routing.py +139 -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 +1574 -0
- aria_code/apps/cli/providers/llm/response_cache.py +60 -0
- aria_code/apps/cli/providers/llm/sse_stream.py +298 -0
- aria_code/apps/cli/providers/runtime_bridge.py +586 -0
- aria_code/apps/cli/providers/vertexai_stream.py +592 -0
- aria_code/apps/cli/release_download.py +159 -0
- aria_code/apps/cli/review_runner.py +111 -0
- aria_code/apps/cli/runtime_consumer.py +769 -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_refresh.py +123 -0
- aria_code/apps/cli/session_store.py +125 -0
- aria_code/apps/cli/skills_catalog.py +273 -0
- aria_code/apps/cli/task_isolation.py +211 -0
- aria_code/apps/cli/terminal_chrome.py +412 -0
- aria_code/apps/cli/todo_tracker.py +190 -0
- aria_code/apps/cli/tool_executor.py +932 -0
- aria_code/apps/cli/tool_registry.py +34 -0
- aria_code/apps/cli/tool_scope.py +113 -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 +181 -0
- aria_code/apps/cli/tools/market_tools.py +626 -0
- aria_code/apps/cli/tools/notebook_tools.py +111 -0
- aria_code/apps/cli/tools/system_tools.py +656 -0
- aria_code/apps/cli/tools/write_tools.py +961 -0
- aria_code/apps/cli/tradingview_bridge.py +529 -0
- aria_code/apps/cli/transactions.py +269 -0
- aria_code/apps/cli/turn_planning.py +137 -0
- aria_code/apps/cli/update_check.py +257 -0
- aria_code/apps/cli/updater.py +373 -0
- aria_code/apps/cli/utils/__init__.py +0 -0
- aria_code/apps/cli/utils/market_detect.py +1663 -0
- aria_code/apps/cli/web_login.py +136 -0
- aria_code/apps/cli/workflow_runner.py +127 -0
- aria_code/apps/cli/workspace_route.py +121 -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 +5244 -0
- aria_code/aria_daemon.py +1372 -0
- aria_code/aria_feishu_bot.py +16 -0
- aria_code/aria_mcp_server.py +61 -0
- aria_code/aria_relay_client.py +4 -0
- aria_code/aria_telegram_bot.py +11 -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 +16 -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 +1985 -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 +190 -0
- aria_code/command_safety.py +19 -0
- aria_code/computer_use_server.py +276 -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/sec_statements.py +217 -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/doctor.py +860 -0
- aria_code/domain/__init__.py +0 -0
- aria_code/domain/_finance_core/__init__.py +5 -0
- aria_code/domain/_finance_core/backtest_engine.py +325 -0
- aria_code/domain/_finance_core/performance_stats.py +101 -0
- aria_code/domain/backtest_engine.py +75 -0
- aria_code/domain/backtest_report.py +488 -0
- aria_code/domain/finance_formulas.py +389 -0
- aria_code/domain/performance_stats.py +6 -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/behavior.py +113 -0
- aria_code/evals/gap.py +93 -0
- aria_code/evals/harness.py +949 -0
- aria_code/evals/review_probe.py +132 -0
- aria_code/evals/runner.py +425 -0
- aria_code/evals/scorecard.py +322 -0
- aria_code/evals/summary.py +125 -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 +459 -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 +744 -0
- aria_code/memory_manager.py +273 -0
- aria_code/model_capability.py +512 -0
- aria_code/notification_tools.py +4 -0
- aria_code/openai_image_client.py +4 -0
- aria_code/packages/__init__.py +26 -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 +58 -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 +232 -0
- aria_code/packages/aria_mcp/circuit.py +82 -0
- aria_code/packages/aria_mcp/config.py +162 -0
- aria_code/packages/aria_mcp/installer.py +95 -0
- aria_code/packages/aria_mcp/server.py +1705 -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 +393 -0
- aria_code/packages/aria_sdk/providers.py +70 -0
- aria_code/packages/aria_sdk/streaming.py +75 -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 +304 -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 +137 -0
- aria_code/packages/aria_services/research_quality.py +186 -0
- aria_code/packages/aria_services/settings.py +160 -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 +5 -0
- aria_code/packages/aria_tools/financial/_paths.py +92 -0
- aria_code/packages/aria_tools/registry.py +129 -0
- aria_code/packages/quant_engine/__init__.py +33 -0
- aria_code/packages/quant_engine/_namespace.py +24 -0
- aria_code/packages/quant_engine/backtest/__init__.py +10 -0
- aria_code/packages/quant_engine/backtest/core.py +53 -0
- aria_code/packages/quant_engine/backtest/engine.py +102 -0
- aria_code/packages/quant_engine/portfolio/__init__.py +9 -0
- aria_code/packages/quant_engine/portfolio/optimizer.py +85 -0
- aria_code/packages/quant_engine/sports/__init__.py +76 -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/predictor.py +312 -0
- aria_code/packages/quant_engine/sports/tracker.py +665 -0
- aria_code/packages/quant_engine/stochastic/__init__.py +31 -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/healthcare/__init__.py +40 -0
- aria_code/packs/logistics/__init__.py +171 -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/google_video_provider.py +256 -0
- aria_code/providers/llm/__init__.py +19 -0
- aria_code/providers/llm/anthropic.py +184 -0
- aria_code/providers/llm/arthera_gateway.py +90 -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 +137 -0
- aria_code/providers/llm/openai_compat.py +350 -0
- aria_code/providers/llm/registry.py +457 -0
- aria_code/providers/local_image_provider.py +202 -0
- aria_code/providers/local_llm_provider.py +549 -0
- aria_code/providers/ollama_models.py +79 -0
- aria_code/providers/openai_params.py +32 -0
- aria_code/providers/tool_messages.py +100 -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/review_service.py +497 -0
- aria_code/runtime/__init__.py +176 -0
- aria_code/runtime/acceptance.py +632 -0
- aria_code/runtime/agent_loop.py +1851 -0
- aria_code/runtime/agent_profiles.py +75 -0
- aria_code/runtime/approval.py +71 -0
- aria_code/runtime/baseline.py +219 -0
- aria_code/runtime/budget.py +232 -0
- aria_code/runtime/checkpoints.py +481 -0
- aria_code/runtime/consult.py +65 -0
- aria_code/runtime/contract.py +282 -0
- aria_code/runtime/delivery.py +432 -0
- aria_code/runtime/events.py +113 -0
- aria_code/runtime/gateway.py +167 -0
- aria_code/runtime/lsp.py +484 -0
- aria_code/runtime/native_index.py +153 -0
- aria_code/runtime/orchestrator.py +55 -0
- aria_code/runtime/processes.py +343 -0
- aria_code/runtime/project_graph.py +614 -0
- aria_code/runtime/repo_map.py +712 -0
- aria_code/runtime/research_bundle.py +105 -0
- aria_code/runtime/review.py +269 -0
- aria_code/runtime/run_state.py +127 -0
- aria_code/runtime/run_store.py +522 -0
- aria_code/runtime/scoped_runs.py +113 -0
- aria_code/runtime/self_healing.py +422 -0
- aria_code/runtime/semantic_diff.py +171 -0
- aria_code/runtime/subagent.py +721 -0
- aria_code/runtime/symbol_edit.py +117 -0
- aria_code/runtime/task_brief.py +46 -0
- aria_code/runtime/task_context.py +145 -0
- aria_code/runtime/task_ledger.py +108 -0
- aria_code/runtime/task_orchestrator.py +90 -0
- aria_code/runtime/task_outcome.py +33 -0
- aria_code/runtime/task_verification.py +266 -0
- aria_code/runtime/task_worktree.py +448 -0
- aria_code/runtime/tool_executor.py +329 -0
- aria_code/runtime/tool_policy.py +107 -0
- aria_code/runtime/transactions.py +216 -0
- aria_code/runtime/windows_job.py +115 -0
- aria_code/runtime/workflows.py +222 -0
- aria_code/runtime/worktrees.py +215 -0
- aria_code/runway_video_client.py +4 -0
- aria_code/safety/__init__.py +27 -0
- aria_code/safety/client_isolation.py +178 -0
- aria_code/safety/permissions.py +339 -0
- aria_code/safety/risk.py +699 -0
- aria_code/safety/sandbox.py +148 -0
- aria_code/safety/service.py +102 -0
- aria_code/service_endpoints.py +14 -0
- aria_code/setup_wizard.py +684 -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 +509 -0
- aria_code/tools/data_analysis_tools.py +831 -0
- aria_code/tools/enterprise_finance_tools.py +202 -0
- aria_code/tools/extended_tools.py +240 -0
- aria_code/tools/file_analysis_tools.py +880 -0
- aria_code/tools/image_gen_tools.py +114 -0
- aria_code/tools/local_finance_tools.py +3488 -0
- aria_code/tools/logistics_carriers.py +11 -0
- aria_code/tools/logistics_inventory.py +11 -0
- aria_code/tools/logistics_io.py +11 -0
- aria_code/tools/logistics_tenancy.py +11 -0
- aria_code/tools/logistics_tools.py +11 -0
- aria_code/tools/macro_tools.py +412 -0
- aria_code/tools/notification_tools.py +249 -0
- aria_code/tools/project_tools.py +525 -0
- aria_code/tools/realty_data_tools.py +662 -0
- aria_code/tools/spreadsheet_tools.py +399 -0
- aria_code/tools/stripe_tools.py +115 -0
- aria_code/tools/video_tools.py +500 -0
- aria_code/training/__init__.py +1 -0
- aria_code/training/compare.py +117 -0
- aria_code/training/prelude_commands.py +111 -0
- aria_code/training/prelude_eval.py +390 -0
- aria_code/training/prelude_real.py +183 -0
- aria_code/training/prelude_train.py +248 -0
- aria_code/training/sft_dataset.py +230 -0
- aria_code/training/trajectory_dataset.py +263 -0
- aria_code/ui/__init__.py +105 -0
- aria_code/ui/banner.py +404 -0
- aria_code/ui/completer.py +571 -0
- aria_code/ui/console.py +285 -0
- aria_code/ui/input_box.py +505 -0
- aria_code/ui/mentions.py +206 -0
- aria_code/ui/picker.py +248 -0
- aria_code/ui/render/__init__.py +11 -0
- aria_code/ui/render/actions.py +297 -0
- aria_code/ui/render/finance.py +1732 -0
- aria_code/ui/render/market.py +253 -0
- aria_code/ui/render/output.py +954 -0
- aria_code/ui/render/responsive.py +75 -0
- aria_code/ui/render/team.py +367 -0
- aria_code/ui/robot.py +239 -0
- aria_code/ui/startup_dashboard.py +110 -0
- aria_code/video_analysis.py +147 -0
- aria_code/video_editor.py +518 -0
- aria_code/video_workflow/__init__.py +8 -0
- aria_code/video_workflow/__main__.py +61 -0
- aria_code/video_workflow/engines/__init__.py +18 -0
- aria_code/video_workflow/engines/base.py +69 -0
- aria_code/video_workflow/engines/custom_model.py +204 -0
- aria_code/video_workflow/engines/google_veo.py +94 -0
- aria_code/video_workflow/engines/local_engine.py +71 -0
- aria_code/video_workflow/engines/registry.py +98 -0
- aria_code/video_workflow/google_models.py +278 -0
- aria_code/video_workflow/music/__init__.py +5 -0
- aria_code/video_workflow/music/foley_service.py +132 -0
- aria_code/video_workflow/music/service.py +212 -0
- aria_code/video_workflow/pipeline.py +620 -0
- aria_code/video_workflow/plan.py +202 -0
- aria_code/video_workflow/session.py +297 -0
- aria_code/workspace/__init__.py +6 -0
- aria_code/workspace/files.py +219 -0
- aria_code/workspace/verify.py +167 -0
- aria_code/workspace_changes.py +199 -0
- aria_code/workspace_service.py +196 -0
- aria_code/workspace_tools.py +150 -0
- aria_code-0.167.0.dist-info/METADATA +330 -0
- aria_code-0.167.0.dist-info/RECORD +601 -0
- aria_code-0.167.0.dist-info/WHEEL +5 -0
- aria_code-0.167.0.dist-info/entry_points.txt +5 -0
- aria_code-0.167.0.dist-info/licenses/LICENSE +201 -0
- aria_code-0.167.0.dist-info/licenses/NOTICE +49 -0
- aria_code-0.167.0.dist-info/top_level.txt +2 -0
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
"""Explicit model diagnostics using the selected transport, without file tools."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import argparse
|
|
5
|
+
import asyncio
|
|
6
|
+
from dataclasses import asdict, dataclass
|
|
7
|
+
import json
|
|
8
|
+
import time
|
|
9
|
+
|
|
10
|
+
from aria_code.apps.cli.providers.chat_routing import first_round_route
|
|
11
|
+
from aria_code.packages.aria_services.provider_health import classify_provider_error
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass(frozen=True)
|
|
15
|
+
class ModelProbe:
|
|
16
|
+
model: str
|
|
17
|
+
route: str
|
|
18
|
+
success: bool
|
|
19
|
+
category: str
|
|
20
|
+
message: str
|
|
21
|
+
duration_ms: int
|
|
22
|
+
text_verified: bool = False
|
|
23
|
+
tools_verified: bool = False
|
|
24
|
+
provider: str = ""
|
|
25
|
+
first_token_ms: int | None = None
|
|
26
|
+
suggestion: str = ""
|
|
27
|
+
schema: str = "aria.model_probe.v1"
|
|
28
|
+
|
|
29
|
+
def to_dict(self) -> dict:
|
|
30
|
+
return asdict(self)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
_PROBE_TOOL = {"type": "function", "function": {
|
|
34
|
+
"name": "aria_probe_ping",
|
|
35
|
+
"description": "A diagnostic echo with no file access or side effects.",
|
|
36
|
+
"parameters": {"type": "object", "properties": {"echo": {"type": "string"}}, "required": ["echo"]},
|
|
37
|
+
}}
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
async def probe_model(config: dict, api_url: str = "", *, tools: bool = False,
|
|
41
|
+
timeout: float = 30) -> ModelProbe:
|
|
42
|
+
"""One text request, optionally one inert tool call and its round trip.
|
|
43
|
+
|
|
44
|
+
Do not use the agent gateway: its provider fallback and project tools can
|
|
45
|
+
hide a broken primary route or perform work. Never change saved settings.
|
|
46
|
+
"""
|
|
47
|
+
from aria_code.apps.cli.providers.base import AriaSSEProvider, ConfiguredProvider, OllamaProvider
|
|
48
|
+
from aria_code.packages.aria_sdk.streaming import stream_provider_result
|
|
49
|
+
|
|
50
|
+
cfg = dict(config)
|
|
51
|
+
model = str(cfg.get("model") or "")
|
|
52
|
+
route = first_round_route(model, cfg, api_url)
|
|
53
|
+
started = time.monotonic()
|
|
54
|
+
cancel = asyncio.Event()
|
|
55
|
+
text_ok = tool_ok = False
|
|
56
|
+
provider_name = ""
|
|
57
|
+
first_token = None
|
|
58
|
+
|
|
59
|
+
def token(_text):
|
|
60
|
+
nonlocal first_token
|
|
61
|
+
if _text.strip() and first_token is None:
|
|
62
|
+
first_token = round((time.monotonic() - started) * 1000)
|
|
63
|
+
|
|
64
|
+
def result(ok, category, message, suggestion=""):
|
|
65
|
+
return ModelProbe(model, route, ok, category, message,
|
|
66
|
+
round((time.monotonic() - started) * 1000),
|
|
67
|
+
text_ok, tool_ok, provider_name, first_token, suggestion)
|
|
68
|
+
|
|
69
|
+
def failed(error):
|
|
70
|
+
raw = str(error or "empty_response")
|
|
71
|
+
if "ollama_model_unavailable:" in raw:
|
|
72
|
+
return result(False, "model_unavailable", "The selected Ollama model is not installed or could not be verified.",
|
|
73
|
+
"Run ollama list and /model; install the exact model with ollama pull <model> if needed.")
|
|
74
|
+
if "backend_local_tools_unsupported" in raw or "tool_protocol" in raw:
|
|
75
|
+
return result(False, "protocol_unsupported", "Backend does not support the local tool protocol.",
|
|
76
|
+
"Update the backend protocol or use a direct provider for local project tasks.")
|
|
77
|
+
issue = classify_provider_error(provider_name or route, error)
|
|
78
|
+
suggestions = {
|
|
79
|
+
"auth": "Check credentials and project permissions; for Google Cloud, verify gcloud/ADC authorization.",
|
|
80
|
+
"configuration": "Set your Google Cloud project: /config set gcp_project=<project-id> or GOOGLE_CLOUD_PROJECT.",
|
|
81
|
+
"model_unavailable": "Check the selected model ID, project and serving region with /model.",
|
|
82
|
+
"rate_limited": "Wait for the quota cooldown or check the provider quota.",
|
|
83
|
+
"timeout": "Check network and provider latency; increase --timeout if needed.",
|
|
84
|
+
"no_data": "The selected route returned no visible text; check its streaming/model configuration.",
|
|
85
|
+
}
|
|
86
|
+
return result(False, issue.category, issue.message,
|
|
87
|
+
suggestions.get(issue.category, "Check the selected provider and connection settings."))
|
|
88
|
+
|
|
89
|
+
def provider(local_tools=False):
|
|
90
|
+
if route == "cloud":
|
|
91
|
+
return AriaSSEProvider(api_url, model, auth_token=cfg.get("auth_token"),
|
|
92
|
+
use_react_gateway=bool(cfg.get("arthera_react_gateway")),
|
|
93
|
+
local_tools=local_tools)
|
|
94
|
+
if route == "ollama":
|
|
95
|
+
return OllamaProvider(str(cfg.get("ollama_url") or "http://localhost:11434"), model,
|
|
96
|
+
system_override="Only perform the requested diagnostic.",
|
|
97
|
+
show_market_prefetch_status=False, include_ambient_context=False)
|
|
98
|
+
return ConfiguredProvider(cfg, model)
|
|
99
|
+
|
|
100
|
+
async def run():
|
|
101
|
+
nonlocal text_ok, tool_ok, provider_name
|
|
102
|
+
reply = await stream_provider_result(provider(), "Reply with the single word READY.", [],
|
|
103
|
+
tools=[], cancel_event=cancel, on_token=token)
|
|
104
|
+
provider_name = str(reply.get("provider") or route)
|
|
105
|
+
if not reply.get("success") or not str(reply.get("response") or "").strip():
|
|
106
|
+
return failed(reply.get("error") or "empty_response")
|
|
107
|
+
text_ok = True
|
|
108
|
+
if not tools:
|
|
109
|
+
return result(True, "ok", "Selected model returned visible text.")
|
|
110
|
+
diagnostic = provider(local_tools=True)
|
|
111
|
+
request = "Call aria_probe_ping exactly once with echo='READY'. Do not answer in text before calling it."
|
|
112
|
+
call = await stream_provider_result(diagnostic, request, [], tools=[_PROBE_TOOL], cancel_event=cancel)
|
|
113
|
+
if not call.get("success"):
|
|
114
|
+
return failed(call.get("error"))
|
|
115
|
+
calls = list(call.get("tool_calls_pending") or [])
|
|
116
|
+
if len(calls) != 1 or calls[0].get("tool") != "aria_probe_ping" or calls[0].get("params") != {"echo": "READY"}:
|
|
117
|
+
return result(False, "tool_protocol", "Model did not return the requested diagnostic tool call.",
|
|
118
|
+
"Check that this model and transport support function calling.")
|
|
119
|
+
history = [{"role": "user", "content": request},
|
|
120
|
+
{"role": "assistant", "content": "", "tool_calls": [{"id": "aria-probe-1", "type": "function",
|
|
121
|
+
"function": {"name": "aria_probe_ping", "arguments": '{"echo":"READY"}'}}]},
|
|
122
|
+
{"role": "tool", "name": "aria_probe_ping", "tool_call_id": "aria-probe-1", "content": '{"echo":"READY"}'}]
|
|
123
|
+
reply = await stream_provider_result(diagnostic, "The diagnostic tool returned READY. Reply READY.", history,
|
|
124
|
+
tools=[], cancel_event=cancel)
|
|
125
|
+
if not reply.get("success") or not str(reply.get("response") or "").strip():
|
|
126
|
+
return failed(reply.get("error") or "empty_response")
|
|
127
|
+
tool_ok = True
|
|
128
|
+
return result(True, "ok", "Selected model returned text and completed the diagnostic tool round trip.")
|
|
129
|
+
|
|
130
|
+
try:
|
|
131
|
+
return await asyncio.wait_for(run(), timeout=timeout)
|
|
132
|
+
except asyncio.TimeoutError:
|
|
133
|
+
return failed("model probe timed out")
|
|
134
|
+
except Exception as exc:
|
|
135
|
+
return failed(exc)
|
|
136
|
+
finally:
|
|
137
|
+
cancel.set()
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def main(argv=None) -> int:
|
|
141
|
+
"""Fast standalone equivalent of /health --model; no REPL or agent import."""
|
|
142
|
+
parser = argparse.ArgumentParser(prog="aria health", description="Probe the selected model without accessing project files")
|
|
143
|
+
parser.add_argument("--model", action="store_true", help="Send a short text generation request")
|
|
144
|
+
parser.add_argument("--tools", action="store_true", help="Also verify an inert tool call and its result")
|
|
145
|
+
parser.add_argument("--model-id", help="Probe this model without changing your saved selection")
|
|
146
|
+
parser.add_argument("--timeout", type=float, default=30, help="Total probe deadline in seconds (1–60)")
|
|
147
|
+
parser.add_argument("--json", action="store_true")
|
|
148
|
+
args = parser.parse_args(argv)
|
|
149
|
+
if not 1 <= args.timeout <= 60:
|
|
150
|
+
parser.error("--timeout must be between 1 and 60 seconds")
|
|
151
|
+
from aria_code.apps.cli.bootstrap import initialize_cli_environment, default_config, runtime_paths
|
|
152
|
+
from aria_code.apps.cli.config_store import load_cli_config
|
|
153
|
+
|
|
154
|
+
initialize_cli_environment()
|
|
155
|
+
cfg = load_cli_config(runtime_paths(), default_config())
|
|
156
|
+
if args.model_id:
|
|
157
|
+
cfg["model"] = args.model_id
|
|
158
|
+
if not (args.model or args.tools):
|
|
159
|
+
report = ModelProbe(str(cfg.get("model") or ""), first_round_route(str(cfg.get("model") or ""), cfg, cfg.get("api_url")),
|
|
160
|
+
False, "not_probed", "Run aria health --model to test generation; add --tools to test function calling.", 0)
|
|
161
|
+
else:
|
|
162
|
+
report = asyncio.run(probe_model(cfg, str(cfg.get("api_url") or ""), tools=args.tools, timeout=args.timeout))
|
|
163
|
+
if args.json:
|
|
164
|
+
print(json.dumps(report.to_dict(), ensure_ascii=False))
|
|
165
|
+
else:
|
|
166
|
+
print(f"{report.model} · {report.route} · {report.category}: {report.message}")
|
|
167
|
+
if report.suggestion:
|
|
168
|
+
print(report.suggestion)
|
|
169
|
+
return 0 if report.success else (2 if report.category == "not_probed" else 1)
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
"""Models Google has retired, and what Aria moves their users to.
|
|
2
|
+
|
|
3
|
+
Google's Vertex AI lifecycle page retires gemini-2.5-pro, -flash and
|
|
4
|
+
-flash-lite on 20 October 2026 (the release notes give 16 October, so plan
|
|
5
|
+
for the earlier date); the Gemini API already admits only users who have
|
|
6
|
+
used 2.5 before. gemini-2.0-flash and -flash-lite shut down on 1 June 2026,
|
|
7
|
+
and every 1.5 model in 2025. A saved config that still names one of them
|
|
8
|
+
would fail on every request with an error that does not say why.
|
|
9
|
+
|
|
10
|
+
So a retired id is replaced when the config is loaded, and the replacement
|
|
11
|
+
is written back so it happens once: a stable model, not a short-term one,
|
|
12
|
+
so an install that is rarely updated does not break again within months.
|
|
13
|
+
The replacements follow Google's recommendations; 2.5 Flash moves to 3.8
|
|
14
|
+
Flash rather than a Lite model so the user loses nothing in capability.
|
|
15
|
+
"""
|
|
16
|
+
|
|
17
|
+
from __future__ import annotations
|
|
18
|
+
|
|
19
|
+
import re
|
|
20
|
+
|
|
21
|
+
# bare id -> bare replacement
|
|
22
|
+
RETIRED: dict[str, str] = {
|
|
23
|
+
"gemini-2.5-pro": "gemini-3.8-flash",
|
|
24
|
+
"gemini-2.5-flash": "gemini-3.8-flash",
|
|
25
|
+
"gemini-2.5-flash-lite": "gemini-3.1-flash-lite",
|
|
26
|
+
"gemini-2.0-flash": "gemini-3.8-flash",
|
|
27
|
+
"gemini-2.0-flash-lite": "gemini-3.1-flash-lite",
|
|
28
|
+
"gemini-1.5-pro": "gemini-3.8-flash",
|
|
29
|
+
"gemini-1.5-flash": "gemini-3.8-flash",
|
|
30
|
+
"gemini-1.0-pro": "gemini-3.8-flash",
|
|
31
|
+
# The previous default. Google deprecated it on 2026-10-08 and routes it to 3.6 Flash.
|
|
32
|
+
"gemini-3.5-flash": "gemini-3.8-flash",
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
# Dated, versioned and preview spellings of the same models:
|
|
36
|
+
# gemini-2.5-pro-preview-06-05, gemini-2.0-flash-001, gemini-1.5-pro-latest.
|
|
37
|
+
_SUFFIX = re.compile(r"(-preview(-[\w-]+)?|-exp(-[\w-]+)?|-latest|-\d{3}|-\d{2}-\d{2}|-\d{2}-\d{4})+$")
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def retired_replacement(model: str) -> str | None:
|
|
41
|
+
"""The id to use instead of *model*, keeping its provider prefix; None if it is not retired."""
|
|
42
|
+
if not model:
|
|
43
|
+
return None
|
|
44
|
+
text = str(model).strip()
|
|
45
|
+
prefix, _, bare = text.rpartition("/")
|
|
46
|
+
key = _SUFFIX.sub("", bare.lower())
|
|
47
|
+
replacement = RETIRED.get(key)
|
|
48
|
+
if replacement is None:
|
|
49
|
+
return None
|
|
50
|
+
return f"{prefix}/{replacement}" if prefix else replacement
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
def migrate_config(config: dict, keys: tuple[str, ...] = ("model",)) -> list[tuple[str, str, str]]:
|
|
54
|
+
"""Replace retired model ids in *config* in place; return (key, old, new) for each."""
|
|
55
|
+
changes = []
|
|
56
|
+
for key in keys:
|
|
57
|
+
old = config.get(key)
|
|
58
|
+
new = retired_replacement(old) if isinstance(old, str) else None
|
|
59
|
+
if new:
|
|
60
|
+
config[key] = new
|
|
61
|
+
changes.append((key, old, new))
|
|
62
|
+
return changes
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
__all__ = ["RETIRED", "migrate_config", "retired_replacement"]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
"""Legacy mascot spans for native frontends predating named Rust artwork."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import os
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
def robot_rows(*, hidden: bool = False) -> list:
|
|
8
|
+
if hidden or os.environ.get("ARIA_ROBOT_RENDER", "").strip().lower() == "off":
|
|
9
|
+
return []
|
|
10
|
+
from aria_code.ui.robot import ROBOT_ROW_COUNT, get_robot_row
|
|
11
|
+
return [[{"style": style, "text": text} for style, text in get_robot_row(0, row)]
|
|
12
|
+
for row in range(ROBOT_ROW_COUNT)]
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"""Experimental, workspace-confined JSON-RPC worker for the Rust CLI.
|
|
2
|
+
|
|
3
|
+
The host selects the workspace and approves one named write via process flags.
|
|
4
|
+
Request parameters never establish permissions. Existing CLI handlers retain
|
|
5
|
+
their diff, change-store and verification behavior; stdout is protocol only.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import argparse
|
|
10
|
+
import contextlib
|
|
11
|
+
import json
|
|
12
|
+
import sys
|
|
13
|
+
from pathlib import Path
|
|
14
|
+
from typing import Any
|
|
15
|
+
|
|
16
|
+
MAX_MESSAGE = 1_048_576
|
|
17
|
+
READ_TOOLS = frozenset({"read_file", "list_files", "search_code"})
|
|
18
|
+
WRITE_TOOLS = frozenset({"write_file", "edit_file"})
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def error(code: int, message: str, request_id: Any = None) -> dict:
|
|
22
|
+
return {"jsonrpc": "2.0", "id": request_id, "error": {"code": code, "message": message}}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def execute(name: str, arguments: dict, workspace: Path, approved_tool: str | None) -> dict:
|
|
26
|
+
from aria_code.runtime.approval import ApprovalDecision
|
|
27
|
+
from aria_code.runtime.tool_executor import ToolExecutor
|
|
28
|
+
from aria_code.runtime.tool_policy import check_tool_policy
|
|
29
|
+
|
|
30
|
+
if name not in READ_TOOLS | WRITE_TOOLS:
|
|
31
|
+
return {"success": False, "error": f"Tool not exposed by native bridge: {name}"}
|
|
32
|
+
verdict = check_tool_policy(name)
|
|
33
|
+
if verdict == "deny":
|
|
34
|
+
return {"success": False, "error": "Blocked by persistent tool policy"}
|
|
35
|
+
approved = name in WRITE_TOOLS and name == approved_tool
|
|
36
|
+
if verdict == "ask" and not approved:
|
|
37
|
+
return {"success": False, "error": "Tool requires explicit approval; use the interactive Python CLI"}
|
|
38
|
+
if name in WRITE_TOOLS and not approved:
|
|
39
|
+
return {"success": False, "error": "Writes require host --approve-write for this invocation"}
|
|
40
|
+
def handler(params: dict) -> dict:
|
|
41
|
+
# Load UI-dependent write code only after ToolExecutor grants the path.
|
|
42
|
+
if name in READ_TOOLS:
|
|
43
|
+
from aria_code.apps.cli.tools import file_tools
|
|
44
|
+
return getattr(file_tools, "tool_" + name)(params)
|
|
45
|
+
from aria_code.apps.cli.tools import write_tools
|
|
46
|
+
cli = write_tools._ac()
|
|
47
|
+
console = getattr(cli, "console", None)
|
|
48
|
+
previous = console.file if console is not None else None
|
|
49
|
+
try:
|
|
50
|
+
if console is not None:
|
|
51
|
+
console.file = sys.stderr
|
|
52
|
+
return getattr(write_tools, "tool_" + name)(params)
|
|
53
|
+
finally:
|
|
54
|
+
if console is not None:
|
|
55
|
+
console.file = previous
|
|
56
|
+
executor = ToolExecutor(
|
|
57
|
+
{name: (handler,)},
|
|
58
|
+
config={"workspace_root": str(workspace), "permission_mode": "workspace-write" if approved else "read-only"},
|
|
59
|
+
execution_context=lambda: {"_workspace_restricted": True},
|
|
60
|
+
)
|
|
61
|
+
decision = ApprovalDecision.allow(user_approved=True, tool_scope=name) if approved else None
|
|
62
|
+
return executor.execute_local(name, arguments, approval=decision)
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
def dispatch(request: Any, workspace: Path, approved_tool: str | None = None) -> dict | None:
|
|
66
|
+
if not isinstance(request, dict):
|
|
67
|
+
return error(-32600, "Expected a single JSON-RPC request object")
|
|
68
|
+
request_id = request.get("id")
|
|
69
|
+
valid_id = request_id is None or isinstance(request_id, str) or type(request_id) is int
|
|
70
|
+
if request.get("jsonrpc") != "2.0" or not isinstance(request.get("method"), str) or not valid_id:
|
|
71
|
+
return error(-32600, "Invalid JSON-RPC request")
|
|
72
|
+
# This bridge only executes requests with an ID. Notifications never cause
|
|
73
|
+
# file changes and never produce a response, including unknown methods.
|
|
74
|
+
if "id" not in request:
|
|
75
|
+
return None
|
|
76
|
+
if request["method"] != "tools.call":
|
|
77
|
+
return error(-32601, "Method not found", request_id)
|
|
78
|
+
params = request.get("params")
|
|
79
|
+
if not isinstance(params, dict) or not isinstance(params.get("name"), str) or not isinstance(params.get("arguments"), dict):
|
|
80
|
+
return error(-32602, "Expected name and arguments object", request_id)
|
|
81
|
+
try:
|
|
82
|
+
with contextlib.redirect_stdout(sys.stderr):
|
|
83
|
+
result = execute(params["name"], params["arguments"], workspace, approved_tool)
|
|
84
|
+
return {"jsonrpc": "2.0", "id": request_id, "result": result}
|
|
85
|
+
except Exception as exc:
|
|
86
|
+
return error(-32603, f"Python tool failed: {exc}", request_id)
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def main() -> None:
|
|
90
|
+
parser = argparse.ArgumentParser(description=__doc__)
|
|
91
|
+
parser.add_argument("--workspace", type=Path, required=True)
|
|
92
|
+
parser.add_argument("--approve-tool", choices=sorted(WRITE_TOOLS))
|
|
93
|
+
args = parser.parse_args()
|
|
94
|
+
workspace = args.workspace.expanduser().resolve(strict=True)
|
|
95
|
+
if not workspace.is_dir():
|
|
96
|
+
parser.error("workspace must be a directory")
|
|
97
|
+
# One request per process bounds trace memory and approval lifetime. Read
|
|
98
|
+
# size is bounded before JSON decoding; no unbounded readline allocation.
|
|
99
|
+
raw = sys.stdin.buffer.readline(MAX_MESSAGE + 1)
|
|
100
|
+
if len(raw) > MAX_MESSAGE:
|
|
101
|
+
response = error(-32600, "Request exceeds 1 MiB")
|
|
102
|
+
else:
|
|
103
|
+
try:
|
|
104
|
+
request = json.loads(raw)
|
|
105
|
+
except (ValueError, UnicodeDecodeError):
|
|
106
|
+
response = error(-32700, "Parse error")
|
|
107
|
+
else:
|
|
108
|
+
response = dispatch(request, workspace, args.approve_tool)
|
|
109
|
+
if response is not None:
|
|
110
|
+
encoded = json.dumps(response, ensure_ascii=True, allow_nan=False).encode("ascii")
|
|
111
|
+
if len(encoded) + 1 > MAX_MESSAGE:
|
|
112
|
+
encoded = json.dumps(error(-32603, "Response exceeds 1 MiB", response["id"])).encode("ascii")
|
|
113
|
+
sys.stdout.buffer.write(encoded + b"\n")
|
|
114
|
+
sys.stdout.buffer.flush()
|
|
115
|
+
|
|
116
|
+
|
|
117
|
+
if __name__ == "__main__":
|
|
118
|
+
main()
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
"""Lightweight native frontend bootstrap and frozen worker entrypoints.
|
|
2
|
+
|
|
3
|
+
Rust owns the terminal; Python remains the provider/tool application service.
|
|
4
|
+
Private worker modes are dispatched before importing the legacy CLI. Setting
|
|
5
|
+
ARIA_FRONTEND=python explicitly keeps the original interface available.
|
|
6
|
+
"""
|
|
7
|
+
from __future__ import annotations
|
|
8
|
+
|
|
9
|
+
import os
|
|
10
|
+
import subprocess
|
|
11
|
+
import sys
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def dispatch_worker() -> None:
|
|
15
|
+
if sys.argv[1:2] != ["--aria-worker"]:
|
|
16
|
+
return
|
|
17
|
+
if len(sys.argv) < 3:
|
|
18
|
+
raise SystemExit("Missing worker mode")
|
|
19
|
+
mode = sys.argv[2]
|
|
20
|
+
del sys.argv[1:3]
|
|
21
|
+
os.environ["ARIA_FRONTEND"] = "python"
|
|
22
|
+
# The host assigns process containment before acknowledging startup.
|
|
23
|
+
if mode in ("app", "stream") and sys.stdin.buffer.read(1) != b"\n":
|
|
24
|
+
raise SystemExit(2)
|
|
25
|
+
if mode == "app":
|
|
26
|
+
from aria_code.apps.cli.app_server import main
|
|
27
|
+
elif mode == "bridge":
|
|
28
|
+
from aria_code.apps.cli.native_bridge import main
|
|
29
|
+
elif mode in ("cli", "stream"):
|
|
30
|
+
from aria_code.apps.cli.main import main
|
|
31
|
+
else:
|
|
32
|
+
raise SystemExit("Unknown worker mode")
|
|
33
|
+
main()
|
|
34
|
+
raise SystemExit(0)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def maybe_native() -> None:
|
|
38
|
+
if os.environ.get("ARIA_FRONTEND", "").lower() == "python":
|
|
39
|
+
return
|
|
40
|
+
# Never change pipe/headless output or load a UI in a non-terminal.
|
|
41
|
+
if not (sys.stdin.isatty() and sys.stdout.isatty()):
|
|
42
|
+
return
|
|
43
|
+
from aria_code.runtime.native_index import native_binary
|
|
44
|
+
binary = native_binary()
|
|
45
|
+
if not binary:
|
|
46
|
+
return # Pure Python wheels remain usable without a Rust installation.
|
|
47
|
+
try:
|
|
48
|
+
capability = subprocess.run([binary, "--entry-protocol"], capture_output=True,
|
|
49
|
+
timeout=3, check=False)
|
|
50
|
+
if capability.returncode or capability.stdout.strip() != b"1":
|
|
51
|
+
return # Old opt-in prototypes do not implement the formal entry.
|
|
52
|
+
except (OSError, subprocess.SubprocessError):
|
|
53
|
+
return
|
|
54
|
+
env = dict(os.environ, ARIA_PYTHON=sys.executable)
|
|
55
|
+
if os.name != "nt":
|
|
56
|
+
os.execve(binary, [binary, "--app", *sys.argv[1:]], env)
|
|
57
|
+
result = subprocess.run([binary, "--app", *sys.argv[1:]], env=env, check=False)
|
|
58
|
+
raise SystemExit(result.returncode)
|