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,110 @@
|
|
|
1
|
+
{
|
|
2
|
+
"type": "object",
|
|
3
|
+
"properties": {
|
|
4
|
+
"action": {
|
|
5
|
+
"type": "string",
|
|
6
|
+
"enum": [
|
|
7
|
+
"health",
|
|
8
|
+
"create",
|
|
9
|
+
"start",
|
|
10
|
+
"status",
|
|
11
|
+
"wait",
|
|
12
|
+
"stop",
|
|
13
|
+
"obstacle",
|
|
14
|
+
"trace"
|
|
15
|
+
]
|
|
16
|
+
},
|
|
17
|
+
"goal": {
|
|
18
|
+
"type": "string",
|
|
19
|
+
"description": "User's task goal and constraints, as context; never a shell command."
|
|
20
|
+
},
|
|
21
|
+
"scenario": {
|
|
22
|
+
"type": "object",
|
|
23
|
+
"properties": {
|
|
24
|
+
"width": {
|
|
25
|
+
"type": "integer"
|
|
26
|
+
},
|
|
27
|
+
"height": {
|
|
28
|
+
"type": "integer"
|
|
29
|
+
},
|
|
30
|
+
"start": {
|
|
31
|
+
"type": "array",
|
|
32
|
+
"items": {
|
|
33
|
+
"type": "integer"
|
|
34
|
+
},
|
|
35
|
+
"minItems": 2,
|
|
36
|
+
"maxItems": 2
|
|
37
|
+
},
|
|
38
|
+
"goal": {
|
|
39
|
+
"type": "array",
|
|
40
|
+
"items": {
|
|
41
|
+
"type": "integer"
|
|
42
|
+
},
|
|
43
|
+
"minItems": 2,
|
|
44
|
+
"maxItems": 2
|
|
45
|
+
},
|
|
46
|
+
"obstacles": {
|
|
47
|
+
"type": "array",
|
|
48
|
+
"items": {
|
|
49
|
+
"type": "array",
|
|
50
|
+
"items": {
|
|
51
|
+
"type": "integer"
|
|
52
|
+
},
|
|
53
|
+
"minItems": 2,
|
|
54
|
+
"maxItems": 2
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
"required": [
|
|
59
|
+
"width",
|
|
60
|
+
"height",
|
|
61
|
+
"start",
|
|
62
|
+
"goal",
|
|
63
|
+
"obstacles"
|
|
64
|
+
],
|
|
65
|
+
"additionalProperties": false
|
|
66
|
+
},
|
|
67
|
+
"constraints": {
|
|
68
|
+
"type": "object",
|
|
69
|
+
"properties": {
|
|
70
|
+
"max_steps": {
|
|
71
|
+
"type": "integer",
|
|
72
|
+
"minimum": 1,
|
|
73
|
+
"maximum": 512
|
|
74
|
+
},
|
|
75
|
+
"deadline_ms": {
|
|
76
|
+
"type": "integer",
|
|
77
|
+
"minimum": 100,
|
|
78
|
+
"maximum": 120000
|
|
79
|
+
}
|
|
80
|
+
},
|
|
81
|
+
"additionalProperties": false
|
|
82
|
+
},
|
|
83
|
+
"task_id": {
|
|
84
|
+
"type": "string"
|
|
85
|
+
},
|
|
86
|
+
"request_id": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"description": "Required only for create/start/obstacle. Stable unique operation ID; reuse only for an identical operation. Omit for health/status/wait/stop/trace."
|
|
89
|
+
},
|
|
90
|
+
"cell": {
|
|
91
|
+
"type": "array",
|
|
92
|
+
"items": {
|
|
93
|
+
"type": "integer"
|
|
94
|
+
},
|
|
95
|
+
"minItems": 2,
|
|
96
|
+
"maxItems": 2
|
|
97
|
+
},
|
|
98
|
+
"timeout_ms": {
|
|
99
|
+
"type": "integer",
|
|
100
|
+
"minimum": 0,
|
|
101
|
+
"maximum": 1000,
|
|
102
|
+
"description": "Required only for wait. Maximum 1000ms per call; query again if still running."
|
|
103
|
+
}
|
|
104
|
+
},
|
|
105
|
+
"required": [
|
|
106
|
+
"action"
|
|
107
|
+
],
|
|
108
|
+
"additionalProperties": false,
|
|
109
|
+
"description": "Goal-directed logical warehouse simulation. Use only fields applicable to the selected action. create: action, request_id, goal, scenario, optional constraints. start: action, task_id, request_id. status/stop/trace: action, task_id ONLY. wait: action, task_id, timeout_ms ONLY. obstacle: action, task_id, request_id, cell. health: action ONLY. Never send request_id to read actions."
|
|
110
|
+
}
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
"""Stateful warehouse task agent capability; reasoning stays in Aria's model.
|
|
2
|
+
|
|
3
|
+
This is a thin process adapter, not another Python planner or control loop.
|
|
4
|
+
The native agent owns execution state and feedback-driven route decisions.
|
|
5
|
+
"""
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
|
|
8
|
+
import atexit
|
|
9
|
+
import json
|
|
10
|
+
import os
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
import queue
|
|
13
|
+
import re
|
|
14
|
+
import subprocess
|
|
15
|
+
import threading
|
|
16
|
+
from typing import Any
|
|
17
|
+
|
|
18
|
+
SCHEMA = json.loads(Path(__file__).with_name('navigation.schema.json').read_text())
|
|
19
|
+
DESCRIPTION = (
|
|
20
|
+
"Delegate a bounded warehouse navigation simulation to the warehouse task agent. "
|
|
21
|
+
"Use action=create with the user's goal, a known or explicitly requested demo scenario, "
|
|
22
|
+
"constraints and a unique request_id. Then start once with task_id/request_id and "
|
|
23
|
+
"use wait (timeout_ms <= 1000) or status until terminal. The native agent observes, "
|
|
24
|
+
"plans, moves, replans after obstacles, and verifies the goal itself. "
|
|
25
|
+
"Actions: health, create, start, status, wait, stop, obstacle, trace. "
|
|
26
|
+
"Never report completion from a start acknowledgement: require completed and verified=true. "
|
|
27
|
+
"Simulation only; no hardware, real warehouse sensing, or paid inference in the executor."
|
|
28
|
+
)
|
|
29
|
+
WORKFLOW_KNOWLEDGE = """Warehouse task agent workflow:
|
|
30
|
+
- Understand the user's goal, map, destination and constraints. Ask for missing real-world data;
|
|
31
|
+
use synthetic scenes only when the user requested a demo/simulation. Never invent a real map.
|
|
32
|
+
- Delegate a mission through warehouse_task. Preserve the returned task_id and request IDs.
|
|
33
|
+
- Send request_id only with create/start/obstacle. For status/stop/trace send only action
|
|
34
|
+
and task_id; wait also requires timeout_ms (0–1000). Never add request_id to read actions.
|
|
35
|
+
- The native agent selects and updates routes from current feedback; do not issue one model
|
|
36
|
+
call per grid cell or tell the user to manually chain low-level APIs.
|
|
37
|
+
- Start is an acknowledgement, not success. Wait/status until completed, stopped, failed or
|
|
38
|
+
needs_input. Only completed + verified=true proves the goal was reached.
|
|
39
|
+
- On needs_input, explain the actual obstacle/constraint and ask for the user's decision;
|
|
40
|
+
do not silently widen the goal or restart an unsuccessful task with larger budgets.
|
|
41
|
+
- Honor stop requests. Review actual world/trace/metrics before reporting results.
|
|
42
|
+
- This capability is a logical simulation, not a connected robot or physics simulator.
|
|
43
|
+
"""
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
def is_navigation_task(message: str) -> bool:
|
|
47
|
+
return bool(re.search(
|
|
48
|
+
r'warehouse_task|warehouse.{0,40}(?:navigat|robot|shelf|simulation)|'
|
|
49
|
+
r'\b(?:navigation|physical simulation)\b|仓库.{0,20}(?:导航|机器人|仿真)|'
|
|
50
|
+
r'(?:送|运|移动|导航).{0,25}(?:货架|货位)|(?:导航|仓储)仿真',
|
|
51
|
+
str(message or ''), re.I,
|
|
52
|
+
))
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _binary() -> tuple[str, list[str]]:
|
|
56
|
+
configured = os.environ.get('ARIA_PHYSICAL_BINARY')
|
|
57
|
+
if configured:
|
|
58
|
+
path = Path(configured).expanduser()
|
|
59
|
+
if not path.is_file():
|
|
60
|
+
raise RuntimeError('Configured ARIA_PHYSICAL_BINARY is missing')
|
|
61
|
+
return str(path), ['physical'] if path.name.startswith('aria-native') else []
|
|
62
|
+
from aria_code.runtime.native_index import native_binary
|
|
63
|
+
candidate = native_binary()
|
|
64
|
+
if candidate:
|
|
65
|
+
return candidate, ['physical']
|
|
66
|
+
root = Path(__file__).resolve().parents[4]
|
|
67
|
+
suffix = '.exe' if os.name == 'nt' else ''
|
|
68
|
+
candidate = root / 'rust' / 'target' / 'debug' / ('aria-physical' + suffix)
|
|
69
|
+
if candidate.is_file():
|
|
70
|
+
return str(candidate), []
|
|
71
|
+
raise RuntimeError('Native warehouse task agent is not installed; build aria-physical and configure the host ARIA_PHYSICAL_BINARY')
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class _NativeAgent:
|
|
75
|
+
def __init__(self):
|
|
76
|
+
binary, prefix = _binary()
|
|
77
|
+
env = {key: value for key, value in os.environ.items()
|
|
78
|
+
if key.upper() in {'PATH', 'SYSTEMROOT', 'WINDIR', 'TMP', 'TEMP', 'TMPDIR'}}
|
|
79
|
+
self.process = subprocess.Popen([binary, *prefix, 'agent-jsonl'], stdin=subprocess.PIPE,
|
|
80
|
+
stdout=subprocess.PIPE, stderr=subprocess.DEVNULL,
|
|
81
|
+
text=True, encoding='utf-8', env=env)
|
|
82
|
+
self.lock = threading.Lock()
|
|
83
|
+
self.responses: queue.Queue = queue.Queue(maxsize=16)
|
|
84
|
+
def read():
|
|
85
|
+
while True:
|
|
86
|
+
line = self.process.stdout.readline(1_048_577)
|
|
87
|
+
if not line or len(line) > 1_048_576:
|
|
88
|
+
self.responses.put(None)
|
|
89
|
+
break
|
|
90
|
+
self.responses.put(line)
|
|
91
|
+
self.reader = threading.Thread(target=read, daemon=True)
|
|
92
|
+
self.reader.start()
|
|
93
|
+
check = self.call({'action': 'health'})
|
|
94
|
+
if not check.get('ok') or check.get('result', {}).get('protocol') != 'warehouse-task-agent-v1':
|
|
95
|
+
self.close()
|
|
96
|
+
raise RuntimeError('Installed native binary does not support the warehouse task agent')
|
|
97
|
+
|
|
98
|
+
def call(self, params: dict) -> dict:
|
|
99
|
+
raw = json.dumps(params, ensure_ascii=True, allow_nan=False)
|
|
100
|
+
if len(raw.encode()) + 1 > 65536:
|
|
101
|
+
raise ValueError('Task request exceeds 64 KiB')
|
|
102
|
+
with self.lock:
|
|
103
|
+
try:
|
|
104
|
+
self.process.stdin.write(raw + '\n')
|
|
105
|
+
self.process.stdin.flush()
|
|
106
|
+
line = self.responses.get(timeout=5)
|
|
107
|
+
if line is None:
|
|
108
|
+
raise RuntimeError('Native agent disconnected; task state is unknown')
|
|
109
|
+
result = json.loads(line)
|
|
110
|
+
if not isinstance(result, dict) or not isinstance(result.get('ok'), bool):
|
|
111
|
+
raise ValueError('Unexpected native agent response')
|
|
112
|
+
return result
|
|
113
|
+
except (OSError, queue.Empty, ValueError) as exc:
|
|
114
|
+
# Never transparently restart/retry an uncertain mutation.
|
|
115
|
+
self.close()
|
|
116
|
+
raise RuntimeError('Native agent unavailable; task state is unknown, action not retried') from exc
|
|
117
|
+
|
|
118
|
+
def close(self):
|
|
119
|
+
if self.process.poll() is None:
|
|
120
|
+
try:
|
|
121
|
+
self.process.stdin.close()
|
|
122
|
+
self.process.wait(timeout=1)
|
|
123
|
+
except (OSError, subprocess.TimeoutExpired):
|
|
124
|
+
self.process.terminate()
|
|
125
|
+
try:
|
|
126
|
+
self.process.wait(timeout=1)
|
|
127
|
+
except subprocess.TimeoutExpired:
|
|
128
|
+
self.process.kill()
|
|
129
|
+
self.process.wait(timeout=1)
|
|
130
|
+
if self.process.stdout:
|
|
131
|
+
self.process.stdout.close()
|
|
132
|
+
|
|
133
|
+
|
|
134
|
+
class WarehouseTaskAgent:
|
|
135
|
+
"""One native task-agent process per trusted Aria conversation context."""
|
|
136
|
+
name = 'warehouse_navigation'
|
|
137
|
+
capabilities = ('goal_contract', 'observe', 'plan', 'execute', 'replan', 'verify', 'stop')
|
|
138
|
+
|
|
139
|
+
def __init__(self):
|
|
140
|
+
self._agents: dict[str, _NativeAgent] = {}
|
|
141
|
+
self._lock = threading.Lock()
|
|
142
|
+
|
|
143
|
+
def handle(self, params: dict[str, Any]) -> dict:
|
|
144
|
+
scope = params.get('_warehouse_scope')
|
|
145
|
+
if not isinstance(scope, str) or not scope:
|
|
146
|
+
return {'success': False, 'error': 'Trusted host conversation scope is required'}
|
|
147
|
+
public = {k: v for k, v in params.items() if not k.startswith('_')}
|
|
148
|
+
if params.get('_warehouse_read_only') and public.get('action') in {'create', 'start', 'obstacle'}:
|
|
149
|
+
return {'success': False, 'error': 'Task mutations are blocked in read-only mode'}
|
|
150
|
+
try:
|
|
151
|
+
with self._lock:
|
|
152
|
+
agent = self._agents.get(scope)
|
|
153
|
+
if agent is None:
|
|
154
|
+
if len(self._agents) >= 16:
|
|
155
|
+
return {'success': False, 'error': 'Task agent conversation capacity reached'}
|
|
156
|
+
agent = _NativeAgent()
|
|
157
|
+
self._agents[scope] = agent
|
|
158
|
+
result = agent.call(public)
|
|
159
|
+
return {'success': result['ok'], **result}
|
|
160
|
+
except (RuntimeError, ValueError, OSError) as exc:
|
|
161
|
+
return {'success': False, 'error': str(exc), 'task_state': 'unknown'}
|
|
162
|
+
|
|
163
|
+
def close(self):
|
|
164
|
+
for agent in self._agents.values():
|
|
165
|
+
agent.close()
|
|
166
|
+
self._agents.clear()
|
|
167
|
+
|
|
168
|
+
|
|
169
|
+
WAREHOUSE_AGENT = WarehouseTaskAgent()
|
|
170
|
+
atexit.register(WAREHOUSE_AGENT.close)
|
|
171
|
+
WAREHOUSE_TOOLS = {'warehouse_task': (WAREHOUSE_AGENT.handle, DESCRIPTION)}
|
|
172
|
+
WAREHOUSE_SCHEMAS = [{'name': 'warehouse_task', 'description': DESCRIPTION, 'parameters': SCHEMA}]
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"""Executable read-only workflow for the warehouse ERP agent team."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Callable
|
|
6
|
+
|
|
7
|
+
from aria_code.agents.team import AgentTeam, TeamResult
|
|
8
|
+
from aria_code.clients.warehouse_erp_client import WarehouseERPClient
|
|
9
|
+
|
|
10
|
+
from . import WAREHOUSE_SCHEME, WAREHOUSE_TEAM
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
async def run_warehouse_analysis(
|
|
14
|
+
warehouse_id: str,
|
|
15
|
+
client: WarehouseERPClient | Any | None = None,
|
|
16
|
+
on_agent_done: Callable[[str, Any], None] | None = None,
|
|
17
|
+
) -> tuple[TeamResult, dict[str, Any]]:
|
|
18
|
+
"""Fetch one ERP snapshot and analyse it with the warehouse agent team."""
|
|
19
|
+
erp_client = client or WarehouseERPClient.from_env()
|
|
20
|
+
snapshot = await erp_client.fetch_snapshot(warehouse_id)
|
|
21
|
+
team = AgentTeam(
|
|
22
|
+
signal_scheme=WAREHOUSE_SCHEME,
|
|
23
|
+
on_agent_done=on_agent_done,
|
|
24
|
+
timeout_per_agent=20,
|
|
25
|
+
)
|
|
26
|
+
result = await team.run(
|
|
27
|
+
warehouse_id,
|
|
28
|
+
agents=list(WAREHOUSE_TEAM),
|
|
29
|
+
agent_data={agent_name: snapshot for agent_name in WAREHOUSE_TEAM},
|
|
30
|
+
)
|
|
31
|
+
return result, snapshot
|
aria_code/apps/README.md
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# Aria Code Apps
|
|
2
|
+
|
|
3
|
+
`apps/` contains product entrypoints. Keep business logic in `packages/` and
|
|
4
|
+
make each app a thin adapter over service contracts.
|
|
5
|
+
|
|
6
|
+
- `cli/`: interactive terminal client.
|
|
7
|
+
- `daemon/`: local-first background gateway.
|
|
8
|
+
- `channels/`: external channel adapters such as relay, Feishu, Telegram, and webhooks.
|
|
9
|
+
|
|
10
|
+
Current implementation still lives mostly in root modules such as `aria_cli.py`.
|
|
11
|
+
New work should add service code behind `packages/` first, then migrate app
|
|
12
|
+
entrypoints here in small steps.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# Channel Apps
|
|
2
|
+
|
|
3
|
+
The chat channels moved to [`services/aria-bots`](../../../../services/aria-bots/README.md):
|
|
4
|
+
the conversation layer, approvals and digests are `aria_bots.channels`, the bots
|
|
5
|
+
are `aria_bots.feishu_bot` / `aria_bots.telegram_bot`. The modules here with the
|
|
6
|
+
old names are shims.
|
|
7
|
+
|
|
8
|
+
What is still here: `intake.py` (task intake for the CLI) and `tradingview.py`
|
|
9
|
+
(the daemon's TradingView webhook), which go with the Python worker and daemon.
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
"""Aria channels — external entrypoints as structured-task producers."""
|
|
2
|
+
|
|
3
|
+
from .registry import (
|
|
4
|
+
CHANNEL_TASK_SCHEMA,
|
|
5
|
+
ChannelSpec,
|
|
6
|
+
channel_map,
|
|
7
|
+
default_channels,
|
|
8
|
+
enabled_channels,
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
__all__ = [
|
|
12
|
+
"CHANNEL_TASK_SCHEMA",
|
|
13
|
+
"ChannelSpec",
|
|
14
|
+
"channel_map",
|
|
15
|
+
"default_channels",
|
|
16
|
+
"enabled_channels",
|
|
17
|
+
]
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Moved to services/aria-bots: this name imports :mod:`aria_bots.channels.approvals`."""
|
|
2
|
+
from importlib import import_module as _import_module
|
|
3
|
+
from importlib.util import find_spec as _find_spec
|
|
4
|
+
from pathlib import Path as _Path
|
|
5
|
+
import sys as _sys
|
|
6
|
+
|
|
7
|
+
if _find_spec("aria_bots") is None: # a source checkout run without installing it
|
|
8
|
+
_sys.path.extend(str(_p / "services/aria-bots/src") for _p in _Path(__file__).resolve().parents
|
|
9
|
+
if (_p / "services/aria-bots/src/aria_bots").is_dir())
|
|
10
|
+
|
|
11
|
+
_sys.modules[__name__] = _import_module("aria_bots.channels.approvals")
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Moved to services/aria-bots: this name imports :mod:`aria_bots.channels.conversation`."""
|
|
2
|
+
from importlib import import_module as _import_module
|
|
3
|
+
from importlib.util import find_spec as _find_spec
|
|
4
|
+
from pathlib import Path as _Path
|
|
5
|
+
import sys as _sys
|
|
6
|
+
|
|
7
|
+
if _find_spec("aria_bots") is None: # a source checkout run without installing it
|
|
8
|
+
_sys.path.extend(str(_p / "services/aria-bots/src") for _p in _Path(__file__).resolve().parents
|
|
9
|
+
if (_p / "services/aria-bots/src/aria_bots").is_dir())
|
|
10
|
+
|
|
11
|
+
_sys.modules[__name__] = _import_module("aria_bots.channels.conversation")
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Moved to services/aria-bots: this name imports :mod:`aria_bots.channels.digest`."""
|
|
2
|
+
from importlib import import_module as _import_module
|
|
3
|
+
from importlib.util import find_spec as _find_spec
|
|
4
|
+
from pathlib import Path as _Path
|
|
5
|
+
import sys as _sys
|
|
6
|
+
|
|
7
|
+
if _find_spec("aria_bots") is None: # a source checkout run without installing it
|
|
8
|
+
_sys.path.extend(str(_p / "services/aria-bots/src") for _p in _Path(__file__).resolve().parents
|
|
9
|
+
if (_p / "services/aria-bots/src/aria_bots").is_dir())
|
|
10
|
+
|
|
11
|
+
_sys.modules[__name__] = _import_module("aria_bots.channels.digest")
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
"""Channel intake policy + gateway submission (the daemon-facing half).
|
|
2
|
+
|
|
3
|
+
Completes the channels contract loop: the daemon's webhook endpoint hands
|
|
4
|
+
verified channel tasks to ``runtime.run_turn`` instead of poking CLI
|
|
5
|
+
internals, and refuses unauthenticated ("open mode") intake from anywhere
|
|
6
|
+
but localhost.
|
|
7
|
+
|
|
8
|
+
Two pieces, both dependency-light so the daemon can import them without
|
|
9
|
+
dragging in aria_cli:
|
|
10
|
+
|
|
11
|
+
• should_refuse_open_intake() — pure policy: when neither an intake token
|
|
12
|
+
nor ARIA_WEBHOOK_SECRET is configured, only loopback clients may submit.
|
|
13
|
+
• analyze_alert_via_gateway() — submits a task prompt through the shared
|
|
14
|
+
runtime gateway with an EMPTY tool set: channel-triggered turns get
|
|
15
|
+
model analysis but can never execute tools from the daemon context.
|
|
16
|
+
"""
|
|
17
|
+
|
|
18
|
+
from __future__ import annotations
|
|
19
|
+
|
|
20
|
+
from typing import Any, Callable, Dict, Optional
|
|
21
|
+
|
|
22
|
+
_LOOPBACK_HOSTS = {"127.0.0.1", "::1", "localhost"}
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
def should_refuse_open_intake(
|
|
26
|
+
client_host: Optional[str],
|
|
27
|
+
*,
|
|
28
|
+
token_configured: bool,
|
|
29
|
+
secret_configured: bool,
|
|
30
|
+
) -> bool:
|
|
31
|
+
"""True when an unauthenticated intake must be rejected.
|
|
32
|
+
|
|
33
|
+
With any credential configured (endpoint token or webhook passphrase),
|
|
34
|
+
authentication handles trust and remote clients are fine. With neither
|
|
35
|
+
configured the endpoint is running "open", which is only acceptable from
|
|
36
|
+
the loopback interface — an open endpoint reachable off-host would let
|
|
37
|
+
anyone on the network inject buy/sell alerts.
|
|
38
|
+
"""
|
|
39
|
+
if token_configured or secret_configured:
|
|
40
|
+
return False
|
|
41
|
+
host = str(client_host or "").strip().lower()
|
|
42
|
+
if host.startswith("[") and host.endswith("]"): # bracketed IPv6
|
|
43
|
+
host = host[1:-1]
|
|
44
|
+
return host not in _LOOPBACK_HOSTS
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
async def analyze_alert_via_gateway(
|
|
48
|
+
prompt: str,
|
|
49
|
+
config: Dict[str, Any],
|
|
50
|
+
*,
|
|
51
|
+
run_turn_fn: Optional[Callable] = None,
|
|
52
|
+
max_rounds: int = 4,
|
|
53
|
+
) -> str:
|
|
54
|
+
"""Run one tool-less analysis turn for a channel task; returns the text.
|
|
55
|
+
|
|
56
|
+
``run_turn_fn`` is injectable for tests; the default builds the same
|
|
57
|
+
provider selection the CLI uses (chat_routing via runtime_bridge) and
|
|
58
|
+
drives ``runtime.gateway.run_turn``. Raises on failure — the caller
|
|
59
|
+
decides its own fallback (the daemon keeps its legacy quick summary).
|
|
60
|
+
"""
|
|
61
|
+
if run_turn_fn is None:
|
|
62
|
+
# No `import aria_cli` here any more. It was unconditional, for the sake
|
|
63
|
+
# of the Ollama path's rebind, and cost 1766ms against the 63ms this
|
|
64
|
+
# module's own dependencies need — paid by every channel alert including
|
|
65
|
+
# the ones analysed through the cloud, which never reach stream_ollama.
|
|
66
|
+
# runtime_bridge now imports it inside the ollama branch, so the cost
|
|
67
|
+
# follows the route that needs it.
|
|
68
|
+
from apps.cli.providers.runtime_bridge import build_tool_executor, make_provider_fn
|
|
69
|
+
from runtime.gateway import run_turn as run_turn_fn_impl
|
|
70
|
+
|
|
71
|
+
provider_fn = make_provider_fn(
|
|
72
|
+
model=str(config.get("model", "qwen2.5:7b")),
|
|
73
|
+
config=config,
|
|
74
|
+
api_url=config.get("api_url"),
|
|
75
|
+
ollama_url=str(config.get("ollama_url", "http://localhost:11434")),
|
|
76
|
+
tool_schemas=[],
|
|
77
|
+
)
|
|
78
|
+
executor = build_tool_executor({}, config)
|
|
79
|
+
|
|
80
|
+
async def run_turn_fn(prompt_, history_, **kw):
|
|
81
|
+
return await run_turn_fn_impl(
|
|
82
|
+
prompt_, history_,
|
|
83
|
+
provider_fn=provider_fn, tool_executor=executor,
|
|
84
|
+
tool_schemas=[], max_rounds=max_rounds,
|
|
85
|
+
)
|
|
86
|
+
|
|
87
|
+
result = await run_turn_fn(prompt, [])
|
|
88
|
+
text = (getattr(result, "text", "") or "").strip()
|
|
89
|
+
error = getattr(result, "error", None)
|
|
90
|
+
if error or not text:
|
|
91
|
+
raise RuntimeError(f"gateway turn failed: {error or 'empty response'}")
|
|
92
|
+
return text
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"""Moved to services/aria-bots: this name imports :mod:`aria_bots.channels.registry`."""
|
|
2
|
+
from importlib import import_module as _import_module
|
|
3
|
+
from importlib.util import find_spec as _find_spec
|
|
4
|
+
from pathlib import Path as _Path
|
|
5
|
+
import sys as _sys
|
|
6
|
+
|
|
7
|
+
if _find_spec("aria_bots") is None: # a source checkout run without installing it
|
|
8
|
+
_sys.path.extend(str(_p / "services/aria-bots/src") for _p in _Path(__file__).resolve().parents
|
|
9
|
+
if (_p / "services/aria-bots/src/aria_bots").is_dir())
|
|
10
|
+
|
|
11
|
+
_sys.modules[__name__] = _import_module("aria_bots.channels.registry")
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
"""TradingView alert → structured channel task (aria.channel_task.v1).
|
|
2
|
+
|
|
3
|
+
The channels contract requires external entrypoints to submit *structured
|
|
4
|
+
tasks* to the gateway instead of poking CLI internals. This adapter turns a
|
|
5
|
+
raw TradingView webhook payload into that task shape, reusing the hardened
|
|
6
|
+
primitives that already live in apps/cli/tradingview_bridge.py (field-tolerant
|
|
7
|
+
parsing, passphrase + HMAC verification, dedup keys).
|
|
8
|
+
|
|
9
|
+
Verification posture mirrors the bridge's documented semantics: with
|
|
10
|
+
ARIA_WEBHOOK_SECRET unset verification is open (localhost-only assumption),
|
|
11
|
+
but the task carries explicit ``verified`` / ``open_mode`` flags so a
|
|
12
|
+
downstream gate (daemon, SafetyService) can refuse open-mode tasks in
|
|
13
|
+
non-local deployments.
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import time
|
|
19
|
+
from typing import Any, Callable, Dict, Optional
|
|
20
|
+
|
|
21
|
+
from aria_code.apps.cli.tradingview_bridge import (
|
|
22
|
+
_alert_dedup_key as alert_dedup_key,
|
|
23
|
+
_expected_webhook_secret,
|
|
24
|
+
parse_tradingview_alert,
|
|
25
|
+
verify_webhook_hmac,
|
|
26
|
+
verify_webhook_secret,
|
|
27
|
+
)
|
|
28
|
+
from aria_code.apps.channels.registry import CHANNEL_TASK_SCHEMA
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def alert_to_task(
|
|
32
|
+
payload: Dict[str, Any] | str,
|
|
33
|
+
*,
|
|
34
|
+
raw_body: Optional[bytes | str] = None,
|
|
35
|
+
signature: Optional[str] = None,
|
|
36
|
+
clock: Callable[[], float] = time.time,
|
|
37
|
+
) -> Dict[str, Any]:
|
|
38
|
+
"""Normalize + authenticate one webhook delivery.
|
|
39
|
+
|
|
40
|
+
Returns ``{"success": True, "task": {...}}`` or
|
|
41
|
+
``{"success": False, "error": ...}`` (tool-result convention).
|
|
42
|
+
"""
|
|
43
|
+
alert = parse_tradingview_alert(payload)
|
|
44
|
+
raw = alert.get("raw") or {}
|
|
45
|
+
|
|
46
|
+
secret_configured = bool(_expected_webhook_secret())
|
|
47
|
+
if signature is not None:
|
|
48
|
+
# A fronting signer supplied an HMAC — it must verify (never open).
|
|
49
|
+
if not verify_webhook_hmac(raw_body if raw_body is not None else "", signature):
|
|
50
|
+
return {"success": False, "error": "tradingview alert rejected: HMAC signature mismatch"}
|
|
51
|
+
verified = True
|
|
52
|
+
else:
|
|
53
|
+
if not verify_webhook_secret(raw):
|
|
54
|
+
return {"success": False, "error": "tradingview alert rejected: passphrase missing or wrong"}
|
|
55
|
+
verified = secret_configured # open mode when no secret is configured
|
|
56
|
+
|
|
57
|
+
if not alert.get("symbol"):
|
|
58
|
+
return {"success": False, "error": "tradingview alert rejected: no symbol in payload"}
|
|
59
|
+
|
|
60
|
+
task = {
|
|
61
|
+
"schema": CHANNEL_TASK_SCHEMA,
|
|
62
|
+
"channel": "tradingview",
|
|
63
|
+
"kind": "alert",
|
|
64
|
+
"received_at": clock(),
|
|
65
|
+
"verified": verified,
|
|
66
|
+
"open_mode": not secret_configured and signature is None,
|
|
67
|
+
"dedup_key": alert_dedup_key(alert),
|
|
68
|
+
"symbol": alert["symbol"],
|
|
69
|
+
"action": alert["action"],
|
|
70
|
+
"price": alert.get("price"),
|
|
71
|
+
"time": alert.get("time"),
|
|
72
|
+
"message": alert.get("message") or "",
|
|
73
|
+
"prompt": task_prompt(alert),
|
|
74
|
+
}
|
|
75
|
+
return {"success": True, "task": task}
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def task_prompt(alert: Dict[str, Any]) -> str:
|
|
79
|
+
"""Render the gateway-facing natural-language task for this alert.
|
|
80
|
+
|
|
81
|
+
The daemon submits this prompt to runtime's ``run_turn`` — the agent then
|
|
82
|
+
analyses the alert with its normal tools; nothing here places orders.
|
|
83
|
+
"""
|
|
84
|
+
symbol = alert.get("symbol", "")
|
|
85
|
+
action = alert.get("action", "ALERT")
|
|
86
|
+
price = alert.get("price")
|
|
87
|
+
at = f" at {price}" if price not in (None, "") else ""
|
|
88
|
+
msg = str(alert.get("message") or "").strip()
|
|
89
|
+
tail = f' Alert message: "{msg}".' if msg else ""
|
|
90
|
+
return (
|
|
91
|
+
f"TradingView alert received: {action} signal for {symbol}{at}.{tail} "
|
|
92
|
+
f"Assess the signal against current market data and the portfolio, and "
|
|
93
|
+
f"summarize whether it warrants action. Do not place any orders."
|
|
94
|
+
)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# CLI App
|
|
2
|
+
|
|
3
|
+
Target role: terminal UI and command parsing only.
|
|
4
|
+
|
|
5
|
+
The CLI should depend on these services:
|
|
6
|
+
|
|
7
|
+
- `gateway`: session routing and task orchestration.
|
|
8
|
+
- `runtime`: agent loop and tool execution.
|
|
9
|
+
- `ui`: terminal rendering and input.
|
|
10
|
+
- `reports`: local artifact and report output.
|
|
11
|
+
|
|
12
|
+
Migration rule: new slash commands should call package services instead of
|
|
13
|
+
adding more business logic to `aria_cli.py`.
|