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,373 @@
|
|
|
1
|
+
"""Explicit, verified CLI updates. Startup only checks and reminds."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
import argparse
|
|
5
|
+
import base64
|
|
6
|
+
import hashlib
|
|
7
|
+
import json
|
|
8
|
+
import os
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
import platform
|
|
11
|
+
import shutil
|
|
12
|
+
import subprocess
|
|
13
|
+
import sys
|
|
14
|
+
import tarfile
|
|
15
|
+
import tempfile
|
|
16
|
+
import urllib.request
|
|
17
|
+
import urllib.error
|
|
18
|
+
|
|
19
|
+
from aria_code._version import __version__
|
|
20
|
+
from aria_code.apps.cli.update_check import (
|
|
21
|
+
_RELEASE_URL, _NPM_URL, _install_channel, _newer, _update_command,
|
|
22
|
+
_native_check, _parse, _write_cache,
|
|
23
|
+
)
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _request(url: str, *, accept: str = "application/json") -> urllib.request.Request:
|
|
27
|
+
return urllib.request.Request(url, headers={"User-Agent": "aria-code-updater", "Accept": accept})
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def _fetch_json(url: str) -> dict:
|
|
31
|
+
with urllib.request.urlopen(_request(url), timeout=15) as response:
|
|
32
|
+
return json.load(response)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def check_update(
|
|
36
|
+
channel: str, *, version: str | None = None, prefer_native: bool = False,
|
|
37
|
+
refresh_native: bool = False,
|
|
38
|
+
) -> tuple[str, dict]:
|
|
39
|
+
import time
|
|
40
|
+
|
|
41
|
+
if prefer_native and not version:
|
|
42
|
+
metadata = _native_check(__version__, channel, refresh=refresh_native)
|
|
43
|
+
latest = metadata.get("latest") if metadata else None
|
|
44
|
+
if isinstance(latest, str) and _parse(latest) is not None:
|
|
45
|
+
return latest.removeprefix("v"), metadata
|
|
46
|
+
|
|
47
|
+
source = _NPM_URL if channel == "npm" else _RELEASE_URL
|
|
48
|
+
if version:
|
|
49
|
+
if _parse(version) is None:
|
|
50
|
+
raise ValueError("Version must look like 0.110.0 or v0.110.0")
|
|
51
|
+
version = version.removeprefix("v")
|
|
52
|
+
source = (f"https://registry.npmjs.org/@artheras%2Faria-code/{version}" if channel == "npm" else
|
|
53
|
+
f"https://api.github.com/repos/artheras/aria-code/releases/tags/v{version}")
|
|
54
|
+
data = _fetch_json(source)
|
|
55
|
+
latest = data.get("version") if channel == "npm" else data.get("tag_name")
|
|
56
|
+
if not isinstance(latest, str) or _parse(latest) is None:
|
|
57
|
+
raise ValueError("The update source did not return a stable Aria Code version")
|
|
58
|
+
if version and latest.removeprefix("v") != version:
|
|
59
|
+
raise ValueError("The release metadata does not match the requested version")
|
|
60
|
+
if channel != "npm" and (data.get("draft") or data.get("prerelease")):
|
|
61
|
+
raise ValueError("The release is not a stable published version")
|
|
62
|
+
if channel == "pip":
|
|
63
|
+
# The old 4.x numbering is still PyPI's largest version. Never use its
|
|
64
|
+
# /json latest endpoint to select a replacement for the current 0.x line.
|
|
65
|
+
package = _fetch_json(f"https://pypi.org/pypi/aria-code/{latest.removeprefix('v')}/json")
|
|
66
|
+
if package.get("info", {}).get("version") != latest.removeprefix("v"):
|
|
67
|
+
raise ValueError("This GitHub release is not ready on PyPI; your installed version is kept")
|
|
68
|
+
if not version:
|
|
69
|
+
_write_cache({"source": source, "latest": latest, "checked_at": time.time()})
|
|
70
|
+
return latest.removeprefix("v"), data
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def _download(url: str, target: Path) -> None:
|
|
74
|
+
from aria_code.apps.cli.release_download import download
|
|
75
|
+
|
|
76
|
+
download(url, target)
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
def _checksum(path: Path, checksums: str, name: str) -> None:
|
|
80
|
+
entries = [line.split() for line in checksums.splitlines()]
|
|
81
|
+
expected = next((parts[0] for parts in entries if len(parts) == 2 and parts[1] == name), "")
|
|
82
|
+
digest = hashlib.sha256()
|
|
83
|
+
with path.open("rb") as source:
|
|
84
|
+
for block in iter(lambda: source.read(1024 * 1024), b""):
|
|
85
|
+
digest.update(block)
|
|
86
|
+
if len(expected) != 64 or digest.hexdigest() != expected.lower():
|
|
87
|
+
raise ValueError(f"Release checksum verification failed for {name}")
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _extract(archive: Path, directory: Path) -> None:
|
|
91
|
+
with tarfile.open(archive) as bundle:
|
|
92
|
+
# Validate each entry immediately before extracting, so Python 3.10
|
|
93
|
+
# resolves links that earlier archive entries have already created.
|
|
94
|
+
for member in bundle.getmembers():
|
|
95
|
+
target = (directory / member.name).resolve()
|
|
96
|
+
target.relative_to(directory.resolve())
|
|
97
|
+
if not (member.isfile() or member.isdir() or member.issym() or member.islnk()):
|
|
98
|
+
raise ValueError("Unexpected file type in release archive")
|
|
99
|
+
if member.issym() or member.islnk():
|
|
100
|
+
link = (target.parent / member.linkname).resolve() if member.issym() else (directory / member.linkname).resolve()
|
|
101
|
+
link.relative_to(directory.resolve())
|
|
102
|
+
if hasattr(tarfile, "data_filter"):
|
|
103
|
+
bundle.extract(member, directory, filter="data")
|
|
104
|
+
else:
|
|
105
|
+
bundle.extract(member, directory)
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def _install_dir() -> Path:
|
|
109
|
+
if os.environ.get("ARIA_CODE_INSTALL_DIR"):
|
|
110
|
+
return Path(os.environ["ARIA_CODE_INSTALL_DIR"]).expanduser()
|
|
111
|
+
current = Path(sys.executable).resolve()
|
|
112
|
+
if current.stem == "aria-code-worker":
|
|
113
|
+
frontend = current.with_name("aria-code-bin" + current.suffix)
|
|
114
|
+
if frontend.is_file():
|
|
115
|
+
current = frontend
|
|
116
|
+
for path in (Path(sys.argv[0]).expanduser(), Path.home() / ".local/bin/aria-code"):
|
|
117
|
+
if path.is_file() and path.resolve() == current:
|
|
118
|
+
return path.absolute().parent
|
|
119
|
+
if current.parent.name == "aria-code-bin":
|
|
120
|
+
raise ValueError("Cannot locate the command symlink; set ARIA_CODE_INSTALL_DIR to your CLI bin directory")
|
|
121
|
+
return current.parent
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
def _app_root() -> Path:
|
|
125
|
+
return Path(os.environ.get("ARIA_CODE_HOME", str(Path.home() / ".local/share/aria-code"))).expanduser().resolve()
|
|
126
|
+
|
|
127
|
+
|
|
128
|
+
def _native_update_helper() -> Path | None:
|
|
129
|
+
"""Find the bundled Rust helper without guessing a system installation."""
|
|
130
|
+
if os.name == "nt":
|
|
131
|
+
return None # Windows rollback retains its existing installer path.
|
|
132
|
+
executable = Path(sys.executable).resolve()
|
|
133
|
+
package_bin = Path(__file__).resolve().parents[2] / "_bin" / "aria-native"
|
|
134
|
+
for candidate in (
|
|
135
|
+
executable.parent / "aria-native",
|
|
136
|
+
executable.parent / "_internal" / "aria-native",
|
|
137
|
+
package_bin,
|
|
138
|
+
):
|
|
139
|
+
if candidate.is_file():
|
|
140
|
+
return candidate
|
|
141
|
+
return None
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
def _switch_native(command: Path, binary: Path, app_root: Path) -> None:
|
|
145
|
+
"""Switch atomically and remember the former managed release for rollback."""
|
|
146
|
+
previous = command.resolve() if command.is_symlink() else None
|
|
147
|
+
if previous and previous != binary and previous.is_file():
|
|
148
|
+
try:
|
|
149
|
+
relative = previous.relative_to((app_root / "releases").resolve())
|
|
150
|
+
except ValueError:
|
|
151
|
+
relative = None
|
|
152
|
+
if relative is not None:
|
|
153
|
+
state = app_root / f".previous-{os.getpid()}.json"
|
|
154
|
+
state.write_text(json.dumps({"previous": str(relative)}))
|
|
155
|
+
os.replace(state, app_root / "previous.json")
|
|
156
|
+
link = command.parent / f".aria-code-update-{os.getpid()}"
|
|
157
|
+
try:
|
|
158
|
+
link.symlink_to(binary)
|
|
159
|
+
os.replace(link, command)
|
|
160
|
+
finally:
|
|
161
|
+
link.unlink(missing_ok=True)
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
def rollback_native() -> Path:
|
|
165
|
+
"""Restore the previous managed binary; no network and no directory deletion."""
|
|
166
|
+
helper = _native_update_helper()
|
|
167
|
+
if helper is not None:
|
|
168
|
+
try:
|
|
169
|
+
subprocess.run([str(helper), "update", "rollback"], capture_output=True,
|
|
170
|
+
text=True, timeout=100, check=True)
|
|
171
|
+
except (OSError, subprocess.SubprocessError) as exc:
|
|
172
|
+
detail = getattr(exc, "stderr", "") or str(exc)
|
|
173
|
+
raise ValueError(f"Native rollback failed; the installed version was kept: {detail.strip()}") from exc
|
|
174
|
+
return _install_dir() / "aria-code"
|
|
175
|
+
|
|
176
|
+
app_root = _app_root().resolve()
|
|
177
|
+
try:
|
|
178
|
+
data = json.loads((app_root / "previous.json").read_text())
|
|
179
|
+
binary = (app_root / "releases" / data["previous"]).resolve()
|
|
180
|
+
binary.relative_to(app_root / "releases")
|
|
181
|
+
except (OSError, ValueError, KeyError, TypeError) as exc:
|
|
182
|
+
raise ValueError("No previous managed release is recorded; use aria update --to VERSION instead") from exc
|
|
183
|
+
if not binary.is_file() or not os.access(binary, os.X_OK):
|
|
184
|
+
raise ValueError("Previous release is missing or not executable; the installed version was kept")
|
|
185
|
+
check = subprocess.run([str(binary), "--version"], capture_output=True, text=True, timeout=90, check=True)
|
|
186
|
+
text = check.stdout.strip()
|
|
187
|
+
if not text.startswith("aria-code ") or _parse(text.removeprefix("aria-code ")) is None:
|
|
188
|
+
raise ValueError("Previous release failed its version check; the installed version was kept")
|
|
189
|
+
command = _install_dir() / "aria-code"
|
|
190
|
+
_switch_native(command, binary, app_root)
|
|
191
|
+
return command
|
|
192
|
+
|
|
193
|
+
|
|
194
|
+
def _npm_native(latest: str, system: str, arch: str, stage: Path, cache: Path) -> Path:
|
|
195
|
+
"""Official scoped npm artifact fallback, verified against its SHA-512 SRI."""
|
|
196
|
+
# GitHub release assets use "macos"; npm follows Node's "darwin" slug.
|
|
197
|
+
npm_system = "darwin" if system == "macos" else system
|
|
198
|
+
package = f"aria-code-{npm_system}-{arch}"
|
|
199
|
+
metadata = _fetch_json(f"https://registry.npmjs.org/@artheras%2F{package}/{latest}")
|
|
200
|
+
if metadata.get("name") != f"@artheras/{package}" or metadata.get("version") != latest:
|
|
201
|
+
raise ValueError("npm fallback does not match this Aria Code platform release")
|
|
202
|
+
dist = metadata.get("dist") or {}
|
|
203
|
+
expected_url = f"https://registry.npmjs.org/@artheras/{package}/-/{package}-{latest}.tgz"
|
|
204
|
+
if dist.get("tarball") != expected_url:
|
|
205
|
+
raise ValueError("npm fallback URL does not belong to this Aria Code release")
|
|
206
|
+
integrity = str(dist.get("integrity") or "")
|
|
207
|
+
if not integrity.startswith("sha512-"):
|
|
208
|
+
raise ValueError("npm fallback has no SHA-512 integrity")
|
|
209
|
+
expected = base64.b64decode(integrity[7:], validate=True)
|
|
210
|
+
if len(expected) != 64:
|
|
211
|
+
raise ValueError("Invalid npm fallback integrity")
|
|
212
|
+
archive = cache / f"{package}-{latest}.tgz"
|
|
213
|
+
_download(expected_url, archive)
|
|
214
|
+
digest = hashlib.sha512()
|
|
215
|
+
with archive.open("rb") as source:
|
|
216
|
+
for block in iter(lambda: source.read(1024 * 1024), b""):
|
|
217
|
+
digest.update(block)
|
|
218
|
+
if digest.digest() != expected:
|
|
219
|
+
archive.unlink(missing_ok=True)
|
|
220
|
+
raise ValueError("npm fallback checksum verification failed")
|
|
221
|
+
unpacked = stage / "npm"
|
|
222
|
+
unpacked.mkdir()
|
|
223
|
+
_extract(archive, unpacked)
|
|
224
|
+
return unpacked / "package/bin/aria-code-bin"
|
|
225
|
+
|
|
226
|
+
|
|
227
|
+
def install_native(latest: str, release: dict) -> Path:
|
|
228
|
+
helper = _native_update_helper()
|
|
229
|
+
if helper is not None:
|
|
230
|
+
try:
|
|
231
|
+
subprocess.run([str(helper), "update", "install", "--to", latest],
|
|
232
|
+
capture_output=True, text=True, timeout=600, check=True)
|
|
233
|
+
except (OSError, subprocess.SubprocessError) as exc:
|
|
234
|
+
detail = getattr(exc, "stderr", "") or str(exc)
|
|
235
|
+
raise ValueError(f"Native update failed; the installed version was kept: {detail.strip()}") from exc
|
|
236
|
+
return _install_dir() / "aria-code"
|
|
237
|
+
|
|
238
|
+
system = {"Darwin": "macos", "Linux": "linux"}.get(platform.system())
|
|
239
|
+
arch = {"arm64": "arm64", "aarch64": "arm64", "x86_64": "x64", "amd64": "x64"}.get(platform.machine().lower())
|
|
240
|
+
if not system or not arch:
|
|
241
|
+
raise ValueError("Use the PowerShell installer to update this platform")
|
|
242
|
+
asset_name = f"aria-code-{system}-{arch}.tar.gz"
|
|
243
|
+
assets = {a["name"]: a for a in release.get("assets", [])}
|
|
244
|
+
if asset_name not in assets or "SHA256SUMS" not in assets:
|
|
245
|
+
raise ValueError(f"The release is not ready for {system}-{arch}; your installed version is kept")
|
|
246
|
+
install_dir = _install_dir()
|
|
247
|
+
app_root = _app_root()
|
|
248
|
+
releases = app_root / "releases"
|
|
249
|
+
releases.mkdir(parents=True, exist_ok=True)
|
|
250
|
+
install_dir.mkdir(parents=True, exist_ok=True)
|
|
251
|
+
cache = app_root / "downloads" / f"v{latest}"
|
|
252
|
+
cache.mkdir(parents=True, exist_ok=True, mode=0o700)
|
|
253
|
+
with tempfile.TemporaryDirectory(prefix=".update-", dir=releases) as staging:
|
|
254
|
+
stage = Path(staging)
|
|
255
|
+
archive = cache / asset_name
|
|
256
|
+
sums = cache / "SHA256SUMS"
|
|
257
|
+
for name in (asset_name, "SHA256SUMS"):
|
|
258
|
+
url = assets[name]["browser_download_url"]
|
|
259
|
+
expected_prefix = f"https://github.com/artheras/aria-code/releases/download/v{latest}/"
|
|
260
|
+
if not url.startswith(expected_prefix):
|
|
261
|
+
raise ValueError("Release asset URL does not belong to this Aria Code release")
|
|
262
|
+
unpacked = stage / "unpacked"
|
|
263
|
+
unpacked.mkdir()
|
|
264
|
+
try:
|
|
265
|
+
_download(assets["SHA256SUMS"]["browser_download_url"], sums)
|
|
266
|
+
cached = False
|
|
267
|
+
if archive.is_file():
|
|
268
|
+
try:
|
|
269
|
+
_checksum(archive, sums.read_text(), asset_name)
|
|
270
|
+
cached = True
|
|
271
|
+
except ValueError:
|
|
272
|
+
archive.unlink()
|
|
273
|
+
if not cached:
|
|
274
|
+
_download(assets[asset_name]["browser_download_url"], archive)
|
|
275
|
+
_checksum(archive, sums.read_text(), asset_name)
|
|
276
|
+
except (OSError, urllib.error.URLError) as error:
|
|
277
|
+
print(f"GitHub transfer failed ({type(error).__name__}); trying the verified official npm artifact.", file=sys.stderr)
|
|
278
|
+
build = _npm_native(latest, system, arch, stage, cache)
|
|
279
|
+
shutil.move(str(build), unpacked / "aria-code-bin")
|
|
280
|
+
except ValueError:
|
|
281
|
+
archive.unlink(missing_ok=True)
|
|
282
|
+
raise
|
|
283
|
+
else:
|
|
284
|
+
_extract(archive, unpacked)
|
|
285
|
+
binary = unpacked / "aria-code-bin/aria-code-bin"
|
|
286
|
+
if not binary.is_file() or not os.access(binary, os.X_OK):
|
|
287
|
+
raise ValueError("Release archive does not contain a runnable Aria Code binary")
|
|
288
|
+
check = subprocess.run([str(binary), "--version"], capture_output=True, text=True, timeout=90, check=True)
|
|
289
|
+
if check.stdout.strip() != f"aria-code {latest}":
|
|
290
|
+
raise ValueError("Downloaded binary version does not match the release")
|
|
291
|
+
active = releases / f"v{latest}-{os.urandom(4).hex()}"
|
|
292
|
+
unpacked.rename(active)
|
|
293
|
+
# --version exits before the CLI imports. Validate those imports at
|
|
294
|
+
# the final path, so missing bundled modules fail before activation
|
|
295
|
+
# and macOS's first-load checks happen during the visible installation.
|
|
296
|
+
print("Preparing the CLI for its first startup...")
|
|
297
|
+
try:
|
|
298
|
+
subprocess.run([str(active / "aria-code-bin/aria-code-bin"), "--help"],
|
|
299
|
+
cwd=active, capture_output=True, text=True, timeout=120, check=True)
|
|
300
|
+
except (OSError, subprocess.SubprocessError) as error:
|
|
301
|
+
shutil.rmtree(active)
|
|
302
|
+
raise ValueError("Downloaded CLI failed its startup check; the installed version was kept") from error
|
|
303
|
+
alias = install_dir / "aria"
|
|
304
|
+
if not alias.exists():
|
|
305
|
+
alias.write_text('#!/bin/sh\nif [ "${1-}" = code ]; then shift; fi\nexec "$(dirname "$0")/aria-code" "$@"\n')
|
|
306
|
+
alias.chmod(0o755)
|
|
307
|
+
_switch_native(install_dir / "aria-code", active / "aria-code-bin/aria-code-bin", app_root)
|
|
308
|
+
return install_dir / "aria-code"
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def main(argv: list[str] | None = None) -> int:
|
|
312
|
+
parser = argparse.ArgumentParser(prog="aria update", description="Check for or install a verified Aria Code update")
|
|
313
|
+
mode = parser.add_mutually_exclusive_group()
|
|
314
|
+
mode.add_argument("--check", action="store_true", help="Check and report without installing")
|
|
315
|
+
mode.add_argument("--rollback", action="store_true", help="Restore the previous managed native release without network")
|
|
316
|
+
mode.add_argument("--to", metavar="VERSION", help="Install a specific verified stable release")
|
|
317
|
+
try:
|
|
318
|
+
args = parser.parse_args(argv)
|
|
319
|
+
except SystemExit as exit_request:
|
|
320
|
+
# The same entrypoint runs inside /update: help and invalid arguments
|
|
321
|
+
# must return to the prompt instead of terminating the whole session.
|
|
322
|
+
return int(exit_request.code or 0)
|
|
323
|
+
from aria_code.apps.cli.bootstrap import initialize_cli_environment
|
|
324
|
+
|
|
325
|
+
initialize_cli_environment()
|
|
326
|
+
channel = _install_channel()
|
|
327
|
+
try:
|
|
328
|
+
if args.rollback:
|
|
329
|
+
if channel != "native":
|
|
330
|
+
raise ValueError("--rollback is for native installs; use your package manager to select an older version")
|
|
331
|
+
command = rollback_native()
|
|
332
|
+
print(f"Restored previous release: {command}. Restart Aria to use it.")
|
|
333
|
+
return 0
|
|
334
|
+
latest, release = check_update(
|
|
335
|
+
channel,
|
|
336
|
+
version=args.to,
|
|
337
|
+
prefer_native=not args.to,
|
|
338
|
+
refresh_native=not args.to,
|
|
339
|
+
)
|
|
340
|
+
print(f"Aria Code {__version__} · latest {latest} · {channel}")
|
|
341
|
+
print(f"Running executable: {Path(sys.executable).resolve()}")
|
|
342
|
+
if not args.to and not _newer(latest, __version__):
|
|
343
|
+
print("You are up to date.")
|
|
344
|
+
return 0
|
|
345
|
+
if args.check:
|
|
346
|
+
print("Update available. Run: aria update")
|
|
347
|
+
return 0
|
|
348
|
+
if channel == "source":
|
|
349
|
+
print("Source checkout: update your Git branch, then run: python3 -m pip install -e .")
|
|
350
|
+
return 0
|
|
351
|
+
if channel == "native":
|
|
352
|
+
if os.name == "nt":
|
|
353
|
+
command = _update_command(channel, latest)
|
|
354
|
+
if args.to:
|
|
355
|
+
command = f"$env:ARIA_CODE_VERSION = 'v{latest}'; {command}"
|
|
356
|
+
print("Close Aria first, then run this in PowerShell to install the update:")
|
|
357
|
+
print(command)
|
|
358
|
+
return 0
|
|
359
|
+
command = install_native(latest, release)
|
|
360
|
+
print(f"Installed {latest}: {command}. Restart Aria to use the new version.")
|
|
361
|
+
return 0
|
|
362
|
+
executable = shutil.which("npm") if channel == "npm" else sys.executable
|
|
363
|
+
if not executable:
|
|
364
|
+
raise ValueError("npm is not on PATH; run the update from the shell where npm is installed")
|
|
365
|
+
command = [executable, "install", "-g", f"@artheras/aria-code@{latest}"] if channel == "npm" else [executable, "-m", "pip", "install", "--upgrade", f"aria-code=={latest}"]
|
|
366
|
+
return subprocess.call(command)
|
|
367
|
+
except Exception as error:
|
|
368
|
+
print(f"Update failed: {error}. The installed version was kept.", file=sys.stderr)
|
|
369
|
+
return 1
|
|
370
|
+
|
|
371
|
+
|
|
372
|
+
if __name__ == "__main__":
|
|
373
|
+
raise SystemExit(main())
|
|
File without changes
|