aria-code 0.119.0__tar.gz → 0.120.0__tar.gz

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.
Files changed (820) hide show
  1. {aria_code-0.119.0/src/aria_code.egg-info → aria_code-0.120.0}/PKG-INFO +2 -2
  2. {aria_code-0.119.0 → aria_code-0.120.0}/README.md +1 -1
  3. {aria_code-0.119.0 → aria_code-0.120.0}/pyproject.toml +1 -1
  4. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/_version.py +1 -1
  5. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/chat_turn.py +19 -0
  6. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/headless.py +2 -0
  7. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +32 -4
  8. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/__init__.py +4 -0
  9. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/agent_loop.py +62 -3
  10. aria_code-0.120.0/src/aria_code/runtime/contract.py +282 -0
  11. aria_code-0.120.0/src/aria_code/runtime/delivery.py +292 -0
  12. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/gateway.py +5 -0
  13. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/safety/__init__.py +4 -0
  14. aria_code-0.120.0/src/aria_code/safety/risk.py +576 -0
  15. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/render/output.py +48 -0
  16. {aria_code-0.119.0 → aria_code-0.120.0/src/aria_code.egg-info}/PKG-INFO +2 -2
  17. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code.egg-info/SOURCES.txt +6 -0
  18. aria_code-0.120.0/tests/test_change_contract.py +146 -0
  19. aria_code-0.120.0/tests/test_delivery_report.py +125 -0
  20. aria_code-0.120.0/tests/test_risk_assessment.py +87 -0
  21. {aria_code-0.119.0 → aria_code-0.120.0}/LICENSE +0 -0
  22. {aria_code-0.119.0 → aria_code-0.120.0}/NOTICE +0 -0
  23. {aria_code-0.119.0 → aria_code-0.120.0}/setup.cfg +0 -0
  24. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/__init__.py +0 -0
  25. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/adk_apps/__init__.py +0 -0
  26. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
  27. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
  28. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
  29. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
  30. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/__init__.py +0 -0
  31. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/base.py +0 -0
  32. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/code_review.py +0 -0
  33. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/__init__.py +0 -0
  34. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
  35. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/critic.py +0 -0
  36. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/deepen.py +0 -0
  37. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/models.py +0 -0
  38. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/pipeline.py +0 -0
  39. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
  40. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/themes.py +0 -0
  41. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/deep/tiers.py +0 -0
  42. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/engineering/__init__.py +0 -0
  43. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/engineering/coder.py +0 -0
  44. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/engineering/tester.py +0 -0
  45. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/__init__.py +0 -0
  46. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
  47. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/catalyst.py +0 -0
  48. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
  49. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/debate.py +0 -0
  50. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/earnings.py +0 -0
  51. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/fundamental.py +0 -0
  52. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/macro.py +0 -0
  53. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/news.py +0 -0
  54. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/risk.py +0 -0
  55. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/sector.py +0 -0
  56. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/strategist.py +0 -0
  57. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
  58. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/synthesis.py +0 -0
  59. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/financial/technical.py +0 -0
  60. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/orchestrator.py +0 -0
  61. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/portfolio_agent.py +0 -0
  62. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/__init__.py +0 -0
  63. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
  64. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/business_match.py +0 -0
  65. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
  66. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
  67. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
  68. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
  69. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
  70. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
  71. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
  72. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/registry.py +0 -0
  73. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/signal_scheme.py +0 -0
  74. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/sports/__init__.py +0 -0
  75. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/sports/football_agent.py +0 -0
  76. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/supervisor.py +0 -0
  77. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/team.py +0 -0
  78. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
  79. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
  80. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
  81. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
  82. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
  83. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
  84. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
  85. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
  86. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
  87. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
  88. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
  89. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/aliyun_data_client.py +0 -0
  90. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/README.md +0 -0
  91. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/__init__.py +0 -0
  92. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/channels/README.md +0 -0
  93. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/channels/__init__.py +0 -0
  94. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/channels/approvals.py +0 -0
  95. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/channels/conversation.py +0 -0
  96. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/channels/digest.py +0 -0
  97. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/channels/intake.py +0 -0
  98. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/channels/registry.py +0 -0
  99. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/channels/tradingview.py +0 -0
  100. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/README.md +0 -0
  101. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/__init__.py +0 -0
  102. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/_optional.py +0 -0
  103. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
  104. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/broker_render.py +0 -0
  105. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
  106. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
  107. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
  108. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
  109. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
  110. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
  111. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
  112. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
  113. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
  114. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
  115. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
  116. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
  117. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/core_cmds.py +0 -0
  118. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
  119. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
  120. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
  121. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
  122. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
  123. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
  124. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/market.py +0 -0
  125. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
  126. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
  127. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
  128. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
  129. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
  130. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
  131. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
  132. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +0 -0
  133. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/report.py +0 -0
  134. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
  135. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
  136. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
  137. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/team.py +0 -0
  138. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
  139. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
  140. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
  141. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
  142. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
  143. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/config_paths.py +0 -0
  144. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/config_store.py +0 -0
  145. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/constants.py +0 -0
  146. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/context.py +0 -0
  147. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/deterministic.py +0 -0
  148. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/direct.py +0 -0
  149. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/earnings_view.py +0 -0
  150. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/exec_events.py +0 -0
  151. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
  152. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/football_reports.py +0 -0
  153. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
  154. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/google_login.py +0 -0
  155. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
  156. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
  157. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
  158. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
  159. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
  160. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
  161. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
  162. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/helpers.py +0 -0
  163. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/hooks.py +0 -0
  164. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/i18n.py +0 -0
  165. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/intent.py +0 -0
  166. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/intent_router.py +0 -0
  167. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
  168. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
  169. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
  170. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/main.py +0 -0
  171. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/market_hours.py +0 -0
  172. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
  173. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/market_universe.py +0 -0
  174. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/message_processing.py +0 -0
  175. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/mixin_binding.py +0 -0
  176. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
  177. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/model_probe.py +0 -0
  178. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/model_retirement.py +0 -0
  179. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
  180. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
  181. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
  182. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
  183. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/preflight.py +0 -0
  184. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/project_aria.py +0 -0
  185. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
  186. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
  187. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
  188. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
  189. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
  190. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
  191. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
  192. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
  193. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
  194. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/base.py +0 -0
  195. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
  196. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
  197. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
  198. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
  199. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
  200. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
  201. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
  202. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
  203. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/release_download.py +0 -0
  204. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/review_runner.py +0 -0
  205. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
  206. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/sandbox.py +0 -0
  207. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/session_export.py +0 -0
  208. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
  209. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/session_store.py +0 -0
  210. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
  211. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/terminal_chrome.py +0 -0
  212. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
  213. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
  214. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
  215. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
  216. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
  217. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tools/context.py +0 -0
  218. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
  219. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
  220. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
  221. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
  222. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
  223. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
  224. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
  225. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/update_check.py +0 -0
  226. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/updater.py +0 -0
  227. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
  228. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
  229. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/cli/workspace_route.py +0 -0
  230. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/daemon/README.md +0 -0
  231. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/vscode/README.md +0 -0
  232. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/apps/vscode/package.json +0 -0
  233. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/aria_cli.py +0 -0
  234. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/aria_daemon.py +0 -0
  235. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/aria_feishu_bot.py +0 -0
  236. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/aria_mcp_server.py +0 -0
  237. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/aria_relay_client.py +0 -0
  238. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/aria_relay_server.py +0 -0
  239. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/aria_telegram_bot.py +0 -0
  240. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ariarc.py +0 -0
  241. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/artifacts.py +0 -0
  242. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/backtest_engine.py +0 -0
  243. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/backtest_report.py +0 -0
  244. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/__init__.py +0 -0
  245. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/automation.py +0 -0
  246. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/base.py +0 -0
  247. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/capabilities.py +0 -0
  248. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/cn/__init__.py +0 -0
  249. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
  250. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
  251. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
  252. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
  253. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
  254. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/config.py +0 -0
  255. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/intl/__init__.py +0 -0
  256. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
  257. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
  258. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
  259. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
  260. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/paper_broker.py +0 -0
  261. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/planning.py +0 -0
  262. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/registry.py +0 -0
  263. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/brokers/trading.py +0 -0
  264. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/canva_client.py +0 -0
  265. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/change_store.py +0 -0
  266. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/__init__.py +0 -0
  267. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
  268. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/aria_relay_client.py +0 -0
  269. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/canva_client.py +0 -0
  270. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/figma_client.py +0 -0
  271. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/football_data_client.py +0 -0
  272. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/kling_video_client.py +0 -0
  273. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/market_data_client.py +0 -0
  274. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/openai_image_client.py +0 -0
  275. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/runway_video_client.py +0 -0
  276. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
  277. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/cloud_memory.py +0 -0
  278. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/command_safety.py +0 -0
  279. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/computer_use_tools.py +0 -0
  280. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/dashboard_generator.py +0 -0
  281. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/data_analysis_tools.py +0 -0
  282. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/data_cleaner.py +0 -0
  283. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/data_service.py +0 -0
  284. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/__init__.py +0 -0
  285. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/base.py +0 -0
  286. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/router.py +0 -0
  287. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/__init__.py +0 -0
  288. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
  289. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
  290. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
  291. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
  292. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
  293. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
  294. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
  295. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
  296. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
  297. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/demo_player.py +0 -0
  298. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/doctor.py +0 -0
  299. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/domain/__init__.py +0 -0
  300. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/domain/backtest_engine.py +0 -0
  301. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/domain/backtest_report.py +0 -0
  302. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/domain/finance_formulas.py +0 -0
  303. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
  304. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/domain/strategy_vault.py +0 -0
  305. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/evals/__init__.py +0 -0
  306. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/evals/gap.py +0 -0
  307. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/evals/harness.py +0 -0
  308. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/evals/runner.py +0 -0
  309. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/evals/summary.py +0 -0
  310. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/external_agent_runner.py +0 -0
  311. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/figma_client.py +0 -0
  312. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/file_analysis_tools.py +0 -0
  313. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/finance_formulas.py +0 -0
  314. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/football_data_client.py +0 -0
  315. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/image_gen_tools.py +0 -0
  316. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/intent_classifier.py +0 -0
  317. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/kling_video_client.py +0 -0
  318. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/licensing.py +0 -0
  319. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/local_finance_tools.py +0 -0
  320. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/local_image_provider.py +0 -0
  321. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/local_llm_provider.py +0 -0
  322. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/macro_tools.py +0 -0
  323. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/markdown_pdf.py +0 -0
  324. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/market_data_client.py +0 -0
  325. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/mcp_client.py +0 -0
  326. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/memory_manager.py +0 -0
  327. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/model_capability.py +0 -0
  328. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/notification_tools.py +0 -0
  329. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/openai_image_client.py +0 -0
  330. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/__init__.py +0 -0
  331. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
  332. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
  333. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
  334. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
  335. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
  336. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
  337. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
  338. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_core/export.py +0 -0
  339. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
  340. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_core/paths.py +0 -0
  341. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
  342. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
  343. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
  344. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
  345. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_infra/product.py +0 -0
  346. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
  347. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
  348. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
  349. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
  350. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
  351. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
  352. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
  353. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
  354. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
  355. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
  356. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
  357. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
  358. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
  359. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/cache.py +0 -0
  360. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/context.py +0 -0
  361. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
  362. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/data.py +0 -0
  363. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
  364. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/references.py +0 -0
  365. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/registry.py +0 -0
  366. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
  367. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
  368. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/settings.py +0 -0
  369. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_services/usage.py +0 -0
  370. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
  371. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
  372. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
  373. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
  374. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
  375. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
  376. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
  377. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
  378. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
  379. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
  380. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
  381. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
  382. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
  383. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
  384. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
  385. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
  386. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
  387. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
  388. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
  389. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
  390. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
  391. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
  392. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
  393. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
  394. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
  395. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
  396. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
  397. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
  398. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
  399. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
  400. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
  401. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
  402. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
  403. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
  404. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
  405. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packs/__init__.py +0 -0
  406. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packs/base.py +0 -0
  407. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packs/finance/__init__.py +0 -0
  408. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packs/logistics/__init__.py +0 -0
  409. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packs/payments/__init__.py +0 -0
  410. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packs/realty/__init__.py +0 -0
  411. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packs/registry.py +0 -0
  412. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/packs/rules.py +0 -0
  413. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/plan_utils.py +0 -0
  414. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/plugin_loader.py +0 -0
  415. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/portfolio_ledger.py +0 -0
  416. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/preview_server.py +0 -0
  417. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/privacy/__init__.py +0 -0
  418. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/privacy/feedback.py +0 -0
  419. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/project_review.py +0 -0
  420. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/project_review_api.py +0 -0
  421. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/project_review_server.py +0 -0
  422. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/project_tools.py +0 -0
  423. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/__init__.py +0 -0
  424. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/llm/__init__.py +0 -0
  425. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/llm/anthropic.py +0 -0
  426. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
  427. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/llm/base.py +0 -0
  428. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/llm/custom.py +0 -0
  429. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/llm/ollama.py +0 -0
  430. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
  431. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/llm/registry.py +0 -0
  432. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/local_image_provider.py +0 -0
  433. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/local_llm_provider.py +0 -0
  434. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/providers/tool_messages.py +0 -0
  435. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/realty_data_tools.py +0 -0
  436. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/relay_store.py +0 -0
  437. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/report_exporters.py +0 -0
  438. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/report_generator.py +0 -0
  439. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/review_service.py +0 -0
  440. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/acceptance.py +0 -0
  441. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/approval.py +0 -0
  442. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/budget.py +0 -0
  443. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/checkpoints.py +0 -0
  444. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/crash_report.py +0 -0
  445. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/events.py +0 -0
  446. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/lsp.py +0 -0
  447. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/orchestrator.py +0 -0
  448. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/processes.py +0 -0
  449. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/repo_map.py +0 -0
  450. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/run_state.py +0 -0
  451. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/run_store.py +0 -0
  452. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/self_healing.py +0 -0
  453. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/subagent.py +0 -0
  454. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/task_ledger.py +0 -0
  455. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
  456. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/tool_executor.py +0 -0
  457. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/tool_policy.py +0 -0
  458. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/windows_job.py +0 -0
  459. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runtime/worktrees.py +0 -0
  460. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/runway_video_client.py +0 -0
  461. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/safety/client_isolation.py +0 -0
  462. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/safety/permissions.py +0 -0
  463. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/safety/sandbox.py +0 -0
  464. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/safety/service.py +0 -0
  465. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/setup_wizard.py +0 -0
  466. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/spreadsheet_tools.py +0 -0
  467. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/strategy_vault.py +0 -0
  468. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/__init__.py +0 -0
  469. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/artifact_tools.py +0 -0
  470. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/broker_tools.py +0 -0
  471. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/build_quant_engine.py +0 -0
  472. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/code_audit_tools.py +0 -0
  473. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/computer_use_tools.py +0 -0
  474. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
  475. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
  476. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/extended_tools.py +0 -0
  477. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
  478. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/image_gen_tools.py +0 -0
  479. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/local_finance_tools.py +0 -0
  480. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/logistics_carriers.py +0 -0
  481. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/logistics_inventory.py +0 -0
  482. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/logistics_io.py +0 -0
  483. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/logistics_tenancy.py +0 -0
  484. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/logistics_tools.py +0 -0
  485. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/macro_tools.py +0 -0
  486. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/notification_tools.py +0 -0
  487. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/project_tools.py +0 -0
  488. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/realty_data_tools.py +0 -0
  489. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
  490. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/tools/stripe_tools.py +0 -0
  491. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/training/__init__.py +0 -0
  492. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/training/compare.py +0 -0
  493. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/training/sft_dataset.py +0 -0
  494. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/__init__.py +0 -0
  495. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/banner.py +0 -0
  496. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/completer.py +0 -0
  497. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/console.py +0 -0
  498. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/input_box.py +0 -0
  499. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/mentions.py +0 -0
  500. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/picker.py +0 -0
  501. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/render/__init__.py +0 -0
  502. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/render/finance.py +0 -0
  503. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/render/market.py +0 -0
  504. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/render/responsive.py +0 -0
  505. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/render/team.py +0 -0
  506. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/robot.py +0 -0
  507. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/ui/startup_dashboard.py +0 -0
  508. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/utils/vscode_uri.py +0 -0
  509. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/video_analysis.py +0 -0
  510. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/video_editor.py +0 -0
  511. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/workspace/__init__.py +0 -0
  512. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/workspace/files.py +0 -0
  513. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/workspace/verify.py +0 -0
  514. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/workspace_changes.py +0 -0
  515. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/workspace_context.py +0 -0
  516. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/workspace_service.py +0 -0
  517. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code/workspace_tools.py +0 -0
  518. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
  519. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code.egg-info/entry_points.txt +0 -0
  520. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code.egg-info/requires.txt +0 -0
  521. {aria_code-0.119.0 → aria_code-0.120.0}/src/aria_code.egg-info/top_level.txt +0 -0
  522. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_adk_market_tools.py +0 -0
  523. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_agent_key_points_language.py +0 -0
  524. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_agent_team_fallback.py +0 -0
  525. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_analyze_file_tool.py +0 -0
  526. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_architecture_ledger_is_true.py +0 -0
  527. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_architecture_report.py +0 -0
  528. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_aria_cli_core.py +0 -0
  529. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_aria_mcp_server.py +0 -0
  530. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_aria_sdk.py +0 -0
  531. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_artifact_publishing.py +0 -0
  532. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_artifacts_and_reports.py +0 -0
  533. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ashare_prediction_cmds.py +0 -0
  534. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_background_processes.py +0 -0
  535. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_backtest_cmds.py +0 -0
  536. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_backtest_engine.py +0 -0
  537. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_backtest_report.py +0 -0
  538. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_backtest_runs_what_it_names.py +0 -0
  539. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_binary_bundles_runtime_imports.py +0 -0
  540. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_broken_akshare_is_optional.py +0 -0
  541. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_broker_automation.py +0 -0
  542. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_broker_chat_confirm_gate.py +0 -0
  543. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_broker_planning.py +0 -0
  544. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_broker_safety.py +0 -0
  545. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_broker_tools.py +0 -0
  546. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_budget.py +0 -0
  547. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_business_workflow_cmds.py +0 -0
  548. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_callback_provider_cleanup.py +0 -0
  549. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_canva_client.py +0 -0
  550. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_canvas_cmds.py +0 -0
  551. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_card_approvals.py +0 -0
  552. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_channel_intake.py +0 -0
  553. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_channels.py +0 -0
  554. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_chart_handlers.py +0 -0
  555. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_chat_bots_fail_closed.py +0 -0
  556. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_chat_routing.py +0 -0
  557. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ci_security_workflow.py +0 -0
  558. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_cli_app_split.py +0 -0
  559. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_cli_bootstrap.py +0 -0
  560. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_cli_config_store.py +0 -0
  561. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_cli_lifecycle_hooks.py +0 -0
  562. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_cli_runtime_consumer.py +0 -0
  563. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_cli_tool_executor_module.py +0 -0
  564. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_cli_updater.py +0 -0
  565. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_client_isolation_guard.py +0 -0
  566. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_cloud_memory.py +0 -0
  567. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_code_audit_tools.py +0 -0
  568. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_code_review_agent.py +0 -0
  569. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_codegen_output.py +0 -0
  570. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_coder_tester_self_healing.py +0 -0
  571. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_coder_tool_safety.py +0 -0
  572. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_collaboration.py +0 -0
  573. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_command_loggers.py +0 -0
  574. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_command_safety.py +0 -0
  575. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_compare_strategies.py +0 -0
  576. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_completions_builder.py +0 -0
  577. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_config_paths.py +0 -0
  578. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_configured_provider.py +0 -0
  579. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_container_entrypoint.py +0 -0
  580. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_container_entrypoints.py +0 -0
  581. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_context_checkpoints.py +0 -0
  582. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_context_references.py +0 -0
  583. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_context_service.py +0 -0
  584. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_conversation_core.py +0 -0
  585. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_crash_report.py +0 -0
  586. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_credential_file_permissions.py +0 -0
  587. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_custom_providers.py +0 -0
  588. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_daemon_gateway_config.py +0 -0
  589. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_dashboard_generator.py +0 -0
  590. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_data_service.py +0 -0
  591. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_data_service_imports.py +0 -0
  592. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_data_without_model.py +0 -0
  593. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_datasource_routing.py +0 -0
  594. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_deep_analysis.py +0 -0
  595. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_degrades_without_quant_engine.py +0 -0
  596. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_dispatcher_pins_match_the_release.py +0 -0
  597. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_doctor.py +0 -0
  598. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_doctor_describes_the_current_install.py +0 -0
  599. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_doctor_npm_scope.py +0 -0
  600. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_doctor_sandbox.py +0 -0
  601. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_edit_and_command_safety.py +0 -0
  602. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_engine_boundary.py +0 -0
  603. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_english_output_group.py +0 -0
  604. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_enterprise_tool_honesty.py +0 -0
  605. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_env_switch_docs.py +0 -0
  606. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_eval_hard_suite.py +0 -0
  607. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_eval_holdout.py +0 -0
  608. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_eval_summary.py +0 -0
  609. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_eval_task_bank.py +0 -0
  610. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_eval_trajectories.py +0 -0
  611. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_evals_harness.py +0 -0
  612. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_event_import_roots.py +0 -0
  613. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_exec_events.py +0 -0
  614. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_extended_tools.py +0 -0
  615. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_feishu_swarm_config.py +0 -0
  616. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_file_links.py +0 -0
  617. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_finalize_release.py +0 -0
  618. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_finance_renderers.py +0 -0
  619. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_finance_service_catalog.py +0 -0
  620. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_first_run_output.py +0 -0
  621. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_first_run_works.py +0 -0
  622. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_football_agent.py +0 -0
  623. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_football_prediction_output.py +0 -0
  624. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_gemini_retirement.py +0 -0
  625. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_google_cloud_models.py +0 -0
  626. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_google_cloud_routing.py +0 -0
  627. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_google_login.py +0 -0
  628. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_google_search_provider.py +0 -0
  629. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_headless_command_approval.py +0 -0
  630. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_headless_is_agentic.py +0 -0
  631. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_honest_surfaces.py +0 -0
  632. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_image_gen_tools.py +0 -0
  633. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_image_inputs.py +0 -0
  634. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_import_graph_budget.py +0 -0
  635. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_intent_router.py +0 -0
  636. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_intent_signals.py +0 -0
  637. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_kling_video_client.py +0 -0
  638. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_lazy_rebind.py +0 -0
  639. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_legacy_module_imports.py +0 -0
  640. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_license_consistency.py +0 -0
  641. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_licensing.py +0 -0
  642. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_linux_sandbox_integration.py +0 -0
  643. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_local_image_provider.py +0 -0
  644. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_local_workspace_execution.py +0 -0
  645. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_logistics_3pl.py +0 -0
  646. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_logistics_and_finance_agents.py +0 -0
  647. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_lsp.py +0 -0
  648. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_markdown_pdf.py +0 -0
  649. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_market_answers_in_english.py +0 -0
  650. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_market_data_client.py +0 -0
  651. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_market_history_inheritance.py +0 -0
  652. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_market_history_tool.py +0 -0
  653. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_market_hours.py +0 -0
  654. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_market_questions_on_backend.py +0 -0
  655. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_market_symbol_extraction.py +0 -0
  656. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_market_universe.py +0 -0
  657. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_mcp_circuit.py +0 -0
  658. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_mcp_client.py +0 -0
  659. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_mentions.py +0 -0
  660. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_model_capability_registry.py +0 -0
  661. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_model_choice_is_the_users.py +0 -0
  662. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_model_probe.py +0 -0
  663. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_model_selection_state.py +0 -0
  664. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_narrow_chinese_output.py +0 -0
  665. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_native_binary_entrypoints.py +0 -0
  666. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_native_installer.py +0 -0
  667. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_natural_language_routing.py +0 -0
  668. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_new_modules.py +0 -0
  669. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
  670. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_no_tools_route.py +0 -0
  671. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_no_uncommitted_imports.py +0 -0
  672. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_numeric_listings.py +0 -0
  673. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ollama_stream_imports.py +0 -0
  674. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ollama_stream_tools.py +0 -0
  675. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_openai_image_client.py +0 -0
  676. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_operations_suite.py +0 -0
  677. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_os_sandbox.py +0 -0
  678. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_output_discipline_prompt.py +0 -0
  679. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_output_rendering.py +0 -0
  680. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_packages_facade.py +0 -0
  681. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_packaging_constraints.py +0 -0
  682. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_packaging_manifest.py +0 -0
  683. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_packs_domains.py +0 -0
  684. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_pdf_report.py +0 -0
  685. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_pick_best_installed_model.py +0 -0
  686. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_plan_mode.py +0 -0
  687. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_platform_package_assembly.py +0 -0
  688. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_platform_packages.py +0 -0
  689. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_platform_publish.py +0 -0
  690. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_plotly_html_output.py +0 -0
  691. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_portfolio_language.py +0 -0
  692. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_portfolio_ledger.py +0 -0
  693. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_post_turn_context_decision.py +0 -0
  694. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_preflight.py +0 -0
  695. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_preview_server.py +0 -0
  696. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_privacy_feedback.py +0 -0
  697. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_project_aria.py +0 -0
  698. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_project_context_files.py +0 -0
  699. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_project_review.py +0 -0
  700. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_project_review_api.py +0 -0
  701. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_prompt_assembly.py +0 -0
  702. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_prompt_dates.py +0 -0
  703. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_prompt_selection.py +0 -0
  704. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_provider_autoconfig.py +0 -0
  705. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_provider_error_classification.py +0 -0
  706. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_provider_error_messages.py +0 -0
  707. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_provider_integration.py +0 -0
  708. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_provider_registry.py +0 -0
  709. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_public_service_status.py +0 -0
  710. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_quant_engine_namespace.py +0 -0
  711. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_rebind_contract.py +0 -0
  712. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_rebind_namespace_contract.py +0 -0
  713. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_relay_client_credentials.py +0 -0
  714. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_relay_event_verification.py +0 -0
  715. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_relay_sends_for_clients.py +0 -0
  716. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_relay_store.py +0 -0
  717. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_relay_url.py +0 -0
  718. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_release_badges.py +0 -0
  719. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_release_chain.py +0 -0
  720. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_release_commit_identity.py +0 -0
  721. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_release_download.py +0 -0
  722. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_release_push_is_atomic.py +0 -0
  723. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_release_reaches_the_registries.py +0 -0
  724. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_release_verification_waits.py +0 -0
  725. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_release_workflow_permissions.py +0 -0
  726. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_report_charts.py +0 -0
  727. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_report_generator.py +0 -0
  728. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_report_prompt_language.py +0 -0
  729. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_research_protocol.py +0 -0
  730. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_research_quality.py +0 -0
  731. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_responsive_rendering.py +0 -0
  732. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_review_service.py +0 -0
  733. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_risk_earnings_ops.py +0 -0
  734. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_robot_artwork.py +0 -0
  735. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_root_module_budget.py +0 -0
  736. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_rsi_without_pandas_ta.py +0 -0
  737. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_acceptance.py +0 -0
  738. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_agent_loop.py +0 -0
  739. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_approval.py +0 -0
  740. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_bridge.py +0 -0
  741. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_bridge_fallback.py +0 -0
  742. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_checkpoints.py +0 -0
  743. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_event_identity.py +0 -0
  744. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_gateway.py +0 -0
  745. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_repo_map.py +0 -0
  746. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_run_store.py +0 -0
  747. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_tool_executor.py +0 -0
  748. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runtime_worktrees.py +0 -0
  749. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_runway_video_client.py +0 -0
  750. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_safety_permissions.py +0 -0
  751. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_safety_service.py +0 -0
  752. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_safety_service_adoption.py +0 -0
  753. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_service_diagnostics_security.py +0 -0
  754. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_session_search.py +0 -0
  755. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_settings_service.py +0 -0
  756. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_shell_commands_as_written.py +0 -0
  757. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_shipper_digest.py +0 -0
  758. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_single_import_root.py +0 -0
  759. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_skill_agent_binding.py +0 -0
  760. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_skill_catalog.py +0 -0
  761. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_skill_loader.py +0 -0
  762. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_slash_popup.py +0 -0
  763. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_spreadsheet_tools.py +0 -0
  764. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_sse_http_roundtrip.py +0 -0
  765. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_sse_stream_contract.py +0 -0
  766. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_startup_dashboard.py +0 -0
  767. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_startup_keeps_cloud_model.py +0 -0
  768. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_startup_latency.py +0 -0
  769. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_status_language.py +0 -0
  770. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_streaming_pipeline.py +0 -0
  771. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_stripe_agent.py +0 -0
  772. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_subagent.py +0 -0
  773. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_supervisor_routing.py +0 -0
  774. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_system_prompts.py +0 -0
  775. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_system_tools_output.py +0 -0
  776. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_task_orchestrator.py +0 -0
  777. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_task_restore_startup.py +0 -0
  778. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_team_analysts.py +0 -0
  779. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_team_synthesis.py +0 -0
  780. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_terminal_mixins.py +0 -0
  781. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_terminal_snapshots.py +0 -0
  782. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_tls_trust_store.py +0 -0
  783. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_tool_policy.py +0 -0
  784. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_tool_rounds_on_openai_apis.py +0 -0
  785. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_tool_scope.py +0 -0
  786. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_tool_step_output.py +0 -0
  787. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_trading_service.py +0 -0
  788. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_tradingview_bridge.py +0 -0
  789. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_training_pipeline.py +0 -0
  790. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_turn_planning.py +0 -0
  791. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ui_completer_references.py +0 -0
  792. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ui_console_theme.py +0 -0
  793. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ui_input_box.py +0 -0
  794. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ui_language_and_model.py +0 -0
  795. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_ui_robot_banner.py +0 -0
  796. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_update_health_routes.py +0 -0
  797. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_verification_hint.py +0 -0
  798. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_verification_policy.py +0 -0
  799. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_verification_runner_selection.py +0 -0
  800. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_version_consistency.py +0 -0
  801. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_version_counter.py +0 -0
  802. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_vertex_busy_retry.py +0 -0
  803. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_vertex_empty_rounds.py +0 -0
  804. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_vertex_models.py +0 -0
  805. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_vertexai_tool_history.py +0 -0
  806. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_video_analysis.py +0 -0
  807. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_video_editor.py +0 -0
  808. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_vscode_mcp.py +0 -0
  809. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_warehouse_agents.py +0 -0
  810. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_warehouse_cli_registration.py +0 -0
  811. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_warehouse_erp_client.py +0 -0
  812. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_warehouse_workflow.py +0 -0
  813. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_wheel_is_installable.py +0 -0
  814. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_workspace_changes.py +0 -0
  815. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_workspace_context.py +0 -0
  816. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_workspace_files.py +0 -0
  817. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_workspace_scope.py +0 -0
  818. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_workspace_service.py +0 -0
  819. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_workspace_verify.py +0 -0
  820. {aria_code-0.119.0 → aria_code-0.120.0}/tests/test_wrapped_indent.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.119.0
3
+ Version: 0.120.0
4
4
  Summary: Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/artheras/aria-code
@@ -172,7 +172,7 @@ Numbers you can check, client data kept apart, actions a person approves.</p>
172
172
  <p align="center">
173
173
  <a href="https://www.npmjs.com/package/@artheras/aria-code"><img src="https://img.shields.io/npm/v/@artheras/aria-code/latest?style=flat-square&logo=npm&label=npm" alt="npm version"></a>
174
174
  <!-- Release automation pins PyPI: the default endpoint still selects legacy 4.x. -->
175
- <a href="https://pypi.org/project/aria-code/0.119.0/"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Faria-code%2F0.119.0%2Fjson&amp;query=%24.info.version&amp;prefix=v&amp;style=flat-square&amp;logo=pypi&amp;label=PyPI&amp;color=blue&amp;cacheSeconds=300" alt="PyPI version"></a>
175
+ <a href="https://pypi.org/project/aria-code/0.120.0/"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Faria-code%2F0.120.0%2Fjson&amp;query=%24.info.version&amp;prefix=v&amp;style=flat-square&amp;logo=pypi&amp;label=PyPI&amp;color=blue&amp;cacheSeconds=300" alt="PyPI version"></a>
176
176
  <a href="https://github.com/artheras/aria-code/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/artheras/aria-code/ci.yml?branch=main&style=flat-square&logo=githubactions&label=CI" alt="CI status"></a>
177
177
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-64748b?style=flat-square" alt="Apache License 2.0"></a>
178
178
  </p>
@@ -15,7 +15,7 @@ Numbers you can check, client data kept apart, actions a person approves.</p>
15
15
  <p align="center">
16
16
  <a href="https://www.npmjs.com/package/@artheras/aria-code"><img src="https://img.shields.io/npm/v/@artheras/aria-code/latest?style=flat-square&logo=npm&label=npm" alt="npm version"></a>
17
17
  <!-- Release automation pins PyPI: the default endpoint still selects legacy 4.x. -->
18
- <a href="https://pypi.org/project/aria-code/0.119.0/"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Faria-code%2F0.119.0%2Fjson&amp;query=%24.info.version&amp;prefix=v&amp;style=flat-square&amp;logo=pypi&amp;label=PyPI&amp;color=blue&amp;cacheSeconds=300" alt="PyPI version"></a>
18
+ <a href="https://pypi.org/project/aria-code/0.120.0/"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fpypi.org%2Fpypi%2Faria-code%2F0.120.0%2Fjson&amp;query=%24.info.version&amp;prefix=v&amp;style=flat-square&amp;logo=pypi&amp;label=PyPI&amp;color=blue&amp;cacheSeconds=300" alt="PyPI version"></a>
19
19
  <a href="https://github.com/artheras/aria-code/actions/workflows/ci.yml"><img src="https://img.shields.io/github/actions/workflow/status/artheras/aria-code/ci.yml?branch=main&style=flat-square&logo=githubactions&label=CI" alt="CI status"></a>
20
20
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-Apache%202.0-64748b?style=flat-square" alt="Apache License 2.0"></a>
21
21
  </p>
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "aria-code"
7
- version = "0.119.0"
7
+ version = "0.120.0"
8
8
  description = "Open-source AI agent for coding, financial analysis and logistics operations: numbers you can check, client data kept apart, actions a person approves"
9
9
  readme = "README.md"
10
10
  license = { text = "Apache-2.0" }
@@ -17,4 +17,4 @@ from __future__ import annotations
17
17
 
18
18
  __all__ = ["__version__"]
19
19
 
20
- __version__ = "0.119.0"
20
+ __version__ = "0.120.0"
@@ -693,6 +693,10 @@ class ChatTurnMixin:
693
693
  "error": getattr(_rt_turn, "error", None) or getattr(_rt_final, "error", ""),
694
694
  "stop_reason": getattr(_rt_final, "stop_reason", "completed"),
695
695
  "acceptance": getattr(_rt_final, "acceptance", None),
696
+ "delivery": getattr(_rt_final, "delivery", None),
697
+ # Captured now: the run id is cleared when the run is marked done,
698
+ # before the report that names it for /rewind is printed.
699
+ "run_id": self._active_run_id,
696
700
  "provider": _rt_provider,
697
701
  "cancelled": False,
698
702
  "usage": {
@@ -1026,6 +1030,21 @@ class ChatTurnMixin:
1026
1030
  for _sym in _ml_signal_syms:
1027
1031
  self._record_prediction(_sym, final_text)
1028
1032
 
1033
+ # The runtime's delivery report: what changed, what was verified,
1034
+ # risk, checkpoints — from evidence, not from the model's summary.
1035
+ _delivery = result.get("delivery") if isinstance(result, dict) else None
1036
+ if _delivery and self.config.get("delivery_report", True):
1037
+ try:
1038
+ from ui.render.output import print_delivery_report
1039
+ print_delivery_report(
1040
+ console if HAS_RICH else None,
1041
+ _delivery,
1042
+ run_id=str(result.get("run_id") or ""),
1043
+ root=os.getcwd(),
1044
+ )
1045
+ except Exception as _delivery_err:
1046
+ logger.debug("delivery report not shown: %s", _delivery_err)
1047
+
1029
1048
  # Metadata line — detailed stats
1030
1049
  metadata = turn_result.metadata
1031
1050
  prompt_t = metadata.prompt_tokens
@@ -212,6 +212,8 @@ class HeadlessMixin:
212
212
  "provider": getattr(_turn.final, "provider", ""),
213
213
  "tools_used": _tools_used,
214
214
  "acceptance": getattr(_turn.final, "acceptance", None),
215
+ "delivery": getattr(_turn.final, "delivery", None),
216
+ "contract": getattr(_turn.final, "contract", None),
215
217
  "stop_reason": getattr(_turn.final, "stop_reason", "") or _turn.error or "completed",
216
218
  }
217
219
  finally:
@@ -85,6 +85,16 @@ def _declared_acceptance_commands(cfg: dict, message: str) -> tuple:
85
85
  return tuple(commands)
86
86
 
87
87
 
88
+ def _workspace_root(cfg: dict, executor=None) -> str:
89
+ """Where this turn's tools act: the executor's workspace if it names one."""
90
+ import os
91
+
92
+ root = cfg.get("_session_workspace_root") or cfg.get("workspace_root") or os.getcwd()
93
+ if getattr(executor, "execution_context", None) is not None:
94
+ root = dict(executor.execution_context() or {}).get("_workspace") or root
95
+ return str(root)
96
+
97
+
88
98
  def build_acceptance_gate(executor, config: Optional[dict] = None, message: str = ""):
89
99
  """The CLI's acceptance gate, or ``None`` when this session shouldn't have one.
90
100
 
@@ -108,14 +118,11 @@ def build_acceptance_gate(executor, config: Optional[dict] = None, message: str
108
118
  if "run_command" not in getattr(executor, "local_tools", {}):
109
119
  return None
110
120
 
111
- import os
112
121
  from aria_code.runtime.acceptance import AcceptanceGate
113
122
  from aria_code.runtime.approval import ApprovalDecision
114
123
 
115
124
  timeout = int(cfg.get("acceptance_timeout", 300) or 300)
116
- root = cfg.get("_session_workspace_root") or cfg.get("workspace_root") or os.getcwd()
117
- if getattr(executor, "execution_context", None) is not None:
118
- root = dict(executor.execution_context() or {}).get("_workspace") or root
125
+ root = _workspace_root(cfg, executor)
119
126
 
120
127
  def _runner(command: str) -> dict:
121
128
  return executor.execute_local("run_command", {
@@ -132,6 +139,25 @@ def build_acceptance_gate(executor, config: Optional[dict] = None, message: str
132
139
  )
133
140
 
134
141
 
142
+ def build_change_contract(config: Optional[dict] = None, message: str = "", executor=None):
143
+ """The project's change contract with this request as its goal, or None.
144
+
145
+ Declared in ``.aria/policy.yaml`` under the workspace root. A file that
146
+ cannot be read yields a fail-closed contract rather than none — see
147
+ ``ChangeContract.fail_closed``.
148
+ """
149
+ from aria_code.runtime.contract import ChangeContract, ContractError
150
+
151
+ root = _workspace_root(config or {}, executor)
152
+ try:
153
+ contract = ChangeContract.load(root)
154
+ except ContractError as exc:
155
+ contract = ChangeContract.fail_closed(root, str(exc))
156
+ except Exception as exc: # unreadable file, missing yaml, …: still fail closed
157
+ contract = ChangeContract.fail_closed(root, f"{type(exc).__name__}: {exc}")
158
+ return contract.with_goal(message) if contract is not None else None
159
+
160
+
135
161
  async def run_with_fallback(
136
162
  route: str,
137
163
  *,
@@ -354,6 +380,7 @@ async def run_chat_via_runtime(
354
380
  )
355
381
  executor = build_tool_executor(local_tools, config, execution_context)
356
382
  gate = build_acceptance_gate(executor, config, prompt)
383
+ contract = build_change_contract(config, prompt, executor)
357
384
 
358
385
  result = await run_turn(
359
386
  prompt, history,
@@ -369,5 +396,6 @@ async def run_chat_via_runtime(
369
396
  grounding_tools=grounding_tools,
370
397
  evidence_already_grounded=evidence_already_grounded,
371
398
  acceptance=gate,
399
+ contract=contract,
372
400
  )
373
401
  return result if return_result else result.text
@@ -33,6 +33,7 @@ from .agent_loop import (
33
33
  run_serial_tool,
34
34
  split_tool_calls,
35
35
  )
36
+ from .contract import ChangeContract, ContractError, ContractVerdict
36
37
  from .acceptance import (
37
38
  AcceptanceGate,
38
39
  AcceptanceReport,
@@ -90,6 +91,9 @@ __all__ = [
90
91
  "Symbol",
91
92
  "extract_symbols",
92
93
  "AcceptanceGate",
94
+ "ChangeContract",
95
+ "ContractError",
96
+ "ContractVerdict",
93
97
  "AcceptanceReport",
94
98
  "CheckResult",
95
99
  "DEFAULT_MUTATING_TOOLS",
@@ -12,12 +12,16 @@ import inspect
12
12
  import re
13
13
  import time
14
14
  from dataclasses import dataclass, field
15
- from typing import AsyncGenerator, Awaitable, Callable, Dict, FrozenSet, Iterable, List, Optional, Sequence, Tuple, Union
15
+ from typing import TYPE_CHECKING, AsyncGenerator, Awaitable, Callable, Dict, FrozenSet, Iterable, List, Optional, Sequence, Tuple, Union
16
16
 
17
17
  from .acceptance import AcceptanceGate
18
18
  from .approval import ApprovalDecision, apply_approval_decision
19
19
  from .tool_executor import ToolExecutor
20
20
  from .budget import BudgetTracker
21
+ from .delivery import DeliveryLedger
22
+
23
+ if TYPE_CHECKING:
24
+ from .contract import ChangeContract
21
25
 
22
26
 
23
27
  DEFAULT_SERIAL_TOOLS = {"write_file", "edit_file", "multi_edit", "run_command", "process"}
@@ -356,6 +360,8 @@ class AgentTurnState:
356
360
  error: str = "",
357
361
  acceptance: Optional[dict] = None,
358
362
  stop_reason: str = "completed",
363
+ contract: Optional[dict] = None,
364
+ delivery: Optional[dict] = None,
359
365
  ) -> "AgentTurnResult":
360
366
  metadata = self.build_metadata(
361
367
  elapsed=elapsed,
@@ -373,6 +379,8 @@ class AgentTurnState:
373
379
  sources=list(self.sources),
374
380
  acceptance=acceptance,
375
381
  stop_reason=stop_reason,
382
+ contract=contract,
383
+ delivery=delivery,
376
384
  )
377
385
 
378
386
  def build_cancelled_result(
@@ -447,6 +455,13 @@ class AgentTurnResult:
447
455
  # 有值时 ``acceptance["verified"]`` 才是「做完了」这句话的凭据。
448
456
  acceptance: Optional[dict] = None
449
457
  stop_reason: str = "completed"
458
+ # The change contract this turn ran under and what it refused, or None
459
+ # when no contract applied.
460
+ contract: Optional[dict] = None
461
+ # The runtime's account of the turn (runtime/delivery.py): what changed,
462
+ # what was verified, the risk, checkpoints. None when nothing happened
463
+ # worth reporting.
464
+ delivery: Optional[dict] = None
450
465
 
451
466
  @classmethod
452
467
  def cancelled_result(
@@ -918,6 +933,7 @@ async def execute_tool_turn(
918
933
  approval_applier: Callable[[dict, ApprovalDecision], dict] = apply_approval_decision,
919
934
  loop_guard: LoopGuard | None = None,
920
935
  serial_tools: Iterable[str] = DEFAULT_SERIAL_TOOLS,
936
+ contract: "ChangeContract | None" = None,
921
937
  ) -> ToolExecutionTurnResult:
922
938
  """Execute one model-requested tool batch and prepare the next turn.
923
939
 
@@ -944,13 +960,25 @@ async def execute_tool_turn(
944
960
  }
945
961
  for tool_call in pending
946
962
  ]
947
- parallel_done = await run_parallel_tools(
948
- pending,
963
+ # The contract is checked before anything runs — parallel-safe calls run
964
+ # first, all at once — and a refused call never reaches the executor: its
965
+ # refusal stands in for its result, so the model learns which rule held.
966
+ refused: Dict[int, dict] = {}
967
+ if contract is not None:
968
+ for index, tool_call in enumerate(pending):
969
+ verdict = contract.check(str(tool_call.get("tool", "")), tool_call.get("params", {}) or {})
970
+ if not verdict.allowed:
971
+ refused[index] = verdict.as_tool_result(str(tool_call.get("tool", "")))
972
+ runnable_indices = [index for index in range(len(pending)) if index not in refused]
973
+ ran_in_parallel = await run_parallel_tools(
974
+ [pending[index] for index in runnable_indices],
949
975
  tool_executor,
950
976
  remote_runner=remote_runner,
951
977
  hook=hook,
952
978
  serial_tools=serial_tools,
953
979
  )
980
+ parallel_done = {runnable_indices[i]: result for i, result in ran_in_parallel.items()}
981
+ parallel_done.update(refused)
954
982
  tool_turn = ToolTurnPlan(pending=pending, parallel_done=parallel_done)
955
983
  tool_batch = tool_turn.batch
956
984
  activities: List[ToolExecutionActivity] = []
@@ -1319,6 +1347,10 @@ class AgentOptions:
1319
1347
  # 只要本轮真的改写了磁盘上的文件,模型宣称完成时循环会先跑一遍推断出的
1320
1348
  # 检查命令;红了就把失败输出回灌给模型继续修,绿了才让这一轮结束。
1321
1349
  acceptance: Optional["AcceptanceGate"] = None
1350
+ # Change contract. None = no task bounds beyond the permission mode. With
1351
+ # one, the model is shown it before the first round and the runtime
1352
+ # refuses every tool call that breaks it (see runtime/contract.py).
1353
+ contract: Optional["ChangeContract"] = None
1322
1354
 
1323
1355
 
1324
1356
  # ── run_agent() ───────────────────────────────────────────────────────────────
@@ -1392,6 +1424,12 @@ async def run_agent(
1392
1424
  f"Grounding tools: {available_grounding_tools}\n\n"
1393
1425
  f"[User request]\n{prompt}"
1394
1426
  )
1427
+ if opts.contract is not None:
1428
+ request = current_message if opts.requires_evidence else f"[User request]\n{prompt}"
1429
+ current_message = f"{opts.contract.prompt_block()}\n\n{request}"
1430
+ contract_refusals: List[dict] = []
1431
+ ledger = DeliveryLedger(root=str(
1432
+ getattr(opts.acceptance, "root", None) or getattr(opts.contract, "root", None) or "") or None)
1395
1433
  token_count = 0
1396
1434
  thinking_tokens = 0
1397
1435
  result: dict = {}
@@ -1575,10 +1613,19 @@ async def run_agent(
1575
1613
  confirm_tools=opts.confirm_tools,
1576
1614
  approval_callback=opts.approval_callback,
1577
1615
  approval_applier=opts.approval_applier or apply_approval_decision,
1616
+ contract=opts.contract,
1578
1617
  )
1579
1618
 
1580
1619
  for activity in tool_turn_result.activities:
1581
1620
  turn_state.tools_used.append(activity.tool)
1621
+ ledger.record(activity.tool, activity.params, activity.result)
1622
+ refusal = (activity.result or {}).get("contract_violation")
1623
+ if refusal:
1624
+ contract_refusals.append(dict(refusal))
1625
+ yield AgentEventStatus(
1626
+ state="contract_blocked",
1627
+ message=f"{activity.tool} refused by the change contract: {refusal.get('reason', '')}",
1628
+ )
1582
1629
  if opts.acceptance is not None:
1583
1630
  opts.acceptance.record_tool(activity.tool, activity.result)
1584
1631
  canonical_tool = str(activity.tool).rsplit("__", 1)[-1]
@@ -1641,6 +1688,16 @@ async def run_agent(
1641
1688
  )
1642
1689
  if stop_reason == "completed" and acceptance_summary and acceptance_summary.get("verified") is False:
1643
1690
  stop_reason = "checks_failed"
1691
+ contract_summary = (
1692
+ {
1693
+ "goal": opts.contract.goal,
1694
+ "source": opts.contract.source,
1695
+ "text": opts.contract.render(),
1696
+ "refused": contract_refusals,
1697
+ }
1698
+ if opts.contract is not None else None
1699
+ )
1700
+ delivery = ledger.report(acceptance=acceptance_summary, contract=contract_summary, stop_reason=stop_reason)
1644
1701
  turn_result = turn_state.build_result(
1645
1702
  elapsed=elapsed,
1646
1703
  success=stop_reason == "completed",
@@ -1650,5 +1707,7 @@ async def run_agent(
1650
1707
  token_count=token_count,
1651
1708
  thinking_tokens=thinking_tokens,
1652
1709
  acceptance=acceptance_summary,
1710
+ contract=contract_summary,
1711
+ delivery=delivery.as_dict() if delivery.worth_showing else None,
1653
1712
  )
1654
1713
  yield AgentEventComplete(result=turn_result)
@@ -0,0 +1,282 @@
1
+ """Change contracts — the bounds a coding task runs inside.
2
+
3
+ Permission modes say what the agent may do anywhere: read only, write the
4
+ workspace, or anything. A task needs narrower bounds than that, and different
5
+ ones per project: "fix the auth refresh bug" has no business touching billing,
6
+ running a migration or pushing to main, even under workspace-write. Telling the
7
+ model so in the prompt is a request; this module makes it a rule the runtime
8
+ enforces on every tool call, before the call runs.
9
+
10
+ A contract names:
11
+
12
+ - ``allow`` — path globs the task may change (empty: the whole workspace);
13
+ - ``restrict`` — path globs it must not change, even inside ``allow``;
14
+ - ``forbid`` — capabilities it may not use (``git.push``, ``cloud.deploy``,
15
+ ``database.write`` …; see :data:`aria_code.safety.risk.CAPABILITIES`);
16
+ - ``max_level`` — the highest risk level an action may have (L0–L4);
17
+ - ``success`` — what "done" means, shown to the model and in the report.
18
+
19
+ Projects declare one in ``.aria/policy.yaml`` under ``contract:``. The runtime
20
+ fills in the goal from the request, shows the contract to the model before the
21
+ first round, and refuses any call that breaks it — the call does not run, and
22
+ the model gets the reason as the tool's result so it can stay inside the lines.
23
+
24
+ Reading is never restricted: a contract bounds what a task changes.
25
+ """
26
+
27
+ from __future__ import annotations
28
+
29
+ import os
30
+ import re
31
+ from dataclasses import dataclass, field, replace
32
+ from pathlib import Path
33
+ from typing import Any, Iterable, Mapping, Optional
34
+
35
+ from aria_code.safety.risk import (
36
+ CAPABILITIES,
37
+ LEVEL_NAMES,
38
+ RiskAssessment,
39
+ assess_tool,
40
+ tool_paths,
41
+ )
42
+
43
+ POLICY_FILE = Path(".aria") / "policy.yaml"
44
+
45
+ # Capabilities that change something. A contract's path rules apply to calls
46
+ # that use one of these; reads and verification are never path-restricted.
47
+ _MUTATING = frozenset({
48
+ "filesystem.write", "filesystem.delete", "git.stage", "git.commit", "git.history",
49
+ })
50
+
51
+
52
+ class ContractError(ValueError):
53
+ """A policy file whose contract cannot be enforced as written."""
54
+
55
+
56
+ @dataclass(frozen=True)
57
+ class ContractVerdict:
58
+ allowed: bool
59
+ reason: str = ""
60
+ rule: str = ""
61
+ assessment: Optional[RiskAssessment] = None
62
+
63
+ def as_tool_result(self, tool: str) -> dict:
64
+ """What the model sees instead of the call's output."""
65
+ return {
66
+ "success": False,
67
+ "error": (
68
+ f"Blocked by the change contract ({self.rule}): {self.reason}. "
69
+ "The call was not run. Stay inside the contract, or tell the user "
70
+ "what you need and why."
71
+ ),
72
+ "contract_violation": {
73
+ "tool": tool,
74
+ "rule": self.rule,
75
+ "reason": self.reason,
76
+ "level": self.assessment.level if self.assessment else None,
77
+ },
78
+ }
79
+
80
+
81
+ def _glob_regex(pattern: str) -> re.Pattern:
82
+ """``src/**``, ``**/*.sql``, ``billing/*`` — matched against a POSIX relative path."""
83
+ pattern = pattern.strip()
84
+ while pattern.startswith("./"):
85
+ pattern = pattern[2:]
86
+ if pattern in {"", "."}:
87
+ pattern = "**"
88
+ if pattern.endswith("/"):
89
+ pattern += "**"
90
+ out, i = [], 0
91
+ while i < len(pattern):
92
+ if pattern.startswith("**/", i):
93
+ out.append("(?:.*/)?")
94
+ i += 3
95
+ elif pattern.startswith("**", i):
96
+ out.append(".*")
97
+ i += 2
98
+ elif pattern[i] == "*":
99
+ out.append("[^/]*")
100
+ i += 1
101
+ elif pattern[i] == "?":
102
+ out.append("[^/]")
103
+ i += 1
104
+ else:
105
+ out.append(re.escape(pattern[i]))
106
+ i += 1
107
+ # A directory pattern also covers what is inside it.
108
+ return re.compile("^" + "".join(out) + "(?:/.*)?$")
109
+
110
+
111
+ @dataclass(frozen=True)
112
+ class ChangeContract:
113
+ root: Path
114
+ goal: str = ""
115
+ allow: tuple = ()
116
+ restrict: tuple = ()
117
+ forbid: frozenset = frozenset()
118
+ max_level: int = 4
119
+ success: tuple = ()
120
+ source: str = ""
121
+ _allow_re: tuple = field(default=(), repr=False, compare=False)
122
+ _restrict_re: tuple = field(default=(), repr=False, compare=False)
123
+
124
+ def __post_init__(self) -> None:
125
+ unknown = sorted(set(self.forbid) - CAPABILITIES)
126
+ if unknown:
127
+ raise ContractError(
128
+ f"unknown capabilit{'y' if len(unknown) == 1 else 'ies'} in forbid: {', '.join(unknown)}"
129
+ )
130
+ if not 0 <= int(self.max_level) <= 4:
131
+ raise ContractError(f"max_level must be 0-4, not {self.max_level}")
132
+ object.__setattr__(self, "root", Path(self.root).expanduser())
133
+ object.__setattr__(self, "_allow_re", tuple(_glob_regex(p) for p in self.allow))
134
+ object.__setattr__(self, "_restrict_re", tuple(_glob_regex(p) for p in self.restrict))
135
+
136
+ # ── construction ──────────────────────────────────────────────────────
137
+
138
+ @classmethod
139
+ def from_mapping(cls, data: Mapping[str, Any], root: Path | str, *, source: str = "") -> "ChangeContract":
140
+ def _strings(key: str) -> tuple:
141
+ value = data.get(key) or ()
142
+ if isinstance(value, str):
143
+ value = [value]
144
+ if not isinstance(value, Iterable):
145
+ raise ContractError(f"{key} must be a list")
146
+ return tuple(str(item).strip() for item in value if str(item).strip())
147
+
148
+ try:
149
+ max_level = int(data.get("max_level", 4))
150
+ except (TypeError, ValueError):
151
+ raise ContractError(f"max_level must be 0-4, not {data.get('max_level')!r}") from None
152
+ return cls(
153
+ root=Path(root),
154
+ goal=str(data.get("goal") or "").strip(),
155
+ allow=_strings("allow"),
156
+ restrict=_strings("restrict"),
157
+ forbid=frozenset(_strings("forbid")),
158
+ max_level=max_level,
159
+ success=_strings("success"),
160
+ source=source,
161
+ )
162
+
163
+ @classmethod
164
+ def load(cls, root: Path | str) -> Optional["ChangeContract"]:
165
+ """The project's contract from ``.aria/policy.yaml``, or None if it declares none.
166
+
167
+ A malformed file raises :class:`ContractError`: a contract that fails to
168
+ load must not silently become no contract.
169
+ """
170
+ root = Path(root).expanduser()
171
+ path = root / POLICY_FILE
172
+ if not path.is_file():
173
+ return None
174
+ import yaml
175
+
176
+ try:
177
+ data = yaml.safe_load(path.read_text(encoding="utf-8")) or {}
178
+ except yaml.YAMLError as exc:
179
+ raise ContractError(f"{path}: not valid YAML ({exc})") from None
180
+ if not isinstance(data, Mapping):
181
+ raise ContractError(f"{path}: expected a mapping at the top level")
182
+ section = data.get("contract")
183
+ if section is None:
184
+ return None
185
+ if not isinstance(section, Mapping):
186
+ raise ContractError(f"{path}: 'contract' must be a mapping")
187
+ return cls.from_mapping(section, root, source=str(path))
188
+
189
+ @classmethod
190
+ def fail_closed(cls, root: Path | str, error: str) -> "ChangeContract":
191
+ """The contract to run under when the project's could not be read.
192
+
193
+ A broken policy file means someone meant to bound this project; running
194
+ unbounded would drop exactly the limits they wrote. Reading and
195
+ verification still work, so the model can find and report the problem.
196
+ """
197
+ return cls(root=Path(root), max_level=0, source=f"error: {error}")
198
+
199
+ @property
200
+ def load_error(self) -> str:
201
+ return self.source[len("error: "):] if self.source.startswith("error: ") else ""
202
+
203
+ def with_goal(self, goal: str) -> "ChangeContract":
204
+ line = " ".join(str(goal or "").split())
205
+ return replace(self, goal=line[:200] + ("…" if len(line) > 200 else ""))
206
+
207
+ # ── enforcement ───────────────────────────────────────────────────────
208
+
209
+ def _relative(self, path: str) -> Optional[str]:
210
+ candidate = Path(os.path.expanduser(path))
211
+ if not candidate.is_absolute():
212
+ candidate = self.root / candidate
213
+ try:
214
+ return candidate.resolve().relative_to(self.root.resolve()).as_posix()
215
+ except (ValueError, OSError):
216
+ return None
217
+
218
+ def _check_path(self, path: str) -> Optional[tuple[str, str]]:
219
+ relative = self._relative(path)
220
+ if relative is None:
221
+ return ("outside-workspace", f"{path} is outside the workspace")
222
+ for pattern, regex in zip(self.restrict, self._restrict_re):
223
+ if regex.match(relative):
224
+ return ("restrict", f"{relative} is restricted ({pattern})")
225
+ if self.allow and not any(regex.match(relative) for regex in self._allow_re):
226
+ return ("allow", f"{relative} is outside the allowed paths ({', '.join(self.allow)})")
227
+ return None
228
+
229
+ def check(self, tool: str, params: Mapping[str, Any] | None = None) -> ContractVerdict:
230
+ assessment = assess_tool(tool, params or {}, root=self.root)
231
+ used = assessment.capabilities & self.forbid
232
+ if used:
233
+ return ContractVerdict(False, f"uses {', '.join(sorted(used))}", "forbid", assessment)
234
+ if assessment.level > self.max_level:
235
+ return ContractVerdict(
236
+ False,
237
+ f"{assessment.summary or tool} is L{assessment.level} ({assessment.name}); "
238
+ f"this task allows up to L{self.max_level} ({LEVEL_NAMES[self.max_level]})",
239
+ "max_level",
240
+ assessment,
241
+ )
242
+ if assessment.capabilities & _MUTATING:
243
+ paths = tool_paths(params or {}) if tool != "run_command" else list(assessment.files)
244
+ for path in paths:
245
+ problem = self._check_path(path)
246
+ if problem:
247
+ return ContractVerdict(False, problem[1], problem[0], assessment)
248
+ return ContractVerdict(True, assessment=assessment)
249
+
250
+ # ── presentation ──────────────────────────────────────────────────────
251
+
252
+ def render(self) -> str:
253
+ """The contract as the model and the user read it."""
254
+ lines = ["CHANGE CONTRACT"]
255
+ if self.load_error:
256
+ lines += ["", f"⚠ {POLICY_FILE} could not be read: {self.load_error}",
257
+ " Nothing may be changed until it is fixed; reading and verifying still work."]
258
+ if self.goal:
259
+ lines += ["", "Goal", f" {self.goal}"]
260
+ lines += ["", "Allowed"]
261
+ lines += [f" ✓ modify {p}" for p in self.allow] or [" ✓ modify files in the workspace"]
262
+ restricted = [f" × modify {p}" for p in self.restrict]
263
+ restricted += [f" × {cap}" for cap in sorted(self.forbid)]
264
+ if self.max_level < 4:
265
+ restricted.append(f" × actions above L{self.max_level} ({LEVEL_NAMES[self.max_level]} risk)")
266
+ if restricted:
267
+ lines += ["", "Restricted"] + restricted
268
+ if self.success:
269
+ lines += ["", "Success criteria"] + [f" ✓ {item}" for item in self.success]
270
+ return "\n".join(lines)
271
+
272
+ def prompt_block(self) -> str:
273
+ return (
274
+ "[Change contract]\n"
275
+ "This task runs under the contract below. The runtime refuses any tool call "
276
+ "that breaks it, so plan inside it; if the task cannot be done within it, "
277
+ "stop and say which rule is in the way.\n\n"
278
+ + self.render()
279
+ )
280
+
281
+
282
+ __all__ = ["ChangeContract", "ContractError", "ContractVerdict", "POLICY_FILE"]