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,34 @@
|
|
|
1
|
+
"""Owns the tool registries that aria_cli populates at import.
|
|
2
|
+
|
|
3
|
+
LOCAL_TOOLS, LOCAL_TOOL_SCHEMAS and ARIA_TOOLS were declared in aria_cli.py, so
|
|
4
|
+
five command mixins reached into a 6800-line module to ask what tools exist —
|
|
5
|
+
every one of them read-only: len(), `in`, .items(), one lookup. Registration
|
|
6
|
+
still happens in aria_cli, which is where the tool functions and their optional
|
|
7
|
+
imports live; what moved is *ownership of the containers*.
|
|
8
|
+
|
|
9
|
+
They are populated in place (update/extend), never rebound. That matters: a
|
|
10
|
+
`LOCAL_TOOLS = {...}` anywhere would leave this module's dict empty while the
|
|
11
|
+
CLI filled a different one, and every reader here would silently see no tools.
|
|
12
|
+
The same failure the response cache and the tool-result cache each had.
|
|
13
|
+
|
|
14
|
+
This is also the first piece the durable runtime needs. A registry that exists
|
|
15
|
+
only as a global in whichever process imported aria_cli cannot be reconstructed
|
|
16
|
+
by a worker resuming a task somewhere else. Giving it its own module does not
|
|
17
|
+
make it per-session — that decision is still open — but it stops the CLI module
|
|
18
|
+
from being the only place it can live.
|
|
19
|
+
"""
|
|
20
|
+
|
|
21
|
+
from __future__ import annotations
|
|
22
|
+
|
|
23
|
+
from typing import Any, Callable
|
|
24
|
+
|
|
25
|
+
__all__ = ["LOCAL_TOOLS", "LOCAL_TOOL_SCHEMAS", "ARIA_TOOLS"]
|
|
26
|
+
|
|
27
|
+
# name -> (callable, human description)
|
|
28
|
+
LOCAL_TOOLS: dict[str, tuple[Callable[..., Any], str]] = {}
|
|
29
|
+
|
|
30
|
+
# OpenAI-style function schemas for the local tools above.
|
|
31
|
+
LOCAL_TOOL_SCHEMAS: list[dict[str, Any]] = []
|
|
32
|
+
|
|
33
|
+
# (name, description) for tools served by the Arthera backend.
|
|
34
|
+
ARIA_TOOLS: list[tuple[str, str]] = []
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
"""Which tools a turn is offered — for every provider, not just Ollama.
|
|
2
|
+
|
|
3
|
+
The gap this closes
|
|
4
|
+
-------------------
|
|
5
|
+
The pack contract has three contributions: handlers, a prompt fragment, and
|
|
6
|
+
*tools*. Two of them were wired. ``active_tool_names()`` was written, exported
|
|
7
|
+
and never called by anything, so the third was inert: every turn on every
|
|
8
|
+
provider was offered every registered tool.
|
|
9
|
+
|
|
10
|
+
Concretely, a request to fix a failing test reached Gemini carrying all 74 tool
|
|
11
|
+
schemas, 34 of them domain tools — market quotes, broker orders, backtests,
|
|
12
|
+
Stripe analysis, freight reconciliation. That is the same shape as the system
|
|
13
|
+
prompt only reaching Ollama: a decision the architecture already knew how to
|
|
14
|
+
make, not applied on the path that matters most.
|
|
15
|
+
|
|
16
|
+
Why it matters beyond context size
|
|
17
|
+
----------------------------------
|
|
18
|
+
Wasted context is the smaller cost. The real one is that a tool in the list is
|
|
19
|
+
a tool the model may call, and the incident the pack contract exists to prevent
|
|
20
|
+
— a question about this repository answered with a MongoDB stock quote — is
|
|
21
|
+
exactly a domain tool firing on a message that named nothing in its domain.
|
|
22
|
+
Leaving all 34 in view on every coding turn keeps that door open.
|
|
23
|
+
|
|
24
|
+
The rule
|
|
25
|
+
--------
|
|
26
|
+
A domain tool is offered only when its pack has claimed the message. Anything
|
|
27
|
+
no pack claims is core and always available, which makes the default safe:
|
|
28
|
+
adding a tool nobody assigns to a domain keeps working exactly as before, and
|
|
29
|
+
the burden is on a domain to say "this one is mine".
|
|
30
|
+
"""
|
|
31
|
+
|
|
32
|
+
from __future__ import annotations
|
|
33
|
+
|
|
34
|
+
from typing import Iterable, Optional, Sequence
|
|
35
|
+
|
|
36
|
+
__all__ = ["domain_tool_names", "select_tool_schemas"]
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
def _schema_name(schema: dict) -> str:
|
|
40
|
+
return str((schema.get("function") or schema).get("name") or "")
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def domain_tool_names() -> frozenset[str]:
|
|
44
|
+
"""Every tool claimed by some pack, whether or not that pack is active.
|
|
45
|
+
|
|
46
|
+
Membership here is what makes a tool *gateable*. A tool absent from this
|
|
47
|
+
set is core and always offered.
|
|
48
|
+
"""
|
|
49
|
+
claimed: set[str] = set()
|
|
50
|
+
try:
|
|
51
|
+
from aria_code.packs import load_builtin_packs, registered_packs
|
|
52
|
+
|
|
53
|
+
load_builtin_packs()
|
|
54
|
+
for pack in registered_packs():
|
|
55
|
+
try:
|
|
56
|
+
claimed.update(str(name) for name in (pack.tool_names() or ()))
|
|
57
|
+
except Exception:
|
|
58
|
+
continue
|
|
59
|
+
except Exception:
|
|
60
|
+
return frozenset()
|
|
61
|
+
return frozenset(claimed)
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def select_tool_schemas(
|
|
65
|
+
schemas: Sequence[dict],
|
|
66
|
+
message: str,
|
|
67
|
+
*,
|
|
68
|
+
always: Iterable[str] = (),
|
|
69
|
+
activations: Optional[Sequence] = None,
|
|
70
|
+
allow_social_tools: bool = False,
|
|
71
|
+
) -> list[dict]:
|
|
72
|
+
"""The schemas to offer for *message*.
|
|
73
|
+
|
|
74
|
+
Standalone social messages need no tools. Otherwise core tools always;
|
|
75
|
+
a domain tool only while its pack has claimed the
|
|
76
|
+
message. ``always`` forces specific names in regardless — for a caller that
|
|
77
|
+
knows this turn needs one (a slash command that resolved to a tool, a
|
|
78
|
+
subagent handed a narrowed brief).
|
|
79
|
+
|
|
80
|
+
Degrades to the full list on any failure. Offering too many tools is a
|
|
81
|
+
tax; offering too few silently removes a capability, and between the two
|
|
82
|
+
the tax is the safer default.
|
|
83
|
+
"""
|
|
84
|
+
all_schemas = list(schemas or [])
|
|
85
|
+
always = tuple(always)
|
|
86
|
+
if not all_schemas:
|
|
87
|
+
return all_schemas
|
|
88
|
+
from aria_code.apps.cli.conversation_policy import is_conversation_only_message
|
|
89
|
+
|
|
90
|
+
if is_conversation_only_message(message) and not always and not allow_social_tools:
|
|
91
|
+
return []
|
|
92
|
+
|
|
93
|
+
# One try around the whole decision. domain_tool_names() sat outside it,
|
|
94
|
+
# so a failure there propagated instead of degrading — the docstring
|
|
95
|
+
# promised a safe fallback the code did not deliver on that path.
|
|
96
|
+
try:
|
|
97
|
+
gateable = domain_tool_names()
|
|
98
|
+
if not gateable:
|
|
99
|
+
return all_schemas
|
|
100
|
+
|
|
101
|
+
from aria_code.packs import activate_packs, active_tool_names
|
|
102
|
+
|
|
103
|
+
active = activations if activations is not None else activate_packs(message or "")
|
|
104
|
+
permitted = set(active_tool_names(active))
|
|
105
|
+
except Exception:
|
|
106
|
+
return all_schemas
|
|
107
|
+
|
|
108
|
+
permitted.update(str(name) for name in always if name)
|
|
109
|
+
|
|
110
|
+
return [
|
|
111
|
+
schema for schema in all_schemas
|
|
112
|
+
if (name := _schema_name(schema)) not in gateable or name in permitted
|
|
113
|
+
]
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"""apps/cli/tools — stateless tool implementations extracted from aria_cli.py."""
|
|
2
|
+
from .file_tools import tool_read_file, tool_list_files, tool_search_code, tool_glob
|
|
3
|
+
from .context import ToolContext
|
|
4
|
+
from .system_tools import tool_run_command, tool_web_fetch, tool_github
|
|
5
|
+
from .notebook_tools import (
|
|
6
|
+
tool_glob as tool_glob_nb,
|
|
7
|
+
tool_notebook_read,
|
|
8
|
+
tool_notebook_edit,
|
|
9
|
+
)
|
|
10
|
+
from .market_tools import (
|
|
11
|
+
tool_get_market_data,
|
|
12
|
+
tool_get_market_history,
|
|
13
|
+
tool_broker_query,
|
|
14
|
+
tool_broker_order,
|
|
15
|
+
)
|
|
16
|
+
from .write_tools import tool_write_file, tool_edit_file
|
|
17
|
+
|
|
18
|
+
__all__ = [
|
|
19
|
+
"ToolContext",
|
|
20
|
+
# file tools (stateless)
|
|
21
|
+
"tool_read_file",
|
|
22
|
+
"tool_list_files",
|
|
23
|
+
"tool_search_code",
|
|
24
|
+
"tool_glob",
|
|
25
|
+
# write / edit tools (use lazy imports to avoid circular dep)
|
|
26
|
+
"tool_write_file",
|
|
27
|
+
"tool_edit_file",
|
|
28
|
+
# system tools
|
|
29
|
+
"tool_run_command",
|
|
30
|
+
"tool_web_fetch",
|
|
31
|
+
"tool_github",
|
|
32
|
+
# notebook tools
|
|
33
|
+
"tool_notebook_read",
|
|
34
|
+
"tool_notebook_edit",
|
|
35
|
+
# market / broker tools
|
|
36
|
+
"tool_get_market_data",
|
|
37
|
+
"tool_get_market_history",
|
|
38
|
+
"tool_broker_query",
|
|
39
|
+
"tool_broker_order",
|
|
40
|
+
]
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
"""ToolContext — dependency bundle for tools that need write/display state."""
|
|
2
|
+
from __future__ import annotations
|
|
3
|
+
|
|
4
|
+
from dataclasses import dataclass, field
|
|
5
|
+
from pathlib import Path
|
|
6
|
+
from typing import TYPE_CHECKING, Any
|
|
7
|
+
|
|
8
|
+
from aria_code.apps.cli.config_paths import resolve_config_dir
|
|
9
|
+
|
|
10
|
+
if TYPE_CHECKING:
|
|
11
|
+
from rich.console import Console
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@dataclass
|
|
15
|
+
class ToolContext:
|
|
16
|
+
"""Passed to write-capable tools so they don't need aria_cli.py globals.
|
|
17
|
+
|
|
18
|
+
Instantiate once in ``ArtheraTerminal.__init__`` and share via reference:
|
|
19
|
+
|
|
20
|
+
self._tool_ctx = ToolContext(
|
|
21
|
+
console=console,
|
|
22
|
+
has_rich=HAS_RICH,
|
|
23
|
+
write_policy=_ACTIVE_WRITE_POLICY,
|
|
24
|
+
change_store=GLOBAL_CHANGE_STORE,
|
|
25
|
+
config_dir=CONFIG_DIR,
|
|
26
|
+
sessions_dir=SESSIONS_DIR,
|
|
27
|
+
)
|
|
28
|
+
"""
|
|
29
|
+
console: "Console | None" = None
|
|
30
|
+
has_rich: bool = True
|
|
31
|
+
write_policy: list[str] = field(default_factory=lambda: ["desktop_only"])
|
|
32
|
+
change_store: Any = None # GLOBAL_CHANGE_STORE
|
|
33
|
+
config_dir: Path = field(default_factory=resolve_config_dir)
|
|
34
|
+
sessions_dir: Path = field(default_factory=lambda: resolve_config_dir() / "sessions")
|
|
35
|
+
|
|
36
|
+
# ── helpers ──────────────────────────────────────────────────────
|
|
37
|
+
def print(self, *args, **kwargs) -> None:
|
|
38
|
+
if self.has_rich and self.console is not None:
|
|
39
|
+
self.console.print(*args, **kwargs)
|
|
40
|
+
else:
|
|
41
|
+
import builtins
|
|
42
|
+
builtins.print(*args)
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def policy(self) -> str:
|
|
46
|
+
return self.write_policy[0] if self.write_policy else "desktop_only"
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
"""Stateless file / code search tools — thin wrappers around WorkspaceFiles.
|
|
2
|
+
|
|
3
|
+
These functions are pure: they take a params dict, call _get_workspace_files(), and
|
|
4
|
+
return a result dict. No console/HAS_RICH/write-policy state involved.
|
|
5
|
+
|
|
6
|
+
They are registered in aria_cli.py's execute_aria_tool dispatch table via:
|
|
7
|
+
|
|
8
|
+
from aria_code.apps.cli.tools.file_tools import tool_read_file, tool_list_files, ...
|
|
9
|
+
|
|
10
|
+
"read_file": tool_read_file,
|
|
11
|
+
"list_files": tool_list_files,
|
|
12
|
+
"search_code": tool_search_code,
|
|
13
|
+
"glob": tool_glob,
|
|
14
|
+
"""
|
|
15
|
+
|
|
16
|
+
from __future__ import annotations
|
|
17
|
+
|
|
18
|
+
import pathlib
|
|
19
|
+
import sys
|
|
20
|
+
import os
|
|
21
|
+
|
|
22
|
+
# WorkspaceFiles lives at the aria-code root; insert it when running tests
|
|
23
|
+
_ROOT = pathlib.Path(__file__).parent.parent.parent.parent # aria-code/
|
|
24
|
+
if str(_ROOT) not in sys.path:
|
|
25
|
+
sys.path.insert(0, str(_ROOT))
|
|
26
|
+
|
|
27
|
+
from aria_code.workspace import WorkspaceFiles # noqa: E402
|
|
28
|
+
from aria_code.workspace.files import WorkspaceSecurity
|
|
29
|
+
import os
|
|
30
|
+
|
|
31
|
+
def _get_workspace_files(params=None):
|
|
32
|
+
"""Reads for the local CLI: cwd, home, and the temp dirs.
|
|
33
|
+
|
|
34
|
+
``allow_home=False`` used to be hardcoded here to "force restrict to the
|
|
35
|
+
current directory". It does not do that. WorkspaceSecurity only appends the
|
|
36
|
+
temp roots on the allow_home branch, so the flag additionally removed /tmp
|
|
37
|
+
and /var/folders — and since Python's tempfile lives under /var/folders on
|
|
38
|
+
macOS, the CLI could write a file into its own scratch directory and then
|
|
39
|
+
be denied reading it back.
|
|
40
|
+
|
|
41
|
+
Confinement for remote workers is the same documented mechanism used
|
|
42
|
+
everywhere else: ARIA_RUNTIME_SCOPE=remote, which Dockerfile.review sets.
|
|
43
|
+
Leaving the flag unset here honours it without disabling the local paths.
|
|
44
|
+
"""
|
|
45
|
+
security = WorkspaceSecurity.from_tool_params(params or {})
|
|
46
|
+
return WorkspaceFiles(security=security)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
def tool_read_file(params: dict) -> dict:
|
|
51
|
+
"""Read file contents with optional line range."""
|
|
52
|
+
path = params.get("path", "")
|
|
53
|
+
if not path:
|
|
54
|
+
return {"success": False, "error": "Missing 'path' parameter"}
|
|
55
|
+
try:
|
|
56
|
+
offset = int(params.get("offset", 0) or 0)
|
|
57
|
+
limit = int(params.get("limit", 0) or 0)
|
|
58
|
+
if not offset and not limit:
|
|
59
|
+
limit = 160
|
|
60
|
+
result = _get_workspace_files(params).read_file(path, offset=offset, limit=limit)
|
|
61
|
+
content = result.content
|
|
62
|
+
if limit and result.lines >= limit and "use offset/limit to read more" not in content:
|
|
63
|
+
content += "\n... [default read limit applied — use offset/limit to read more]"
|
|
64
|
+
return {"success": True, "data": {
|
|
65
|
+
"path": result.path,
|
|
66
|
+
"lines": result.lines,
|
|
67
|
+
"content": content,
|
|
68
|
+
}}
|
|
69
|
+
except Exception as e:
|
|
70
|
+
return {"success": False, "error": str(e)}
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
def tool_list_files(params: dict) -> dict:
|
|
74
|
+
"""List files in a directory, optionally matching a glob pattern."""
|
|
75
|
+
path = params.get("path", ".")
|
|
76
|
+
pattern = params.get("pattern", "*")
|
|
77
|
+
try:
|
|
78
|
+
data = _get_workspace_files(params).list_files(path, pattern)
|
|
79
|
+
return {"success": True, "data": {
|
|
80
|
+
"path": data["path"],
|
|
81
|
+
"pattern": data["pattern"],
|
|
82
|
+
"count": data["count"],
|
|
83
|
+
"items": data["items"],
|
|
84
|
+
}}
|
|
85
|
+
except Exception as e:
|
|
86
|
+
return {"success": False, "error": str(e)}
|
|
87
|
+
|
|
88
|
+
|
|
89
|
+
def tool_search_code(params: dict) -> dict:
|
|
90
|
+
"""Search for a pattern in files (like grep)."""
|
|
91
|
+
pattern = params.get("pattern", "")
|
|
92
|
+
path = params.get("path", ".")
|
|
93
|
+
file_glob = params.get("glob", "**/*.py")
|
|
94
|
+
if not pattern:
|
|
95
|
+
return {"success": False, "error": "Missing 'pattern' parameter"}
|
|
96
|
+
try:
|
|
97
|
+
data = _get_workspace_files(params).search_code(pattern, path, file_glob)
|
|
98
|
+
return {"success": True, "data": {
|
|
99
|
+
"pattern": data["pattern"],
|
|
100
|
+
"path": data["path"],
|
|
101
|
+
"count": data["count"],
|
|
102
|
+
"matches": data["matches"],
|
|
103
|
+
}}
|
|
104
|
+
except Exception as e:
|
|
105
|
+
return {"success": False, "error": str(e)}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
def tool_glob(params: dict) -> dict:
|
|
109
|
+
"""Fast file-pattern search (supports ** recursive globs).
|
|
110
|
+
|
|
111
|
+
Returns a flat sorted list of matching file paths up to *limit* entries.
|
|
112
|
+
"""
|
|
113
|
+
pattern = params.get("pattern", "**/*")
|
|
114
|
+
root = (params.get("path", ".") or ".").strip()
|
|
115
|
+
limit = min(int(params.get("limit", 200)), 1000)
|
|
116
|
+
try:
|
|
117
|
+
security = WorkspaceSecurity.from_tool_params(params)
|
|
118
|
+
p = security.require_safe(root)
|
|
119
|
+
if not p.is_dir():
|
|
120
|
+
return {"success": False, "error": f"Directory not found: {p}"}
|
|
121
|
+
results = sorted(
|
|
122
|
+
str(fp.relative_to(p) if fp.is_relative_to(p) else fp)
|
|
123
|
+
for fp in p.glob(pattern)
|
|
124
|
+
if fp.is_file() and security.is_safe_path(fp)
|
|
125
|
+
)[:limit]
|
|
126
|
+
return {"success": True, "data": {
|
|
127
|
+
"pattern": pattern,
|
|
128
|
+
"root": str(p),
|
|
129
|
+
"count": len(results),
|
|
130
|
+
"files": results,
|
|
131
|
+
}}
|
|
132
|
+
except Exception as e:
|
|
133
|
+
return {"success": False, "error": str(e)}
|
|
134
|
+
|
|
135
|
+
def tool_lsp_hover(params: dict) -> dict:
|
|
136
|
+
"""Get hover documentation (LSP) for a symbol at a specific line and column."""
|
|
137
|
+
path = params.get("path", "")
|
|
138
|
+
line = params.get("line", 1)
|
|
139
|
+
col = params.get("col", 1)
|
|
140
|
+
if not path:
|
|
141
|
+
return {"success": False, "error": "Missing 'path' parameter"}
|
|
142
|
+
try:
|
|
143
|
+
from aria_code.runtime.lsp import get_hover
|
|
144
|
+
res = get_hover(path, int(line), int(col))
|
|
145
|
+
if not res:
|
|
146
|
+
return {"success": False, "error": f"No hover info available at {path}:{line}:{col} (Is the language server installed?)"}
|
|
147
|
+
return {"success": True, "data": {"hover": res}}
|
|
148
|
+
except Exception as e:
|
|
149
|
+
return {"success": False, "error": str(e)}
|
|
150
|
+
|
|
151
|
+
def tool_lsp_definition(params: dict) -> dict:
|
|
152
|
+
"""Get definition locations (LSP) for a symbol at a specific line and column."""
|
|
153
|
+
path = params.get("path", "")
|
|
154
|
+
line = params.get("line", 1)
|
|
155
|
+
col = params.get("col", 1)
|
|
156
|
+
if not path:
|
|
157
|
+
return {"success": False, "error": "Missing 'path' parameter"}
|
|
158
|
+
try:
|
|
159
|
+
from aria_code.runtime.lsp import get_definition
|
|
160
|
+
res = get_definition(path, int(line), int(col))
|
|
161
|
+
if not res:
|
|
162
|
+
return {"success": False, "error": f"No definitions found at {path}:{line}:{col} (Is the language server installed?)"}
|
|
163
|
+
return {"success": True, "data": {"definitions": res}}
|
|
164
|
+
except Exception as e:
|
|
165
|
+
return {"success": False, "error": str(e)}
|
|
166
|
+
|
|
167
|
+
def tool_lsp_references(params: dict) -> dict:
|
|
168
|
+
"""Get all references (LSP) for a symbol at a specific line and column."""
|
|
169
|
+
path = params.get("path", "")
|
|
170
|
+
line = params.get("line", 1)
|
|
171
|
+
col = params.get("col", 1)
|
|
172
|
+
if not path:
|
|
173
|
+
return {"success": False, "error": "Missing 'path' parameter"}
|
|
174
|
+
try:
|
|
175
|
+
from aria_code.runtime.lsp import get_references
|
|
176
|
+
res = get_references(path, int(line), int(col))
|
|
177
|
+
if not res:
|
|
178
|
+
return {"success": False, "error": f"No references found at {path}:{line}:{col} (Is the language server installed?)"}
|
|
179
|
+
return {"success": True, "data": {"references": res}}
|
|
180
|
+
except Exception as e:
|
|
181
|
+
return {"success": False, "error": str(e)}
|