aria-code 0.52.0__tar.gz → 0.54.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 (693) hide show
  1. {aria_code-0.52.0 → aria_code-0.54.0}/PKG-INFO +1 -1
  2. {aria_code-0.52.0 → aria_code-0.54.0}/pyproject.toml +1 -1
  3. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/_version.py +1 -1
  4. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/channels/intake.py +6 -6
  5. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/runtime_bridge.py +17 -0
  6. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code.egg-info/PKG-INFO +1 -1
  7. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code.egg-info/SOURCES.txt +1 -0
  8. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_dispatcher_pins_match_the_release.py +3 -1
  9. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_doctor_describes_the_current_install.py +5 -3
  10. aria_code-0.54.0/tests/test_lazy_rebind.py +112 -0
  11. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_platform_package_assembly.py +41 -21
  12. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_platform_packages.py +13 -13
  13. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_release_chain.py +39 -0
  14. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_release_reaches_the_registries.py +12 -10
  15. {aria_code-0.52.0 → aria_code-0.54.0}/LICENSE +0 -0
  16. {aria_code-0.52.0 → aria_code-0.54.0}/NOTICE +0 -0
  17. {aria_code-0.52.0 → aria_code-0.54.0}/README.md +0 -0
  18. {aria_code-0.52.0 → aria_code-0.54.0}/setup.cfg +0 -0
  19. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/__init__.py +0 -0
  20. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/adk_apps/__init__.py +0 -0
  21. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/adk_apps/aria_code_review/__init__.py +0 -0
  22. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/adk_apps/aria_code_review/agent.py +0 -0
  23. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/adk_apps/aria_research/__init__.py +0 -0
  24. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/adk_apps/aria_research/agent.py +0 -0
  25. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/__init__.py +0 -0
  26. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/base.py +0 -0
  27. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/code_review.py +0 -0
  28. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/__init__.py +0 -0
  29. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/calibration_loop.py +0 -0
  30. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/critic.py +0 -0
  31. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/deepen.py +0 -0
  32. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/models.py +0 -0
  33. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/pipeline.py +0 -0
  34. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/quant_fusion.py +0 -0
  35. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/themes.py +0 -0
  36. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/deep/tiers.py +0 -0
  37. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/engineering/__init__.py +0 -0
  38. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/engineering/coder.py +0 -0
  39. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/engineering/tester.py +0 -0
  40. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/__init__.py +0 -0
  41. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/cashflow_burn.py +0 -0
  42. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/catalyst.py +0 -0
  43. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/corporate_finance.py +0 -0
  44. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/debate.py +0 -0
  45. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/earnings.py +0 -0
  46. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/fundamental.py +0 -0
  47. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/macro.py +0 -0
  48. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/news.py +0 -0
  49. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/risk.py +0 -0
  50. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/sector.py +0 -0
  51. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/strategist.py +0 -0
  52. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/stripe_revenue.py +0 -0
  53. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/synthesis.py +0 -0
  54. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/financial/technical.py +0 -0
  55. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/orchestrator.py +0 -0
  56. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/portfolio_agent.py +0 -0
  57. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/__init__.py +0 -0
  58. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/asset_diagnosis.py +0 -0
  59. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/business_match.py +0 -0
  60. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/cashflow_verify.py +0 -0
  61. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/contract_rules.py +0 -0
  62. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/energy_anomaly.py +0 -0
  63. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/exit_settlement.py +0 -0
  64. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/fulfillment_risk.py +0 -0
  65. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/ops_optimize.py +0 -0
  66. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/realty/revenue_share.py +0 -0
  67. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/registry.py +0 -0
  68. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/signal_scheme.py +0 -0
  69. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/sports/__init__.py +0 -0
  70. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/sports/football_agent.py +0 -0
  71. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/supervisor.py +0 -0
  72. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/team.py +0 -0
  73. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/__init__.py +0 -0
  74. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/contracts.py +0 -0
  75. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/dashboard.py +0 -0
  76. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/fulfillment_leadtime.py +0 -0
  77. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/inbound_exceptions.py +0 -0
  78. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/inventory_health.py +0 -0
  79. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/local_run.py +0 -0
  80. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/local_snapshot.py +0 -0
  81. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/logistics_cost.py +0 -0
  82. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/logistics_sync.py +0 -0
  83. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/agents/warehouse/workflow.py +0 -0
  84. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/aliyun_data_client.py +0 -0
  85. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/README.md +0 -0
  86. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/__init__.py +0 -0
  87. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/channels/README.md +0 -0
  88. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/channels/__init__.py +0 -0
  89. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/channels/registry.py +0 -0
  90. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/channels/tradingview.py +0 -0
  91. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/README.md +0 -0
  92. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/__init__.py +0 -0
  93. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/_optional.py +0 -0
  94. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/bootstrap.py +0 -0
  95. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/broker_render.py +0 -0
  96. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/codegen_paths.py +0 -0
  97. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/__init__.py +0 -0
  98. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/_business_render.py +0 -0
  99. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/_ui.py +0 -0
  100. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/analysis_cmds.py +0 -0
  101. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/ashare_prediction_cmds.py +0 -0
  102. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/auth_cmds.py +0 -0
  103. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/backtest_cmds.py +0 -0
  104. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/broker_cmds.py +0 -0
  105. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/business_workflow_cmds.py +0 -0
  106. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/canvas_cmds.py +0 -0
  107. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/catalog.py +0 -0
  108. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/core_cmds.py +0 -0
  109. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/data_cmds.py +0 -0
  110. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/diagnostic_cmds.py +0 -0
  111. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/diagnostic_ops_cmds.py +0 -0
  112. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/file_cmds.py +0 -0
  113. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/finance_service_cmds.py +0 -0
  114. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/fx_commodity_cmds.py +0 -0
  115. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/market.py +0 -0
  116. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/market_cmds.py +0 -0
  117. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/market_context.py +0 -0
  118. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/market_render.py +0 -0
  119. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/model_cmds.py +0 -0
  120. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/ops_cmds.py +0 -0
  121. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/orchestrator_cmds.py +0 -0
  122. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/pdf_export_cmds.py +0 -0
  123. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/portfolio_cmds.py +0 -0
  124. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/report.py +0 -0
  125. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/scaffold_templates.py +0 -0
  126. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/session_cmds.py +0 -0
  127. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/session_ux_cmds.py +0 -0
  128. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/team.py +0 -0
  129. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/team_render.py +0 -0
  130. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/ui_cmds.py +0 -0
  131. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/warehouse_cmds.py +0 -0
  132. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/workflow_cmds.py +0 -0
  133. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/commands/workspace_cmds.py +0 -0
  134. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/config_paths.py +0 -0
  135. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/config_store.py +0 -0
  136. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/constants.py +0 -0
  137. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/context.py +0 -0
  138. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/deterministic.py +0 -0
  139. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/direct.py +0 -0
  140. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/finance_service_catalog.py +0 -0
  141. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/football_reports.py +0 -0
  142. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/github_app_auth.py +0 -0
  143. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/google_login.py +0 -0
  144. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/handlers/__init__.py +0 -0
  145. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/handlers/broker_handlers.py +0 -0
  146. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/handlers/chart_handlers.py +0 -0
  147. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/handlers/market_handlers.py +0 -0
  148. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/handlers/realty_handlers.py +0 -0
  149. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/handlers/sports_handlers.py +0 -0
  150. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/handlers/strategy_advice.py +0 -0
  151. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/helpers.py +0 -0
  152. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/hooks.py +0 -0
  153. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/i18n.py +0 -0
  154. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/intent.py +0 -0
  155. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/intent_router.py +0 -0
  156. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/intent_signals.py +0 -0
  157. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/lifecycle_hooks.py +0 -0
  158. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/local_tool_schemas.py +0 -0
  159. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/main.py +0 -0
  160. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/market_metadata.py +0 -0
  161. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/market_universe.py +0 -0
  162. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/message_processing.py +0 -0
  163. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/model_catalog.py +0 -0
  164. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/pdf_report.py +0 -0
  165. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/plan_mode.py +0 -0
  166. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/plotly_html.py +0 -0
  167. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/prediction_feedback.py +0 -0
  168. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/preflight.py +0 -0
  169. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/project_aria.py +0 -0
  170. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/prompt_assembly.py +0 -0
  171. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/prompts/__init__.py +0 -0
  172. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/prompts/coding.py +0 -0
  173. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/prompts/select.py +0 -0
  174. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/prompts/system_prompts.py +0 -0
  175. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/prompts/ui.py +0 -0
  176. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/provider_endpoints.py +0 -0
  177. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/provider_keys.py +0 -0
  178. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/__init__.py +0 -0
  179. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/base.py +0 -0
  180. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/chat_routing.py +0 -0
  181. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/collaboration.py +0 -0
  182. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/llm/__init__.py +0 -0
  183. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/llm/offline_responses.py +0 -0
  184. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/llm/ollama_stream.py +0 -0
  185. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/llm/response_cache.py +0 -0
  186. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/llm/sse_stream.py +0 -0
  187. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/providers/vertexai_stream.py +0 -0
  188. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/runtime_consumer.py +0 -0
  189. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/sandbox.py +0 -0
  190. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/session_export.py +0 -0
  191. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/session_jsonl.py +0 -0
  192. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/session_store.py +0 -0
  193. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/skills_catalog.py +0 -0
  194. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/todo_tracker.py +0 -0
  195. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tool_executor.py +0 -0
  196. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tool_registry.py +0 -0
  197. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tool_scope.py +0 -0
  198. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tools/__init__.py +0 -0
  199. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tools/context.py +0 -0
  200. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tools/file_tools.py +0 -0
  201. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tools/market_tools.py +0 -0
  202. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tools/notebook_tools.py +0 -0
  203. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tools/system_tools.py +0 -0
  204. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tools/write_tools.py +0 -0
  205. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/tradingview_bridge.py +0 -0
  206. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/turn_planning.py +0 -0
  207. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/update_check.py +0 -0
  208. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/utils/__init__.py +0 -0
  209. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/cli/utils/market_detect.py +0 -0
  210. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/daemon/README.md +0 -0
  211. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/vscode/README.md +0 -0
  212. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/apps/vscode/package.json +0 -0
  213. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/aria_cli.py +0 -0
  214. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/aria_daemon.py +0 -0
  215. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/aria_feishu_bot.py +0 -0
  216. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/aria_mcp_server.py +0 -0
  217. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/aria_relay_client.py +0 -0
  218. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/aria_relay_server.py +0 -0
  219. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/aria_telegram_bot.py +0 -0
  220. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ariarc.py +0 -0
  221. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/artifacts.py +0 -0
  222. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/backtest_engine.py +0 -0
  223. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/backtest_report.py +0 -0
  224. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/__init__.py +0 -0
  225. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/automation.py +0 -0
  226. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/base.py +0 -0
  227. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/capabilities.py +0 -0
  228. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/cn/__init__.py +0 -0
  229. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/cn/easytrader_broker.py +0 -0
  230. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/cn/futu_broker.py +0 -0
  231. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/cn/longbridge_broker.py +0 -0
  232. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/cn/tiger_broker.py +0 -0
  233. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/cn/xtquant_broker.py +0 -0
  234. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/config.py +0 -0
  235. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/intl/__init__.py +0 -0
  236. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/intl/alpaca_broker.py +0 -0
  237. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/intl/ibkr_broker.py +0 -0
  238. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/intl/trading212_broker.py +0 -0
  239. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/intl/webull_broker.py +0 -0
  240. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/paper_broker.py +0 -0
  241. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/planning.py +0 -0
  242. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/registry.py +0 -0
  243. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/brokers/trading.py +0 -0
  244. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/canva_client.py +0 -0
  245. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/change_store.py +0 -0
  246. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/__init__.py +0 -0
  247. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/aliyun_data_client.py +0 -0
  248. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/aria_relay_client.py +0 -0
  249. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/canva_client.py +0 -0
  250. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/figma_client.py +0 -0
  251. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/football_data_client.py +0 -0
  252. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/kling_video_client.py +0 -0
  253. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/market_data_client.py +0 -0
  254. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/openai_image_client.py +0 -0
  255. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/runway_video_client.py +0 -0
  256. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/clients/warehouse_erp_client.py +0 -0
  257. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/cloud_memory.py +0 -0
  258. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/command_safety.py +0 -0
  259. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/computer_use_tools.py +0 -0
  260. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/dashboard_generator.py +0 -0
  261. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/data_analysis_tools.py +0 -0
  262. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/data_cleaner.py +0 -0
  263. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/data_service.py +0 -0
  264. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/__init__.py +0 -0
  265. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/base.py +0 -0
  266. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/router.py +0 -0
  267. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/__init__.py +0 -0
  268. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/akshare_source.py +0 -0
  269. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/alpha_vantage_source.py +0 -0
  270. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/edgar_source.py +0 -0
  271. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/finnhub_source.py +0 -0
  272. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/fred_source.py +0 -0
  273. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/tushare_source.py +0 -0
  274. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/web_scraper_source.py +0 -0
  275. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/world_bank_source.py +0 -0
  276. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/datasources/sources/yfinance_source.py +0 -0
  277. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/demo_player.py +0 -0
  278. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/doctor.py +0 -0
  279. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/domain/__init__.py +0 -0
  280. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/domain/backtest_engine.py +0 -0
  281. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/domain/backtest_report.py +0 -0
  282. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/domain/finance_formulas.py +0 -0
  283. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/domain/portfolio_ledger.py +0 -0
  284. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/domain/strategy_vault.py +0 -0
  285. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/evals/__init__.py +0 -0
  286. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/evals/harness.py +0 -0
  287. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/evals/runner.py +0 -0
  288. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/external_agent_runner.py +0 -0
  289. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/figma_client.py +0 -0
  290. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/file_analysis_tools.py +0 -0
  291. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/finance_formulas.py +0 -0
  292. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/football_data_client.py +0 -0
  293. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/image_gen_tools.py +0 -0
  294. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/intent_classifier.py +0 -0
  295. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/kling_video_client.py +0 -0
  296. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/licensing.py +0 -0
  297. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/local_finance_tools.py +0 -0
  298. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/local_image_provider.py +0 -0
  299. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/local_llm_provider.py +0 -0
  300. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/macro_tools.py +0 -0
  301. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/markdown_pdf.py +0 -0
  302. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/market_data_client.py +0 -0
  303. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/mcp_client.py +0 -0
  304. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/memory_manager.py +0 -0
  305. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/model_capability.py +0 -0
  306. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/notification_tools.py +0 -0
  307. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/openai_image_client.py +0 -0
  308. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/__init__.py +0 -0
  309. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/adk_bridge/__init__.py +0 -0
  310. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/adk_bridge/code_review_tools.py +0 -0
  311. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/adk_bridge/market_tools.py +0 -0
  312. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_agents/__init__.py +0 -0
  313. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_agents/manifest.py +0 -0
  314. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_core/__init__.py +0 -0
  315. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_core/architecture.py +0 -0
  316. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_core/export.py +0 -0
  317. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_core/manifest.py +0 -0
  318. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_core/paths.py +0 -0
  319. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_core/secure_file.py +0 -0
  320. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_infra/__init__.py +0 -0
  321. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_infra/arthera.py +0 -0
  322. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_infra/doctor.py +0 -0
  323. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_infra/product.py +0 -0
  324. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_mcp/__init__.py +0 -0
  325. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_mcp/bridge.py +0 -0
  326. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_mcp/circuit.py +0 -0
  327. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_mcp/config.py +0 -0
  328. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_mcp/installer.py +0 -0
  329. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_mcp/server.py +0 -0
  330. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_mcp/tools.py +0 -0
  331. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_sdk/__init__.py +0 -0
  332. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_sdk/client.py +0 -0
  333. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_sdk/providers.py +0 -0
  334. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_sdk/streaming.py +0 -0
  335. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_sdk/types.py +0 -0
  336. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/__init__.py +0 -0
  337. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/cache.py +0 -0
  338. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/context.py +0 -0
  339. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/context_checkpoints.py +0 -0
  340. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/data.py +0 -0
  341. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/provider_health.py +0 -0
  342. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/references.py +0 -0
  343. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/registry.py +0 -0
  344. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/research_protocol.py +0 -0
  345. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/research_quality.py +0 -0
  346. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/settings.py +0 -0
  347. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_services/usage.py +0 -0
  348. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_skills/__init__.py +0 -0
  349. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_skills/catalog.py +0 -0
  350. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_skills/loader.py +0 -0
  351. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_skills/registry.py +0 -0
  352. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_tools/__init__.py +0 -0
  353. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_tools/financial/__init__.py +0 -0
  354. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_tools/financial/_paths.py +0 -0
  355. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_tools/financial/compliance.py +0 -0
  356. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_tools/financial/factors.py +0 -0
  357. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_tools/financial/risk_tools.py +0 -0
  358. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_tools/financial/strategy.py +0 -0
  359. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/aria_tools/registry.py +0 -0
  360. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/__init__.py +0 -0
  361. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/_namespace.py +0 -0
  362. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/backtest/__init__.py +0 -0
  363. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/backtest/core.py +0 -0
  364. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/backtest/engine.py +0 -0
  365. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/portfolio/__init__.py +0 -0
  366. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/portfolio/optimizer.py +0 -0
  367. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/__init__.py +0 -0
  368. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/calibrator.py +0 -0
  369. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/dixon_coles.py +0 -0
  370. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/elo.py +0 -0
  371. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/form.py +0 -0
  372. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/h2h.py +0 -0
  373. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/ml_model.py +0 -0
  374. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/predictor.py +0 -0
  375. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/sports/tracker.py +0 -0
  376. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/stochastic/__init__.py +0 -0
  377. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/stochastic/gbm_enhanced.py +0 -0
  378. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/stochastic/ito_calculus.py +0 -0
  379. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/stochastic/kelly_criterion.py +0 -0
  380. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/stochastic/monte_carlo_advanced.py +0 -0
  381. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/stochastic/options_pricing.py +0 -0
  382. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packages/quant_engine/stochastic/stochastic_processes.py +0 -0
  383. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packs/__init__.py +0 -0
  384. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packs/base.py +0 -0
  385. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packs/finance/__init__.py +0 -0
  386. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packs/logistics/__init__.py +0 -0
  387. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packs/payments/__init__.py +0 -0
  388. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packs/realty/__init__.py +0 -0
  389. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packs/registry.py +0 -0
  390. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/packs/rules.py +0 -0
  391. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/plan_utils.py +0 -0
  392. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/plugin_loader.py +0 -0
  393. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/portfolio_ledger.py +0 -0
  394. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/preview_server.py +0 -0
  395. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/privacy/__init__.py +0 -0
  396. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/privacy/feedback.py +0 -0
  397. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/project_review.py +0 -0
  398. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/project_review_api.py +0 -0
  399. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/project_review_server.py +0 -0
  400. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/project_tools.py +0 -0
  401. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/__init__.py +0 -0
  402. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/llm/__init__.py +0 -0
  403. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/llm/anthropic.py +0 -0
  404. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/llm/autoconfig.py +0 -0
  405. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/llm/base.py +0 -0
  406. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/llm/custom.py +0 -0
  407. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/llm/ollama.py +0 -0
  408. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/llm/openai_compat.py +0 -0
  409. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/llm/registry.py +0 -0
  410. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/local_image_provider.py +0 -0
  411. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/providers/local_llm_provider.py +0 -0
  412. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/realty_data_tools.py +0 -0
  413. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/report_exporters.py +0 -0
  414. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/report_generator.py +0 -0
  415. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/__init__.py +0 -0
  416. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/acceptance.py +0 -0
  417. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/agent_loop.py +0 -0
  418. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/approval.py +0 -0
  419. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/budget.py +0 -0
  420. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/checkpoints.py +0 -0
  421. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/crash_report.py +0 -0
  422. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/events.py +0 -0
  423. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/gateway.py +0 -0
  424. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/lsp.py +0 -0
  425. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/orchestrator.py +0 -0
  426. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/repo_map.py +0 -0
  427. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/run_state.py +0 -0
  428. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/run_store.py +0 -0
  429. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/self_healing.py +0 -0
  430. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/subagent.py +0 -0
  431. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/task_ledger.py +0 -0
  432. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/task_orchestrator.py +0 -0
  433. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/tool_executor.py +0 -0
  434. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/tool_policy.py +0 -0
  435. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runtime/worktrees.py +0 -0
  436. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/runway_video_client.py +0 -0
  437. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/safety/__init__.py +0 -0
  438. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/safety/permissions.py +0 -0
  439. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/safety/service.py +0 -0
  440. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/setup_wizard.py +0 -0
  441. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/spreadsheet_tools.py +0 -0
  442. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/strategy_vault.py +0 -0
  443. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/__init__.py +0 -0
  444. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/artifact_tools.py +0 -0
  445. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/broker_tools.py +0 -0
  446. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/build_quant_engine.py +0 -0
  447. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/code_audit_tools.py +0 -0
  448. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/computer_use_tools.py +0 -0
  449. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/data_analysis_tools.py +0 -0
  450. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/enterprise_finance_tools.py +0 -0
  451. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/extended_tools.py +0 -0
  452. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/file_analysis_tools.py +0 -0
  453. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/image_gen_tools.py +0 -0
  454. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/local_finance_tools.py +0 -0
  455. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/logistics_tools.py +0 -0
  456. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/macro_tools.py +0 -0
  457. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/notification_tools.py +0 -0
  458. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/project_tools.py +0 -0
  459. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/realty_data_tools.py +0 -0
  460. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/spreadsheet_tools.py +0 -0
  461. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/tools/stripe_tools.py +0 -0
  462. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/__init__.py +0 -0
  463. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/banner.py +0 -0
  464. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/completer.py +0 -0
  465. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/console.py +0 -0
  466. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/image_render.py +0 -0
  467. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/input_box.py +0 -0
  468. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/picker.py +0 -0
  469. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/render/__init__.py +0 -0
  470. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/render/finance.py +0 -0
  471. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/render/market.py +0 -0
  472. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/render/output.py +0 -0
  473. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/render/responsive.py +0 -0
  474. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/render/team.py +0 -0
  475. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/robot.py +0 -0
  476. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/ui/startup_dashboard.py +0 -0
  477. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/utils/vscode_uri.py +0 -0
  478. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/video_analysis.py +0 -0
  479. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/video_editor.py +0 -0
  480. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/workspace/__init__.py +0 -0
  481. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/workspace/files.py +0 -0
  482. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/workspace/verify.py +0 -0
  483. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/workspace_changes.py +0 -0
  484. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/workspace_context.py +0 -0
  485. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/workspace_service.py +0 -0
  486. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code/workspace_tools.py +0 -0
  487. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code.egg-info/dependency_links.txt +0 -0
  488. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code.egg-info/entry_points.txt +0 -0
  489. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code.egg-info/requires.txt +0 -0
  490. {aria_code-0.52.0 → aria_code-0.54.0}/src/aria_code.egg-info/top_level.txt +0 -0
  491. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_adk_market_tools.py +0 -0
  492. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_agent_team_fallback.py +0 -0
  493. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_analyze_file_tool.py +0 -0
  494. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_architecture_ledger_is_true.py +0 -0
  495. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_architecture_report.py +0 -0
  496. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_aria_cli_core.py +0 -0
  497. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_aria_mcp_server.py +0 -0
  498. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_aria_sdk.py +0 -0
  499. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_artifact_publishing.py +0 -0
  500. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_artifacts_and_reports.py +0 -0
  501. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_ashare_prediction_cmds.py +0 -0
  502. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_backtest_cmds.py +0 -0
  503. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_backtest_engine.py +0 -0
  504. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_backtest_report.py +0 -0
  505. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_broker_automation.py +0 -0
  506. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_broker_chat_confirm_gate.py +0 -0
  507. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_broker_planning.py +0 -0
  508. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_broker_safety.py +0 -0
  509. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_broker_tools.py +0 -0
  510. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_budget.py +0 -0
  511. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_business_workflow_cmds.py +0 -0
  512. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_canva_client.py +0 -0
  513. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_canvas_cmds.py +0 -0
  514. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_channel_intake.py +0 -0
  515. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_channels.py +0 -0
  516. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_chart_handlers.py +0 -0
  517. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_chat_routing.py +0 -0
  518. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_ci_security_workflow.py +0 -0
  519. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_cli_app_split.py +0 -0
  520. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_cli_bootstrap.py +0 -0
  521. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_cli_config_store.py +0 -0
  522. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_cli_lifecycle_hooks.py +0 -0
  523. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_cli_runtime_consumer.py +0 -0
  524. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_cli_tool_executor_module.py +0 -0
  525. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_cloud_memory.py +0 -0
  526. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_code_audit_tools.py +0 -0
  527. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_code_review_agent.py +0 -0
  528. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_codegen_output.py +0 -0
  529. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_coder_tester_self_healing.py +0 -0
  530. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_coder_tool_safety.py +0 -0
  531. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_collaboration.py +0 -0
  532. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_command_loggers.py +0 -0
  533. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_command_safety.py +0 -0
  534. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_completions_builder.py +0 -0
  535. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_config_paths.py +0 -0
  536. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_configured_provider.py +0 -0
  537. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_container_entrypoints.py +0 -0
  538. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_context_checkpoints.py +0 -0
  539. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_context_references.py +0 -0
  540. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_context_service.py +0 -0
  541. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_crash_report.py +0 -0
  542. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_credential_file_permissions.py +0 -0
  543. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_custom_providers.py +0 -0
  544. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_daemon_gateway_config.py +0 -0
  545. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_dashboard_generator.py +0 -0
  546. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_data_service.py +0 -0
  547. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_data_service_imports.py +0 -0
  548. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_datasource_routing.py +0 -0
  549. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_deep_analysis.py +0 -0
  550. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_degrades_without_quant_engine.py +0 -0
  551. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_doctor.py +0 -0
  552. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_doctor_npm_scope.py +0 -0
  553. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_engine_boundary.py +0 -0
  554. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_enterprise_tool_honesty.py +0 -0
  555. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_env_switch_docs.py +0 -0
  556. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_evals_harness.py +0 -0
  557. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_extended_tools.py +0 -0
  558. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_feishu_swarm_config.py +0 -0
  559. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_finance_renderers.py +0 -0
  560. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_finance_service_catalog.py +0 -0
  561. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_football_agent.py +0 -0
  562. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_football_prediction_output.py +0 -0
  563. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_google_cloud_routing.py +0 -0
  564. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_google_login.py +0 -0
  565. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_google_search_provider.py +0 -0
  566. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_headless_is_agentic.py +0 -0
  567. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_image_gen_tools.py +0 -0
  568. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_image_inputs.py +0 -0
  569. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_import_graph_budget.py +0 -0
  570. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_intent_router.py +0 -0
  571. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_intent_signals.py +0 -0
  572. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_kling_video_client.py +0 -0
  573. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_legacy_module_imports.py +0 -0
  574. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_license_consistency.py +0 -0
  575. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_licensing.py +0 -0
  576. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_local_image_provider.py +0 -0
  577. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_logistics_and_finance_agents.py +0 -0
  578. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_lsp.py +0 -0
  579. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_markdown_pdf.py +0 -0
  580. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_market_data_client.py +0 -0
  581. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_market_history_inheritance.py +0 -0
  582. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_market_history_tool.py +0 -0
  583. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_market_symbol_extraction.py +0 -0
  584. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_market_universe.py +0 -0
  585. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_mcp_circuit.py +0 -0
  586. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_mcp_client.py +0 -0
  587. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_model_capability_registry.py +0 -0
  588. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_model_choice_is_the_users.py +0 -0
  589. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_model_selection_state.py +0 -0
  590. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_native_binary_entrypoints.py +0 -0
  591. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_new_modules.py +0 -0
  592. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_no_hardcoded_developer_paths.py +0 -0
  593. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_no_uncommitted_imports.py +0 -0
  594. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_ollama_stream_imports.py +0 -0
  595. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_ollama_stream_tools.py +0 -0
  596. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_openai_image_client.py +0 -0
  597. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_output_rendering.py +0 -0
  598. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_packages_facade.py +0 -0
  599. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_packaging_constraints.py +0 -0
  600. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_packaging_manifest.py +0 -0
  601. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_packs_domains.py +0 -0
  602. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_pdf_report.py +0 -0
  603. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_pick_best_installed_model.py +0 -0
  604. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_plan_mode.py +0 -0
  605. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_plotly_html_output.py +0 -0
  606. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_portfolio_ledger.py +0 -0
  607. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_post_turn_context_decision.py +0 -0
  608. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_preflight.py +0 -0
  609. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_preview_server.py +0 -0
  610. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_privacy_feedback.py +0 -0
  611. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_project_aria.py +0 -0
  612. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_project_review.py +0 -0
  613. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_project_review_api.py +0 -0
  614. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_prompt_assembly.py +0 -0
  615. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_prompt_selection.py +0 -0
  616. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_provider_autoconfig.py +0 -0
  617. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_provider_error_messages.py +0 -0
  618. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_provider_integration.py +0 -0
  619. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_provider_registry.py +0 -0
  620. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_public_service_status.py +0 -0
  621. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_quant_engine_namespace.py +0 -0
  622. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_rebind_contract.py +0 -0
  623. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_rebind_namespace_contract.py +0 -0
  624. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_relay_event_verification.py +0 -0
  625. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_release_push_is_atomic.py +0 -0
  626. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_release_workflow_permissions.py +0 -0
  627. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_report_charts.py +0 -0
  628. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_report_generator.py +0 -0
  629. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_research_protocol.py +0 -0
  630. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_research_quality.py +0 -0
  631. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_responsive_rendering.py +0 -0
  632. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_root_module_budget.py +0 -0
  633. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_acceptance.py +0 -0
  634. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_agent_loop.py +0 -0
  635. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_approval.py +0 -0
  636. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_bridge.py +0 -0
  637. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_bridge_fallback.py +0 -0
  638. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_checkpoints.py +0 -0
  639. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_gateway.py +0 -0
  640. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_repo_map.py +0 -0
  641. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_run_store.py +0 -0
  642. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_tool_executor.py +0 -0
  643. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runtime_worktrees.py +0 -0
  644. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_runway_video_client.py +0 -0
  645. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_safety_permissions.py +0 -0
  646. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_safety_service.py +0 -0
  647. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_safety_service_adoption.py +0 -0
  648. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_service_diagnostics_security.py +0 -0
  649. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_session_search.py +0 -0
  650. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_settings_service.py +0 -0
  651. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_single_import_root.py +0 -0
  652. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_skill_agent_binding.py +0 -0
  653. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_skill_catalog.py +0 -0
  654. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_skill_loader.py +0 -0
  655. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_spreadsheet_tools.py +0 -0
  656. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_sse_stream_contract.py +0 -0
  657. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_startup_dashboard.py +0 -0
  658. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_streaming_pipeline.py +0 -0
  659. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_stripe_agent.py +0 -0
  660. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_subagent.py +0 -0
  661. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_supervisor_routing.py +0 -0
  662. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_system_prompts.py +0 -0
  663. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_system_tools_output.py +0 -0
  664. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_task_orchestrator.py +0 -0
  665. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_team_synthesis.py +0 -0
  666. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_tls_trust_store.py +0 -0
  667. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_tool_policy.py +0 -0
  668. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_tool_scope.py +0 -0
  669. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_trading_service.py +0 -0
  670. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_tradingview_bridge.py +0 -0
  671. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_turn_planning.py +0 -0
  672. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_ui_completer_references.py +0 -0
  673. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_ui_console_theme.py +0 -0
  674. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_ui_input_box.py +0 -0
  675. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_ui_robot_banner.py +0 -0
  676. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_verification_hint.py +0 -0
  677. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_verification_policy.py +0 -0
  678. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_version_consistency.py +0 -0
  679. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_version_counter.py +0 -0
  680. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_video_analysis.py +0 -0
  681. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_video_editor.py +0 -0
  682. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_vscode_mcp.py +0 -0
  683. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_warehouse_agents.py +0 -0
  684. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_warehouse_cli_registration.py +0 -0
  685. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_warehouse_erp_client.py +0 -0
  686. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_warehouse_workflow.py +0 -0
  687. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_wheel_is_installable.py +0 -0
  688. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_workspace_changes.py +0 -0
  689. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_workspace_context.py +0 -0
  690. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_workspace_files.py +0 -0
  691. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_workspace_scope.py +0 -0
  692. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_workspace_service.py +0 -0
  693. {aria_code-0.52.0 → aria_code-0.54.0}/tests/test_workspace_verify.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.52.0
3
+ Version: 0.54.0
4
4
  Summary: AI coding and research workspace with optional finance and connected-domain tools
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/artherahq/aria-code
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "aria-code"
7
- version = "0.52.0"
7
+ version = "0.54.0"
8
8
  description = "AI coding and research workspace with optional finance and connected-domain tools"
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.52.0"
20
+ __version__ = "0.54.0"
@@ -59,12 +59,12 @@ async def analyze_alert_via_gateway(
59
59
  decides its own fallback (the daemon keeps its legacy quick summary).
60
60
  """
61
61
  if run_turn_fn is None:
62
- # stream_ollama borrows 47 bare names from aria_cli's module globals
63
- # (verified by AST audit) and only works after aria_cli's import-time
64
- # rebinding. Until that module is untangled, any out-of-CLI consumer
65
- # of the default Ollama path must import aria_cli first — a one-time
66
- # ~1s cost the long-lived daemon amortizes.
67
- import aria_cli # noqa: F401 (side effect: binds stream_ollama globals)
62
+ # No `import aria_cli` here any more. It was unconditional, for the sake
63
+ # of the Ollama path's rebind, and cost 1766ms against the 63ms this
64
+ # module's own dependencies need — paid by every channel alert including
65
+ # the ones analysed through the cloud, which never reach stream_ollama.
66
+ # runtime_bridge now imports it inside the ollama branch, so the cost
67
+ # follows the route that needs it.
68
68
  from apps.cli.providers.runtime_bridge import build_tool_executor, make_provider_fn
69
69
  from runtime.gateway import run_turn as run_turn_fn_impl
70
70
 
@@ -266,6 +266,23 @@ def make_provider_fn(
266
266
  )
267
267
 
268
268
  async def run_ollama(_on_token):
269
+ if route == "ollama":
270
+ # stream_ollama still borrows 12 names from aria_cli's module
271
+ # globals and only resolves them after that module's import-time
272
+ # rebind, so an out-of-CLI caller has to import it first. Doing
273
+ # it here rather than at the caller's import time means only the
274
+ # route that needs it pays: measured, `import aria_cli` is 1766ms
275
+ # against 63ms for the daemon's own dependencies, and a
276
+ # Vertex/Gemini config routes to "configured", which never
277
+ # touches stream_ollama. The daemon was paying 1.7s to forward an
278
+ # alert it then analysed through the cloud.
279
+ #
280
+ # Idempotent and cached by sys.modules, so the second alert pays
281
+ # nothing. Inside the function, not the module, because importing
282
+ # aria_cli at this module's import time would put the cost back
283
+ # on every consumer.
284
+ import aria_cli # noqa: F401 (side effect: rebinds stream_ollama)
285
+
269
286
  selected = (
270
287
  OllamaProvider(ollama_url, model, system_override=system_override)
271
288
  if route == "ollama" else
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aria-code
3
- Version: 0.52.0
3
+ Version: 0.54.0
4
4
  Summary: AI coding and research workspace with optional finance and connected-domain tools
5
5
  License: Apache-2.0
6
6
  Project-URL: Homepage, https://github.com/artherahq/aria-code
@@ -563,6 +563,7 @@ tests/test_import_graph_budget.py
563
563
  tests/test_intent_router.py
564
564
  tests/test_intent_signals.py
565
565
  tests/test_kling_video_client.py
566
+ tests/test_lazy_rebind.py
566
567
  tests/test_legacy_module_imports.py
567
568
  tests/test_license_consistency.py
568
569
  tests/test_licensing.py
@@ -50,6 +50,7 @@ class ThePinsMatchTheDispatchersOwnVersion(unittest.TestCase):
50
50
  def test_every_platform_is_listed(self) -> None:
51
51
  listed = set(self.manifest.get("optionalDependencies") or {})
52
52
  expected = {f"@artheras/aria-code-{k}" for k in PLATFORM_KEYS}
53
+ expected |= {f"@artheras/aria-code-mcp-{k}" for k in PLATFORM_KEYS}
53
54
  self.assertEqual(
54
55
  listed, expected,
55
56
  "the dispatcher must list exactly the platform packages the release "
@@ -85,7 +86,8 @@ class BumpingTheVersionMovesThePins(unittest.TestCase):
85
86
  "name": "@artheras/aria-code",
86
87
  "version": "0.47.0",
87
88
  "optionalDependencies": {
88
- f"@artheras/aria-code-{k}": "0.47.0" for k in PLATFORM_KEYS
89
+ **{f"@artheras/aria-code-{k}": "0.47.0" for k in PLATFORM_KEYS},
90
+ **{f"@artheras/aria-code-mcp-{k}": "0.47.0" for k in PLATFORM_KEYS},
89
91
  },
90
92
  }, indent=2) + "\n")
91
93
  (work / "scripts" / "bump_version.py").write_text(
@@ -116,9 +116,11 @@ class ThePlatformKeyMatchesTheOnesWePublish(unittest.TestCase):
116
116
  )
117
117
 
118
118
  def test_the_dispatcher_lists_exactly_those(self) -> None:
119
- listed = {name.rsplit("aria-code-", 1)[-1]
120
- for name in (NPM_PKG.get("optionalDependencies") or {})}
121
- self.assertEqual(listed, {v for v in self.CASES.values() if v})
119
+ names = set(NPM_PKG.get("optionalDependencies") or {})
120
+ expected = {v for v in self.CASES.values() if v}
121
+ cli = {f"@artheras/aria-code-{key}" for key in expected}
122
+ mcp = {f"@artheras/aria-code-mcp-{key}" for key in expected}
123
+ self.assertEqual(names, cli | mcp)
122
124
 
123
125
 
124
126
  class TheBinaryCheckReportsASilentlyMissingPackage(unittest.TestCase):
@@ -0,0 +1,112 @@
1
+ """aria_cli is imported by the route that needs it, not by every caller.
2
+
3
+ stream_ollama still borrows 12 names from aria_cli's module globals and only
4
+ resolves them after that module's import-time rebind, so an out-of-CLI caller
5
+ has to import it before taking the Ollama path. apps/channels/intake.py did that
6
+ unconditionally, which meant a channel alert analysed through Vertex — a route
7
+ that never touches stream_ollama — paid for the whole CLI anyway.
8
+
9
+ Measured on the first-alert setup path:
10
+
11
+ cloud / configured 1539ms -> 117ms
12
+ ollama still imports it, at provider construction
13
+
14
+ The import is inside run_ollama rather than at runtime_bridge's module level for
15
+ the same reason it left intake: at module level the cost returns to everyone.
16
+ """
17
+
18
+ from __future__ import annotations
19
+
20
+ import asyncio
21
+ import subprocess
22
+ import sys
23
+ import textwrap
24
+ import unittest
25
+
26
+ PRELUDE = "import sys; sys.path[:0] = ['src', 'src/aria_code', '.']\n"
27
+
28
+
29
+ def _in_subprocess(body: str) -> str:
30
+ """Run in a fresh interpreter: sys.modules is global, so an earlier test
31
+ importing aria_cli would make any in-process assertion vacuous."""
32
+ proc = subprocess.run(
33
+ [sys.executable, "-c", PRELUDE + textwrap.dedent(body)],
34
+ capture_output=True, text=True, timeout=300,
35
+ )
36
+ assert proc.returncode == 0, proc.stderr[-800:]
37
+ return proc.stdout
38
+
39
+
40
+ class TheCloudRouteDoesNotImportTheCli(unittest.TestCase):
41
+ def test_building_a_cloud_provider_leaves_aria_cli_unimported(self):
42
+ out = _in_subprocess("""
43
+ from apps.cli.providers.runtime_bridge import make_provider_fn
44
+ make_provider_fn(model='google/gemini-2.5-pro',
45
+ config={'local_provider': 'vertex'},
46
+ api_url='https://gw.example',
47
+ ollama_url='http://localhost:11434', tool_schemas=[])
48
+ print('aria_cli' in sys.modules)
49
+ """)
50
+ self.assertEqual(out.strip(), "False",
51
+ "the cloud route imported the whole CLI")
52
+
53
+ def test_importing_intake_does_not_import_the_cli(self):
54
+ out = _in_subprocess("""
55
+ from apps.channels import intake # noqa: F401
56
+ print('aria_cli' in sys.modules)
57
+ """)
58
+ self.assertEqual(out.strip(), "False")
59
+
60
+ def test_intake_has_no_unconditional_cli_import(self):
61
+ """The regression is textual: an `import aria_cli` on the default branch
62
+ applies to every route, and nothing about a cloud turn needs it."""
63
+ import pathlib
64
+
65
+ source = (pathlib.Path(__file__).resolve().parents[1] / "src" / "aria_code"
66
+ / "apps" / "channels" / "intake.py").read_text(encoding="utf-8")
67
+ offenders = [line.strip() for line in source.splitlines()
68
+ if line.strip().startswith(("import aria_cli", "from aria_cli"))]
69
+ self.assertEqual(offenders, [], f"intake.py imports aria_cli: {offenders}")
70
+
71
+
72
+ class TheOllamaRouteStillGetsItsRebind(unittest.TestCase):
73
+ def test_the_provider_call_imports_the_cli_and_the_borrowed_names_resolve(self):
74
+ """Moving the import must not leave stream_ollama unbound. A closed port
75
+ makes the call fail after the rebind, which is the part being checked."""
76
+ out = _in_subprocess("""
77
+ import asyncio
78
+ from apps.cli.providers.runtime_bridge import make_provider_fn
79
+
80
+ fn = make_provider_fn(model='qwen2.5:7b',
81
+ config={'local_provider': 'ollama'},
82
+ api_url=None,
83
+ ollama_url='http://127.0.0.1:1',
84
+ tool_schemas=[])
85
+ print('before:', 'aria_cli' in sys.modules)
86
+
87
+ async def main():
88
+ try:
89
+ await fn('hi', [])
90
+ except Exception:
91
+ pass
92
+
93
+ asyncio.run(main())
94
+ print('after:', 'aria_cli' in sys.modules)
95
+
96
+ cli = sys.modules.get('aria_cli')
97
+ globs = getattr(cli, 'stream_ollama', None)
98
+ globs = globs.__globals__ if globs is not None else {}
99
+ needed = ('_ACTIVE_COMMAND_POLICY', '_CONFIRM_TOOLS',
100
+ 'execute_local_tool', '_print_tool_result', 'get_ariarc')
101
+ print('missing:', [n for n in needed if n not in globs])
102
+ """)
103
+ self.assertIn("before: False", out)
104
+ self.assertIn("after: True", out,
105
+ "the ollama route did not import aria_cli — stream_ollama "
106
+ "would run with unbound globals")
107
+ self.assertIn("missing: []", out,
108
+ "stream_ollama's borrowed names did not resolve after the rebind")
109
+
110
+
111
+ if __name__ == "__main__":
112
+ unittest.main()
@@ -26,8 +26,10 @@ of the two shows up.
26
26
  from __future__ import annotations
27
27
 
28
28
  import pathlib
29
+ import json
29
30
  import shutil
30
31
  import subprocess
32
+ import sys
31
33
  import tempfile
32
34
  import unittest
33
35
 
@@ -131,37 +133,55 @@ class AFullSetOfArtifactsAssembles(_Fixture):
131
133
  self.assertIn(f"{platform}=built/{mcp_dir}/{mcp_file}", args)
132
134
 
133
135
 
134
- class MissingArtifactsDoNotKillTheStep(_Fixture):
135
- """A platform that failed to build must be skipped, not fatal.
136
+ class MissingArtifactsStopTheRelease(_Fixture):
137
+ """Every binary pinned by the dispatcher must be available."""
136
138
 
137
- This is the property the workflow comment claims ("A build that failed must
138
- not become an empty package") and that bug 2 silently removed.
139
- """
140
-
141
- def test_a_missing_mcp_binary_is_a_warning(self) -> None:
139
+ def test_a_missing_mcp_binary_fails_before_packaging(self) -> None:
142
140
  for platform in ARTIFACTS:
143
141
  self.place(platform, mcp=False)
144
142
  proc = _run(self.script, self.built)
145
- self.assertEqual(proc.returncode, 0,
146
- f"a missing MCP binary ended the step:\n{proc.stderr[-800:]}")
147
- self.assertIn("::warning::", proc.stdout)
143
+ self.assertNotEqual(proc.returncode, 0)
144
+ self.assertIn("no MCP binary", proc.stdout)
145
+ self.assertNotIn("ARG:", proc.stdout)
148
146
 
149
- def test_a_missing_platform_is_a_warning(self) -> None:
147
+ def test_a_missing_platform_fails_before_packaging(self) -> None:
150
148
  self.place("linux-x64")
151
149
  proc = _run(self.script, self.built)
152
- self.assertEqual(proc.returncode, 0,
153
- f"a missing platform ended the step:\n{proc.stderr[-800:]}")
154
- args = [l[4:] for l in proc.stdout.splitlines() if l.startswith("ARG:")]
155
- self.assertIn("linux-x64=built/aria-code-linux-x64/aria-code-bin", args)
156
- self.assertNotIn("--binary", [a for a in args if "darwin" in a])
150
+ self.assertNotEqual(proc.returncode, 0)
151
+ self.assertIn("no CLI binary for darwin-arm64", proc.stdout)
152
+ self.assertNotIn("ARG:", proc.stdout)
157
153
 
158
- def test_no_artifacts_at_all_still_reaches_python(self) -> None:
159
- # Nothing to package is the script's job to report ("no --binary
160
- # given"), not something bash should die on first.
154
+ def test_no_artifacts_at_all_fails_before_packaging(self) -> None:
161
155
  self.built.mkdir(parents=True)
162
156
  proc = _run(self.script, self.built)
163
- self.assertEqual(proc.returncode, 0,
164
- f"an empty artifact set ended the step:\n{proc.stderr[-800:]}")
157
+ self.assertNotEqual(proc.returncode, 0)
158
+ self.assertIn("no CLI binary", proc.stdout)
159
+ self.assertNotIn("ARG:", proc.stdout)
160
+
161
+
162
+ class PlatformPackagesAreSplit(_Fixture):
163
+ def test_cli_and_mcp_have_separate_tarball_inputs(self) -> None:
164
+ for platform in ARTIFACTS:
165
+ self.place(platform)
166
+ out = self.tmp / "packages"
167
+ args = [sys.executable, str(ROOT / "scripts" / "make_platform_packages.py"),
168
+ "--version", "9.9.9", "--out", str(out)]
169
+ for platform, (cli_dir, cli_file, mcp_dir, mcp_file) in ARTIFACTS.items():
170
+ args += ["--binary", f"{platform}={self.built / cli_dir / cli_file}",
171
+ "--mcp", f"{platform}={self.built / mcp_dir / mcp_file}"]
172
+ proc = subprocess.run(args, capture_output=True, text=True, timeout=20)
173
+ self.assertEqual(proc.returncode, 0, proc.stderr)
174
+ self.assertEqual(len(list(out.iterdir())), 10)
175
+ for platform in ARTIFACTS:
176
+ for kind, name in (("", "aria-code-bin"), ("mcp-", "aria-code-mcp-bin")):
177
+ package = out / f"aria-code-{kind}{platform}"
178
+ manifest = json.loads((package / "package.json").read_text())
179
+ self.assertEqual(manifest["name"], f"@artheras/aria-code-{kind}{platform}")
180
+ self.assertEqual(manifest["version"], "9.9.9")
181
+ binaries = list((package / "bin").iterdir())
182
+ self.assertEqual(len(binaries), 1)
183
+ extension = ".exe" if platform.startswith("win32") else ""
184
+ self.assertEqual(binaries[0].name, f"{name}{extension}")
165
185
 
166
186
 
167
187
  if __name__ == "__main__":
@@ -52,10 +52,7 @@ class GeneratedPackages(unittest.TestCase):
52
52
  self.out = self.tmp / "platforms"
53
53
 
54
54
  def _build(self, key, mcp=False):
55
- binaries = {"aria-code-bin": self.fake}
56
- if mcp:
57
- binaries["aria-code-mcp-bin"] = self.fake
58
- return mpp.build_one(key, "9.9.9", binaries, self.out)
55
+ return mpp.build_one(key, "9.9.9", self.fake, self.out, mcp=mcp)
59
56
 
60
57
  def test_windows_binaries_get_exe_and_nothing_else_does(self):
61
58
  win = self._build("win32-x64")
@@ -88,17 +85,20 @@ class GeneratedPackages(unittest.TestCase):
88
85
  self.assertEqual(meta["version"], "9.9.9")
89
86
  self.assertEqual(meta["files"], ["bin/"])
90
87
 
91
- def test_the_mcp_binary_is_optional_and_named_the_same_way(self):
92
- without = self._build("linux-x64")
93
- self.assertFalse((without / "bin" / "aria-code-mcp-bin").exists())
94
- with_mcp = self._build("darwin-arm64", mcp=True)
95
- self.assertTrue((with_mcp / "bin" / "aria-code-mcp-bin").is_file())
88
+ def test_the_mcp_binary_has_its_own_package(self):
89
+ cli = self._build("darwin-arm64")
90
+ mcp = self._build("darwin-arm64", mcp=True)
91
+ self.assertFalse((cli / "bin" / "aria-code-mcp-bin").exists())
92
+ self.assertTrue((mcp / "bin" / "aria-code-mcp-bin").is_file())
93
+ self.assertEqual(json.loads((mcp / "package.json").read_text())["name"],
94
+ "@artheras/aria-code-mcp-darwin-arm64")
96
95
 
97
96
  def test_rebuilding_replaces_rather_than_accumulates(self):
98
- pkg = self._build("linux-x64", mcp=True)
99
- self.assertTrue((pkg / "bin" / "aria-code-mcp-bin").is_file())
100
- pkg = self._build("linux-x64", mcp=False)
101
- self.assertFalse((pkg / "bin" / "aria-code-mcp-bin").exists(),
97
+ pkg = self._build("linux-x64")
98
+ stale = pkg / "bin" / "aria-code-mcp-bin"
99
+ stale.write_bytes(b"stale")
100
+ pkg = self._build("linux-x64")
101
+ self.assertFalse(stale.exists(),
102
102
  "a stale binary from a previous build would be published")
103
103
 
104
104
 
@@ -12,7 +12,10 @@ that fails by doing nothing.
12
12
 
13
13
  from __future__ import annotations
14
14
 
15
+ import os
15
16
  import pathlib
17
+ import subprocess
18
+ import tempfile
16
19
  import unittest
17
20
 
18
21
  import yaml
@@ -157,5 +160,41 @@ class CalledWorkflowsAcceptATag(unittest.TestCase):
157
160
  self.assertIn("inputs.tag", str(ref))
158
161
 
159
162
 
163
+ class NpmDispatcherGate(unittest.TestCase):
164
+ """Exercise the actual release step without contacting npm."""
165
+
166
+ def _run_wait(self, npm_available: bool):
167
+ steps = _load("publish")["jobs"]["publish-npm"]["steps"]
168
+ script = next(step["run"] for step in steps
169
+ if step.get("name") == "Wait for this version's platform packages")
170
+ # Keep the real shell logic, but expire its wait immediately in the
171
+ # missing-package case instead of making the test sleep 30 minutes.
172
+ self.assertIn("+ 1800", script)
173
+ script = script.replace("+ 1800", "+ 0", 1)
174
+ with tempfile.TemporaryDirectory() as tmp:
175
+ bin_dir = pathlib.Path(tmp)
176
+ node = bin_dir / "node"
177
+ node.write_text(
178
+ "#!/bin/sh\n"
179
+ "if [ \"$1\" = -p ]; then echo 0.52.0; "
180
+ "else echo @artheras/aria-code-linux-x64@0.52.0; fi\n"
181
+ )
182
+ npm = bin_dir / "npm"
183
+ npm.write_text(f"#!/bin/sh\nexit {0 if npm_available else 1}\n")
184
+ node.chmod(0o755)
185
+ npm.chmod(0o755)
186
+ env = dict(os.environ, PATH=f"{tmp}:{os.environ.get('PATH', '')}",
187
+ INPUT_TAG="v0.52.0")
188
+ return subprocess.run(["bash", "-c", script], env=env,
189
+ capture_output=True, text=True, timeout=10)
190
+
191
+ def test_dispatcher_waits_for_its_platform_packages(self):
192
+ present = self._run_wait(True)
193
+ self.assertEqual(present.returncode, 0, present.stderr)
194
+ missing = self._run_wait(False)
195
+ self.assertNotEqual(missing.returncode, 0)
196
+ self.assertIn("Refusing to publish a dispatcher", missing.stdout)
197
+
198
+
160
199
  if __name__ == "__main__":
161
200
  unittest.main()
@@ -75,13 +75,13 @@ class ThePublishedVersionIsVerified(unittest.TestCase):
75
75
  "reporting a missing package without failing is the same "
76
76
  "silence this job exists to break")
77
77
 
78
- def test_the_platform_packages_are_reported(self) -> None:
79
- # Their absence is a warning rather than an error: a platform whose
80
- # build failed should not fail the whole release, but it must be said,
81
- # because npm skipping an unresolvable optionalDependency is silent.
78
+ def test_missing_platform_packages_fail_the_release(self) -> None:
79
+ # npm silently skips unavailable optionalDependencies, so a published
80
+ # dispatcher without its pinned binaries is not a working release.
82
81
  script = "\n".join(str(s.get("run", "")) for s in self.job.get("steps") or [])
83
- self.assertIn("aria-code-$key", script)
84
- self.assertIn("::warning::", script)
82
+ self.assertIn("manifest.optionalDependencies", script)
83
+ self.assertIn("::error::no $pkg", script)
84
+ self.assertIn("MISSING=1", script)
85
85
 
86
86
 
87
87
  # The job graph — that publishing no longer waits on the npm binaries, and
@@ -92,15 +92,17 @@ class ThePublishedVersionIsVerified(unittest.TestCase):
92
92
 
93
93
  class TheNpmPageDescribesTheCurrentProduct(unittest.TestCase):
94
94
  def test_the_two_manifests_agree(self) -> None:
95
+ import ast
95
96
  import json
96
- import tomllib
97
+ import re
97
98
 
98
99
  root = WORKFLOWS.parents[1]
99
100
  npm = json.loads((root / "npm" / "package.json").read_text(encoding="utf-8"))
100
- with (root / "pyproject.toml").open("rb") as fh:
101
- py = tomllib.load(fh)["project"]
101
+ project_section = (root / "pyproject.toml").read_text(encoding="utf-8").split("[project]", 1)[1].split("\n[", 1)[0]
102
+ description = re.search(r'^description\s*=\s*(".*")\s*$', project_section, re.MULTILINE)
103
+ self.assertIsNotNone(description)
102
104
  self.assertEqual(
103
- npm["description"], py["description"],
105
+ npm["description"], ast.literal_eval(description.group(1)),
104
106
  "the npm page's one-line pitch and PyPI's disagree; npm's said "
105
107
  "'AI-powered financial terminal' long after the project was "
106
108
  "repositioned, and it is the first line a visitor reads",
File without changes
File without changes
File without changes
File without changes