monkeybot 3.6.1__tar.gz → 3.7.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 (767) hide show
  1. {monkeybot-3.6.1 → monkeybot-3.7.0}/CHANGELOG.md +19 -0
  2. {monkeybot-3.6.1 → monkeybot-3.7.0}/PKG-INFO +1 -1
  3. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +3 -2
  4. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +8 -0
  5. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/browser-mcp.md +9 -4
  6. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/skills/browser/SKILL.md +1 -1
  7. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/pyproject.toml +1 -1
  8. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/app.py +42 -12
  9. monkeybot-3.7.0/integrations/browser-mcp/src/browser_mcp/backend.py +257 -0
  10. monkeybot-3.7.0/integrations/browser-mcp/src/browser_mcp/chat_context.py +375 -0
  11. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/chat_scope.py +27 -41
  12. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +59 -9
  13. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/login.py +3 -3
  14. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/server.py +21 -1
  15. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +45 -0
  16. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +8 -7
  17. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +3 -2
  18. monkeybot-3.7.0/integrations/browser-mcp/tests/conftest.py +16 -0
  19. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +1 -1
  20. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/integration/conftest.py +5 -5
  21. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +5 -5
  22. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_act.py +7 -7
  23. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_agentcore.py +37 -30
  24. monkeybot-3.7.0/integrations/browser-mcp/tests/test_chat_isolation.py +369 -0
  25. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_chat_scope.py +41 -24
  26. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_fill_form.py +7 -7
  27. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +18 -19
  28. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_indexed_tools.py +7 -7
  29. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_observe.py +7 -7
  30. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_observe_after.py +7 -7
  31. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_perf.py +8 -8
  32. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_playbook_flows.py +7 -7
  33. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_server_shutdown.py +15 -15
  34. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_tabs.py +9 -9
  35. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_wait_tools.py +5 -5
  36. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/uv.lock +1 -1
  37. {monkeybot-3.6.1 → monkeybot-3.7.0}/pyproject.toml +1 -1
  38. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/config/runtime_env.py +13 -0
  39. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/config/snapshot.py +10 -0
  40. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/__init__.py +70 -1
  41. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/turn_loop.py +163 -6
  42. monkeybot-3.7.0/src/monkeybot/core/tools/background_jobs.py +285 -0
  43. monkeybot-3.7.0/src/monkeybot/core/tools/command_executor.py +73 -0
  44. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/core_tool_executor.py +227 -6
  45. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/sandbox_executor.py +410 -31
  46. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/terminal.py +288 -36
  47. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/tool_kind.py +2 -0
  48. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/routes.py +7 -0
  49. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/app.py +10 -1
  50. monkeybot-3.7.0/tests/core/test_background_jobs.py +531 -0
  51. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_context.py +2 -0
  52. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_doom_loop.py +12 -0
  53. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/test_routes_client_text.py +3 -1
  54. {monkeybot-3.6.1 → monkeybot-3.7.0}/uv.lock +3 -3
  55. monkeybot-3.6.1/integrations/browser-mcp/src/browser_mcp/backend.py +0 -189
  56. {monkeybot-3.6.1 → monkeybot-3.7.0}/.dockerignore +0 -0
  57. {monkeybot-3.6.1 → monkeybot-3.7.0}/.github/workflows/ci.yml +0 -0
  58. {monkeybot-3.6.1 → monkeybot-3.7.0}/.github/workflows/live-eval-smoke.yml +0 -0
  59. {monkeybot-3.6.1 → monkeybot-3.7.0}/.github/workflows/prepare-release.yml +0 -0
  60. {monkeybot-3.6.1 → monkeybot-3.7.0}/.github/workflows/publish-release.yml +0 -0
  61. {monkeybot-3.6.1 → monkeybot-3.7.0}/.gitignore +0 -0
  62. {monkeybot-3.6.1 → monkeybot-3.7.0}/.pre-commit-config.yaml +0 -0
  63. {monkeybot-3.6.1 → monkeybot-3.7.0}/BACKLOG.md +0 -0
  64. {monkeybot-3.6.1 → monkeybot-3.7.0}/CONTRIBUTING.md +0 -0
  65. {monkeybot-3.6.1 → monkeybot-3.7.0}/LICENSE +0 -0
  66. {monkeybot-3.6.1 → monkeybot-3.7.0}/README.md +0 -0
  67. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/pyproject.toml +0 -0
  68. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/skills/monkeybot/SKILL.md +0 -0
  69. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
  70. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/__init__.py +0 -0
  71. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
  72. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
  73. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
  74. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_session.py +0 -0
  75. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
  76. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
  77. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_tool_display.py +0 -0
  78. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_tui.py +0 -0
  79. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
  80. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
  81. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
  82. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
  83. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
  84. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
  85. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
  86. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
  87. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
  88. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
  89. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/compat.py +0 -0
  90. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
  91. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
  92. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
  93. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
  94. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/main.py +0 -0
  95. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
  96. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/output.py +0 -0
  97. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
  98. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/providers.py +0 -0
  99. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
  100. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
  101. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
  102. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
  103. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
  104. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
  105. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
  106. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
  107. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
  108. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
  109. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold.py +0 -0
  110. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
  111. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
  112. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
  113. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -0
  114. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
  115. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
  116. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/goal/SKILL.md +0 -0
  117. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
  118. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
  119. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
  120. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
  121. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
  122. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
  123. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
  124. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
  125. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
  126. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_continue.py +0 -0
  127. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_e2e.py +0 -0
  128. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_errors.py +0 -0
  129. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_file_index.py +0 -0
  130. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_grounding.py +0 -0
  131. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_local_shell.py +0 -0
  132. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_renderer_parity.py +0 -0
  133. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_session.py +0 -0
  134. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_status_bar.py +0 -0
  135. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_theme.py +0 -0
  136. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_tool_display.py +0 -0
  137. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_chat_tui.py +0 -0
  138. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_cli.py +0 -0
  139. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_config_resolve.py +0 -0
  140. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_doctor.py +0 -0
  141. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_extras_catalog.py +0 -0
  142. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_gateway_health.py +0 -0
  143. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
  144. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_realtime_session_controller.py +0 -0
  145. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_run_cmd.py +0 -0
  146. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_runtime_python.py +0 -0
  147. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_scaffold.py +0 -0
  148. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/tests/test_terminal_markdown.py +0 -0
  149. {monkeybot-3.6.1 → monkeybot-3.7.0}/cli/uv.lock +0 -0
  150. {monkeybot-3.6.1 → monkeybot-3.7.0}/docker/Dockerfile +0 -0
  151. {monkeybot-3.6.1 → monkeybot-3.7.0}/docker/demo-model.yaml +0 -0
  152. {monkeybot-3.6.1 → monkeybot-3.7.0}/docker/demo.yaml +0 -0
  153. {monkeybot-3.6.1 → monkeybot-3.7.0}/docker/docker-compose.sandbox.yml +0 -0
  154. {monkeybot-3.6.1 → monkeybot-3.7.0}/docker/opensandbox.docker.toml +0 -0
  155. {monkeybot-3.6.1 → monkeybot-3.7.0}/docker/sandbox.Dockerfile +0 -0
  156. {monkeybot-3.6.1 → monkeybot-3.7.0}/docker-compose.yml +0 -0
  157. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/agent-layout.md +0 -0
  158. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/assets/logo.png +0 -0
  159. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/browser-mcp-perf-baseline.md +0 -0
  160. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/browser-mcp-performance-plan.md +0 -0
  161. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/cloud-deployment-design.md +0 -0
  162. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/deploy-aws-agentcore.md +0 -0
  163. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/deploy-pattern-a-container.md +0 -0
  164. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/deploy-pattern-b-serverless.md +0 -0
  165. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
  166. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/deploy-pattern-d-realtime.md +0 -0
  167. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/features.md +0 -0
  168. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/getting-started.md +0 -0
  169. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/knowledge-layer-fixes.md +0 -0
  170. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/live-evals.md +0 -0
  171. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/mcp.md +0 -0
  172. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/memory-graph-split-plan.md +0 -0
  173. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/migrations/agent-scope-namespacing.md +0 -0
  174. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/migrations/memory-outbox.sql +0 -0
  175. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/observability-runbook.md +0 -0
  176. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/ollama-local.md +0 -0
  177. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/otel-collector.example.yaml +0 -0
  178. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/progressive-loop-tools.md +0 -0
  179. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/progressive-mcp-tools.md +0 -0
  180. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/skills.md +0 -0
  181. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/spill-dynamic-design.md +0 -0
  182. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/sse-gateway-ui.md +0 -0
  183. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/verifier-agent-design.md +0 -0
  184. {monkeybot-3.6.1 → monkeybot-3.7.0}/docs/workspace-index-design.md +0 -0
  185. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/TEST_COVERAGE.md +0 -0
  186. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/assertions.py +0 -0
  187. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/baselines/smoke.json +0 -0
  188. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/baselines/smoke.md +0 -0
  189. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/diff.py +0 -0
  190. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/eval_config.yaml +0 -0
  191. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/models.py +0 -0
  192. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/persistence.py +0 -0
  193. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/report.py +0 -0
  194. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/runner.py +0 -0
  195. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenario_loader.py +0 -0
  196. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/context/summarization_trigger.yaml +0 -0
  197. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/drift/declares_done.yaml +0 -0
  198. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/drift/path_constraint.yaml +0 -0
  199. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/drift/preempt.yaml +0 -0
  200. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/drift/repeat_correction.yaml +0 -0
  201. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/drift/supersession.yaml +0 -0
  202. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/mcp/get_prompt.yaml +0 -0
  203. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/mcp/list_resources.yaml +0 -0
  204. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/mcp/tool_invoke.yaml +0 -0
  205. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/memory/recall_cross_session.yaml +0 -0
  206. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/memory/recall_single_session.yaml +0 -0
  207. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/multi_turn/task_tracking.yaml +0 -0
  208. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/skills/skill_invocation.yaml +0 -0
  209. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/subagents/dispatch_complete.yaml +0 -0
  210. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/tools/core_read.yaml +0 -0
  211. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/tools/core_read_error.yaml +0 -0
  212. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/tools/core_run_command.yaml +0 -0
  213. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +0 -0
  214. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scenarios/tools/core_write.yaml +0 -0
  215. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/scorer.py +0 -0
  216. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/.env.example +0 -0
  217. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/.gitignore +0 -0
  218. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
  219. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
  220. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
  221. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
  222. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +0 -0
  223. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -0
  224. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
  225. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/pyproject.toml +0 -0
  226. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
  227. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/uv.lock +0 -0
  228. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
  229. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
  230. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/suites/drift.yaml +0 -0
  231. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/suites/smoke.yaml +0 -0
  232. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/test_assertions.py +0 -0
  233. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/test_diff.py +0 -0
  234. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/test_judge.py +0 -0
  235. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/test_report.py +0 -0
  236. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/test_runner_sse.py +0 -0
  237. {monkeybot-3.6.1 → monkeybot-3.7.0}/evals/test_scorer.py +0 -0
  238. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/README.md +0 -0
  239. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/agentcore/handler.py +0 -0
  240. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/agentcore/runtime_app.py +0 -0
  241. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/agentengine/handler.py +0 -0
  242. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/cloud-functions/main.py +0 -0
  243. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/lambda/handler.py +0 -0
  244. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/ollama/PrefixStable.Modelfile +0 -0
  245. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
  246. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/skills/diagnostics/README.md +0 -0
  247. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/skills/diagnostics/SKILL.md +0 -0
  248. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/skills/diagnostics/__init__.py +0 -0
  249. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/skills/diagnostics/diagnostics.py +0 -0
  250. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/skills/image-generator/SKILL.md +0 -0
  251. {monkeybot-3.6.1 → monkeybot-3.7.0}/examples/skills/image-generator/generate_image.py +0 -0
  252. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
  253. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
  254. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
  255. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
  256. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
  257. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
  258. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
  259. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
  260. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
  261. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
  262. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
  263. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
  264. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
  265. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
  266. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
  267. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
  268. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +0 -0
  269. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
  270. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
  271. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
  272. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
  273. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
  274. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
  275. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
  276. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
  277. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
  278. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
  279. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
  280. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
  281. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
  282. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
  283. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
  284. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
  285. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
  286. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
  287. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
  288. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
  289. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
  290. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
  291. {monkeybot-3.6.1 → monkeybot-3.7.0}/integrations/browser-mcp/tests/test_tool_surface.py +0 -0
  292. {monkeybot-3.6.1 → monkeybot-3.7.0}/pytest.ini +0 -0
  293. {monkeybot-3.6.1 → monkeybot-3.7.0}/scripts/create_schema.py +0 -0
  294. {monkeybot-3.6.1 → monkeybot-3.7.0}/scripts/precommit-pytest.sh +0 -0
  295. {monkeybot-3.6.1 → monkeybot-3.7.0}/scripts/release.py +0 -0
  296. {monkeybot-3.6.1 → monkeybot-3.7.0}/scripts/smoke_global_cli.sh +0 -0
  297. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/__init__.py +0 -0
  298. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/cli/__init__.py +0 -0
  299. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/cli/__main__.py +0 -0
  300. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/cli/audio_io.py +0 -0
  301. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/cli/gateway_manager.py +0 -0
  302. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/cli/main.py +0 -0
  303. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/cli/push_to_talk.py +0 -0
  304. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/cli/realtime_client.py +0 -0
  305. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/computer/__init__.py +0 -0
  306. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/computer/approvals.py +0 -0
  307. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/computer/permissions.py +0 -0
  308. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/computer/safety.py +0 -0
  309. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/computer/tools.py +0 -0
  310. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/__init__.py +0 -0
  311. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/__init__.py +0 -0
  312. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/catalog.py +0 -0
  313. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/config.py +0 -0
  314. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/freeze.py +0 -0
  315. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/image_preview.py +0 -0
  316. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/resolve.py +0 -0
  317. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/store.py +0 -0
  318. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/text.py +0 -0
  319. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/attachments/tools.py +0 -0
  320. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/bootstrap.py +0 -0
  321. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/config/__init__.py +0 -0
  322. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/config/realtime_config.py +0 -0
  323. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/config/settings.py +0 -0
  324. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/config/validation.py +0 -0
  325. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
  326. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/campaign_context.py +0 -0
  327. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/common.py +0 -0
  328. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/epoch.py +0 -0
  329. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/secret_egress.py +0 -0
  330. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/slash_skills.py +0 -0
  331. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
  332. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/tool_result_ingress.py +0 -0
  333. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/context/tool_shapers.py +0 -0
  334. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/goals/__init__.py +0 -0
  335. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/goals/service.py +0 -0
  336. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/hooks/__init__.py +0 -0
  337. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/__init__.py +0 -0
  338. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/captions.py +0 -0
  339. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/chunking.py +0 -0
  340. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/config.py +0 -0
  341. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/embeddings/__init__.py +0 -0
  342. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/embeddings/base.py +0 -0
  343. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/embeddings/factory.py +0 -0
  344. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/embeddings/gemini.py +0 -0
  345. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/embeddings/nvidia.py +0 -0
  346. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/embeddings/openai_compat.py +0 -0
  347. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/embeddings/sanitize.py +0 -0
  348. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/evidence_guard.py +0 -0
  349. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/extractors.py +0 -0
  350. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/fusion.py +0 -0
  351. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/hook.py +0 -0
  352. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/indexer.py +0 -0
  353. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/links.py +0 -0
  354. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/salience.py +0 -0
  355. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/sqlite_index.py +0 -0
  356. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/subsystem.py +0 -0
  357. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/tool.py +0 -0
  358. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/knowledge/types.py +0 -0
  359. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/layout.py +0 -0
  360. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/llm/__init__.py +0 -0
  361. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/llm/provider.py +0 -0
  362. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
  363. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/llm/usage.py +0 -0
  364. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/lockfile_names.py +0 -0
  365. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/logging_utils.py +0 -0
  366. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/mcp/__init__.py +0 -0
  367. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/mcp/mcp_client.py +0 -0
  368. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
  369. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/__init__.py +0 -0
  370. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/config.py +0 -0
  371. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/hook.py +0 -0
  372. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/ids.py +0 -0
  373. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/ingest.py +0 -0
  374. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
  375. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/observability.py +0 -0
  376. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/outbox.py +0 -0
  377. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/palace.py +0 -0
  378. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/subsystem.py +0 -0
  379. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/uri.py +0 -0
  380. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/memory/writer.py +0 -0
  381. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/messages/__init__.py +0 -0
  382. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
  383. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/messages/tool_integrity.py +0 -0
  384. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/messages/transform_context.py +0 -0
  385. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/path_safety.py +0 -0
  386. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/__init__.py +0 -0
  387. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/backends.py +0 -0
  388. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/db.py +0 -0
  389. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
  390. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/errors.py +0 -0
  391. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
  392. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/firestore.py +0 -0
  393. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
  394. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/goal_ledger.py +0 -0
  395. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/history.py +0 -0
  396. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/postgres.py +0 -0
  397. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/runs.py +0 -0
  398. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
  399. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
  400. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/sqlite.py +0 -0
  401. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/sqlite_backend.py +0 -0
  402. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/sqlite_vector.py +0 -0
  403. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/thread_summary.py +0 -0
  404. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/transcript.py +0 -0
  405. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/usage.py +0 -0
  406. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
  407. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/prompts/__init__.py +0 -0
  408. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/prompts/harness_prompt.py +0 -0
  409. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/prompts/headings.py +0 -0
  410. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/prompts/prompt.py +0 -0
  411. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/__init__.py +0 -0
  412. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/context_budget.py +0 -0
  413. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/doom_loop.py +0 -0
  414. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/events.py +0 -0
  415. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/history_compaction.py +0 -0
  416. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/input_admission.py +0 -0
  417. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/loop.py +0 -0
  418. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/loop_hooks.py +0 -0
  419. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
  420. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
  421. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/loop_usage.py +0 -0
  422. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
  423. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/realtime_loop.py +0 -0
  424. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
  425. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/tool_dispatch.py +0 -0
  426. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
  427. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/subagents/__init__.py +0 -0
  428. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
  429. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
  430. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/subagents/subagent_worker.py +0 -0
  431. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
  432. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/subprocess_groups.py +0 -0
  433. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/testing/__init__.py +0 -0
  434. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
  435. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
  436. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/__init__.py +0 -0
  437. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/ask_user.py +0 -0
  438. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
  439. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/grant_store.py +0 -0
  440. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/inspector.py +0 -0
  441. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
  442. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/patch.py +0 -0
  443. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/path_grant_inspector.py +0 -0
  444. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/permission.py +0 -0
  445. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/spill_inventory.py +0 -0
  446. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
  447. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
  448. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/types.py +0 -0
  449. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/tools/workspace_service.py +0 -0
  450. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/types/__init__.py +0 -0
  451. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/types/content_blocks.py +0 -0
  452. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/types/interfaces.py +0 -0
  453. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/types/types_tools.py +0 -0
  454. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/__init__.py +0 -0
  455. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/actuator.py +0 -0
  456. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/binding.py +0 -0
  457. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/classify.py +0 -0
  458. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/inspector.py +0 -0
  459. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/intervention.py +0 -0
  460. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/judge.py +0 -0
  461. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/ledger.py +0 -0
  462. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/mailbox.py +0 -0
  463. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/match.py +0 -0
  464. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/port.py +0 -0
  465. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/severity.py +0 -0
  466. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/verifier/tracker.py +0 -0
  467. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/workspace/__init__.py +0 -0
  468. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/workspace/factory.py +0 -0
  469. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/workspace/gcs.py +0 -0
  470. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/workspace/local.py +0 -0
  471. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/workspace/protocol.py +0 -0
  472. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/workspace/s3.py +0 -0
  473. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/core/workspace_layout.py +0 -0
  474. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/__init__.py +0 -0
  475. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/bootstrap.py +0 -0
  476. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/main.py +0 -0
  477. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
  478. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
  479. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/app.py +0 -0
  480. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
  481. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
  482. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
  483. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/manager.py +0 -0
  484. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
  485. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/session.py +0 -0
  486. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
  487. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/realtime_main.py +0 -0
  488. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
  489. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/goal_routes.py +0 -0
  490. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
  491. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/models.py +0 -0
  492. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/reload.py +0 -0
  493. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
  494. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/request_storage.py +0 -0
  495. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/routes.py +0 -0
  496. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
  497. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
  498. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/session_bus.py +0 -0
  499. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/sse.py +0 -0
  500. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
  501. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/observability/__init__.py +0 -0
  502. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/observability/_state.py +0 -0
  503. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/observability/instrumentation.py +0 -0
  504. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/observability/propagation.py +0 -0
  505. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/observability/spans.py +0 -0
  506. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/observability/sqlite_exporter.py +0 -0
  507. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/__init__.py +0 -0
  508. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
  509. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/_openai_compat.py +0 -0
  510. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/_utils.py +0 -0
  511. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/bedrock.py +0 -0
  512. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/claude.py +0 -0
  513. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/gemini.py +0 -0
  514. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/gemini_live.py +0 -0
  515. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/huggingface.py +0 -0
  516. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/model_capabilities.py +0 -0
  517. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/nvidia.py +0 -0
  518. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/ollama.py +0 -0
  519. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/openai.py +0 -0
  520. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/openrouter.py +0 -0
  521. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/pricing.py +0 -0
  522. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/request_budget.py +0 -0
  523. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/sampling.py +0 -0
  524. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/providers/vertex_claude.py +0 -0
  525. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/scaffold/__init__.py +0 -0
  526. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/scheduler/__init__.py +0 -0
  527. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/scheduler/__main__.py +0 -0
  528. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/scheduler/engine.py +0 -0
  529. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
  530. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/scheduler/interval.py +0 -0
  531. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/scheduler/tick_result.py +0 -0
  532. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/scheduler/worker.py +0 -0
  533. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/subagents/__init__.py +0 -0
  534. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
  535. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
  536. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/todo_list/__init__.py +0 -0
  537. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/todo_list/store.py +0 -0
  538. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/todo_list/tool.py +0 -0
  539. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/web_search/__init__.py +0 -0
  540. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
  541. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
  542. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
  543. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
  544. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/web_search/protocol.py +0 -0
  545. {monkeybot-3.6.1 → monkeybot-3.7.0}/src/monkeybot/web_search/tool.py +0 -0
  546. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/__init__.py +0 -0
  547. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/acceptance/test_observability_acceptance.py +0 -0
  548. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/cli/__init__.py +0 -0
  549. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/cli/test_gateway_manager.py +0 -0
  550. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/cli/test_main.py +0 -0
  551. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/cli/test_push_to_talk.py +0 -0
  552. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/cli/test_realtime_client.py +0 -0
  553. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/computer/__init__.py +0 -0
  554. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/computer/test_approvals.py +0 -0
  555. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/computer/test_computer_tools.py +0 -0
  556. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/computer/test_package_init.py +0 -0
  557. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/computer/test_path_policy.py +0 -0
  558. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/computer/test_permissions.py +0 -0
  559. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/computer/test_subagent_exclusion.py +0 -0
  560. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/computer/test_wiring.py +0 -0
  561. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/conftest.py +0 -0
  562. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/__init__.py +0 -0
  563. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
  564. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/memory/helpers.py +0 -0
  565. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/memory/in_memory_palace.py +0 -0
  566. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/memory/test_mempalace.py +0 -0
  567. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/memory/test_review_fixes.py +0 -0
  568. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_agent_layout.py +0 -0
  569. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_ask_user.py +0 -0
  570. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_attachment_freeze.py +0 -0
  571. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_attachment_store.py +0 -0
  572. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_bootstrap.py +0 -0
  573. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_config_extensions.py +0 -0
  574. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_content_blocks.py +0 -0
  575. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_context_budget.py +0 -0
  576. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_context_epoch.py +0 -0
  577. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_core_tool_executor.py +0 -0
  578. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_durable_events.py +0 -0
  579. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_durable_runs.py +0 -0
  580. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_empty_completion.py +0 -0
  581. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_env_map_grep_gates.py +0 -0
  582. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_events.py +0 -0
  583. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_evidence_guard.py +0 -0
  584. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_firestore_history.py +0 -0
  585. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
  586. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_firestore_usage.py +0 -0
  587. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_fs_isolation.py +0 -0
  588. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_gemini_history_replay.py +0 -0
  589. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_goal_ledger.py +0 -0
  590. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_goal_persistence.py +0 -0
  591. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_goals.py +0 -0
  592. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_grant_store.py +0 -0
  593. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_harness_prompt.py +0 -0
  594. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_history.py +0 -0
  595. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_history_compaction_split.py +0 -0
  596. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_hooks.py +0 -0
  597. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_image_preview.py +0 -0
  598. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_input_admission.py +0 -0
  599. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_inspector.py +0 -0
  600. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_chunking.py +0 -0
  601. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_chunking_rank.py +0 -0
  602. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_config.py +0 -0
  603. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_embeddings.py +0 -0
  604. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_fts.py +0 -0
  605. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_fusion.py +0 -0
  606. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_fusion_ann.py +0 -0
  607. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_hook.py +0 -0
  608. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_indexer.py +0 -0
  609. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_links.py +0 -0
  610. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_media.py +0 -0
  611. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_salience.py +0 -0
  612. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_single_writer.py +0 -0
  613. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_subsystem.py +0 -0
  614. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_knowledge_vectors.py +0 -0
  615. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_layout.py +0 -0
  616. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_logging_utils.py +0 -0
  617. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_loop.py +0 -0
  618. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_loop_hooks.py +0 -0
  619. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_loop_observability.py +0 -0
  620. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_loop_transcript.py +0 -0
  621. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_mcp_client.py +0 -0
  622. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_memory_layout_migrate.py +0 -0
  623. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_message_pipeline.py +0 -0
  624. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_mocks_realtime_provider.py +0 -0
  625. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_patch.py +0 -0
  626. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_path_grant_inspector.py +0 -0
  627. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_path_safety.py +0 -0
  628. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_permission.py +0 -0
  629. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_pricing.py +0 -0
  630. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_progress_publish.py +0 -0
  631. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_progress_tracker.py +0 -0
  632. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_prompt.py +0 -0
  633. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_provider_contract.py +0 -0
  634. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_provider_stream_mapper.py +0 -0
  635. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_realtime_loop.py +0 -0
  636. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_replace_fuzzy.py +0 -0
  637. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_run_command_parse.py +0 -0
  638. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_runs.py +0 -0
  639. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_runtime_config_snapshot.py +0 -0
  640. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_runtime_env.py +0 -0
  641. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_sandbox_executor.py +0 -0
  642. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_scheduled_loops.py +0 -0
  643. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_secret_egress.py +0 -0
  644. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_session_turn_locks.py +0 -0
  645. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_settlement.py +0 -0
  646. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_slash_skills.py +0 -0
  647. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_spill_dynamic.py +0 -0
  648. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_spill_inventory.py +0 -0
  649. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_storage_backends.py +0 -0
  650. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_subagent_proto.py +0 -0
  651. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_subagent_trace_propagation.py +0 -0
  652. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_subagent_worker_paths.py +0 -0
  653. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_terminal.py +0 -0
  654. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_thread_summary_wire.py +0 -0
  655. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_tool_def_schema.py +0 -0
  656. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_tool_integrity.py +0 -0
  657. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_tool_result_ingress.py +0 -0
  658. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_tool_shapers.py +0 -0
  659. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_transcript.py +0 -0
  660. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_truncated_tool_batch.py +0 -0
  661. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_usage.py +0 -0
  662. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_usage_migration.py +0 -0
  663. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_utterance_buffer.py +0 -0
  664. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_verifier_binding.py +0 -0
  665. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_verifier_inspector.py +0 -0
  666. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_verifier_judge.py +0 -0
  667. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_verifier_mailbox_lifecycle.py +0 -0
  668. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_verifier_sticky_nudge.py +0 -0
  669. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_worker_pool.py +0 -0
  670. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_workspace_extra_read_roots.py +0 -0
  671. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_workspace_layout.py +0 -0
  672. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_workspace_symlinks.py +0 -0
  673. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/test_workspace_write_scope.py +0 -0
  674. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/workspace/test_factory.py +0 -0
  675. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/workspace/test_local_storage.py +0 -0
  676. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/core/workspace/test_protocol_contract.py +0 -0
  677. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/__init__.py +0 -0
  678. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/eval_hook.py +0 -0
  679. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenario_runner.py +0 -0
  680. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
  681. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
  682. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
  683. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
  684. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
  685. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
  686. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_read.yaml +0 -0
  687. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
  688. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
  689. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_search_knowledge.yaml +0 -0
  690. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
  691. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
  692. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
  693. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/tool_write.yaml +0 -0
  694. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
  695. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/test_agent_behavior.py +0 -0
  696. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/test_memory_knowledge_routing.py +0 -0
  697. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/evals/test_verifier_port.py +0 -0
  698. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/__init__.py +0 -0
  699. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/__init__.py +0 -0
  700. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/test_app.py +0 -0
  701. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/test_deps.py +0 -0
  702. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/test_guardrails.py +0 -0
  703. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/test_manager.py +0 -0
  704. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/test_metrics.py +0 -0
  705. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/test_session.py +0 -0
  706. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/realtime/test_wire.py +0 -0
  707. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/sse/test_attachments.py +0 -0
  708. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/sse/test_config_reload.py +0 -0
  709. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/sse/test_create_session_model.py +0 -0
  710. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/sse/test_gateway_runtime.py +0 -0
  711. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/sse/test_routes.py +0 -0
  712. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
  713. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/sse/test_session_bus.py +0 -0
  714. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/sse/test_transcript_wiring.py +0 -0
  715. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/test_otel_fastapi.py +0 -0
  716. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/test_otel_lifespan.py +0 -0
  717. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
  718. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/test_realtime_main.py +0 -0
  719. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/test_resolve_provider.py +0 -0
  720. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/test_sse_events.py +0 -0
  721. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
  722. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/integration/__init__.py +0 -0
  723. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
  724. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/integration/test_observability_integration.py +0 -0
  725. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/integration/test_prompt_caching_integration.py +0 -0
  726. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/conftest.py +0 -0
  727. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_init.py +0 -0
  728. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_instrumentation.py +0 -0
  729. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_loop_hook_spans.py +0 -0
  730. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_propagation.py +0 -0
  731. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_span_contract.py +0 -0
  732. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_spans.py +0 -0
  733. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_sqlite_exporter.py +0 -0
  734. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_truncate.py +0 -0
  735. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/observability/test_turn_complete_trace.py +0 -0
  736. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/conftest.py +0 -0
  737. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_anthropic_cache.py +0 -0
  738. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_anthropic_history.py +0 -0
  739. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_bedrock_converse.py +0 -0
  740. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_bedrock_estimate.py +0 -0
  741. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_gemini_history.py +0 -0
  742. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_gemini_live.py +0 -0
  743. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_gemini_usage.py +0 -0
  744. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_huggingface.py +0 -0
  745. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_model_capabilities.py +0 -0
  746. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_nvidia.py +0 -0
  747. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_ollama.py +0 -0
  748. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_openai_byte_budget.py +0 -0
  749. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_openai_compat_usage.py +0 -0
  750. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_openai_history.py +0 -0
  751. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_pricing.py +0 -0
  752. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_request_budget.py +0 -0
  753. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
  754. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_sampling.py +0 -0
  755. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_sonnet5_sampling.py +0 -0
  756. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_source_grep_gates.py +0 -0
  757. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/providers/test_vertex_claude_history.py +0 -0
  758. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/scheduler/test_engine.py +0 -0
  759. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/scheduler/test_interval.py +0 -0
  760. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/skills/__init__.py +0 -0
  761. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/skills/test_generate_image_script.py +0 -0
  762. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/test_cold_start.py +0 -0
  763. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/test_packaging_config.py +0 -0
  764. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/test_release_script.py +0 -0
  765. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/todo_list/test_todo_list.py +0 -0
  766. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/web_search/__init__.py +0 -0
  767. {monkeybot-3.6.1 → monkeybot-3.7.0}/tests/web_search/test_web_search.py +0 -0
@@ -6,6 +6,25 @@ the project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ## [core v3.7.0] - 2026-09-30
10
+
11
+ ### Added
12
+
13
+ - `run_command` can start a long command in the background and return `job_id` and `log_path` immediately. `await_command` pages its output until it exits, and `kill_command` stops it, on the local terminal and in the OpenSandbox executor. A turn cannot finish while a job is still running; leftover jobs are killed when the turn ends. The sandbox renews its lease while a job runs, up to the job time ceiling.
14
+
15
+ ## [browser v0.8.1] - 2026-09-28
16
+
17
+ ### Fixed
18
+
19
+ - The per-chat browser IPC router honors browser-harness 0.1.13's response timeout, so browser tools can drive the page again.
20
+
21
+ ## [browser v0.8.0] - 2026-09-27
22
+
23
+ ### Added
24
+
25
+ - Each Spaces chat gets its own browser daemon, tab registry, and lock, so simultaneous chats no longer restart each other or drop tab aliases. Local Chrome and AgentCore stay on one shared browser. An idle daemon stops after 15 minutes and keeps that chat's tab aliases for the next call.
26
+ - The per-chat tab cap is 10. When Spaces refuses a tab because the app-wide live-tab cap is full, the tool returns `tab_limit_reached` with `"scope": "app"` instead of this chat's limit.
27
+
9
28
  ## [core v3.6.1] - 2026-09-26
10
29
 
11
30
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: monkeybot
3
- Version: 3.6.1
3
+ Version: 3.7.0
4
4
  Summary: monkeybot agent harness — FastAPI SSE gateway, owned loop, SQLite, and MCP.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -34,8 +34,9 @@ only. Pass `expected_origin` so a login cannot land on the wrong site, and check
34
34
  the returned `origin` before reporting success.
35
35
 
36
36
  Tabs use aliases (`t1`, `t2`, …). Reads (`get_elements`, `page_info`, `js`,
37
- `read_tabs`) never move focus; actions do. At most five agent-controlled tabs —
38
- if you hit the cap, ask the user which to close, then `browser_close_tab`. Close
37
+ `read_tabs`) never move focus; actions do. At most 10 agent-controlled tabs —
38
+ if you hit the cap, ask the user which to close, then `browser_close_tab`. If the
39
+ error scope is `app`, the Spaces window is full across chats, not this chat's cap. Close
39
40
  tabs you opened. `browser_login` still targets the tab the user has focused.
40
41
 
41
42
  Finish browser sessions with `browser_stop`.
@@ -241,6 +241,14 @@ sandbox:
241
241
  server_url: http://localhost:18080
242
242
  image: python:3.12
243
243
  ttl_seconds: 1800
244
+ # Background command caps. Jobs longer than max_job_seconds fail and should
245
+ # move to a broker-owned build. renew_interval_seconds extends the worker
246
+ # while a job is running (0 renews once at start). await_* bounds await_command.
247
+ max_background_jobs: 4
248
+ max_job_seconds: 3300
249
+ renew_interval_seconds: 300
250
+ await_default_wait_seconds: 300
251
+ await_max_wait_seconds: 600
244
252
  # Set false only for a remote sandbox server with no shared filesystem. It
245
253
  # then runs compute-only commands and refuses workspace/skills file access.
246
254
  shared_filesystem: true
@@ -191,9 +191,14 @@ synchronization layer.
191
191
 
192
192
  ## In-app bridge extensions
193
193
 
194
- When the Spaces in-app browser is bound, each tool call may announce which chat
195
- it is acting for so new tabs stay attached to that chat. AgentCore and Browser
196
- Use Cloud backends never send this.
194
+ When the Spaces in-app browser is bound, each chat gets its own harness daemon
195
+ and tab list (10 agent tabs). The daemon's CDP URL carries `run` and `chat`,
196
+ and the first bind also announces the chat for older apps. AgentCore and
197
+ Browser Use Cloud backends never send this and stay on one shared browser.
198
+ An idle chat's daemon stops after 15 minutes; its tab aliases stay so the next
199
+ call can reattach. If Spaces refuses a tab because the app-wide live-tab cap
200
+ is full, the tool returns `tab_limit_reached` with `"scope": "app"` (CDP error
201
+ code `-32010`) instead of this chat's limit of 10.
197
202
 
198
203
  ### MCP request meta
199
204
 
@@ -208,7 +213,7 @@ server then announces `chatKey` as `null`.
208
213
 
209
214
  ### `Monkeybot.setChatScope`
210
215
 
211
- On every in-app tool call, after the harness binds and before other CDP
216
+ Once per daemon connection, after the harness binds and before other CDP
212
217
  commands, the backend sends:
213
218
 
214
219
  ```json
@@ -67,7 +67,7 @@ Text-only models should never rely on screenshots for page understanding — use
67
67
 
68
68
  Tabs have short aliases (`t1`, `t2`, …) or a name you pass to `browser_open_tab(alias=...)`. **Reads never move focus** (`browser_get_elements(tab=...)`, `browser_page_info`, `browser_js`, `browser_wait_for`, `browser_read_tabs`, `browser_extract`). **Actions do** (click, input, select, fill, fill_form, click_text, act, screenshot, …) because headed Chrome throttles timers and pauses painting in background tabs.
69
69
 
70
- Open a second tab to compare pages, keep a form while reading docs, or fan out with `browser_read_tabs`. At most five agent-controlled tabs (`BROWSER_MCP_MAX_TABS`). If you hit the cap, relay the returned list (aliases, titles, last-used) to the user, ask which to close, then `browser_close_tab` and retry — never close a tab without their confirmation. Close tabs you opened when done. Do not expect a background SPA to finish loading while unfocused. `browser_login` still targets the tab the **user** has focused, not `tab=`.
70
+ Open a second tab to compare pages, keep a form while reading docs, or fan out with `browser_read_tabs`. At most 10 agent-controlled tabs (`BROWSER_MCP_MAX_TABS`). If you hit the cap, relay the returned list (aliases, titles, last-used) to the user, ask which to close, then `browser_close_tab` and retry — never close a tab without their confirmation. If the error scope is `app`, the Spaces window is full across chats; do not describe that as this chat's 10-tab cap. Close tabs you opened when done. Do not expect a background SPA to finish loading while unfocused. `browser_login` still targets the tab the **user** has focused, not `tab=`.
71
71
 
72
72
  ## After learning something non-obvious
73
73
 
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "monkeybot-browser-mcp"
7
- version = "0.7.2"
7
+ version = "0.8.1"
8
8
  description = "monkeybot MCP server wrapping browser-harness for real-browser control and site playbooks."
9
9
  requires-python = ">=3.11"
10
10
  dependencies = [
@@ -4,18 +4,17 @@ from __future__ import annotations
4
4
 
5
5
  import functools
6
6
  import inspect
7
- import threading
8
7
  from collections.abc import Callable
9
8
  from dataclasses import dataclass
10
9
  from typing import Any, ParamSpec
11
10
 
11
+ import anyio
12
12
  from mcp.server.fastmcp import FastMCP
13
13
 
14
- from browser_mcp import backend, in_app_cdp, perf, results, tab_ops, tabs
14
+ from browser_mcp import backend, chat_context, chat_scope, in_app_cdp, perf, results, tab_ops, tabs
15
15
  from browser_mcp.observe import resolve_action_observe
16
16
 
17
17
  _P = ParamSpec("_P")
18
- _TOOL_LOCK = threading.RLock()
19
18
 
20
19
  mcp = FastMCP(
21
20
  "browser",
@@ -73,15 +72,34 @@ mcp = FastMCP(
73
72
  "Actions (click, input, select, fill, click_text, act, screenshot, …) focus the tab first "
74
73
  "because background tabs throttle timers and pause painting. Open a second "
75
74
  "tab to compare pages, keep a form while reading docs, or fan out with "
76
- "browser_read_tabs. At most five agent-controlled tabs; if you hit the cap, "
75
+ "browser_read_tabs. At most 10 agent-controlled tabs; if you hit the cap, "
77
76
  "relay the returned tab list to the user, ask which to close, then "
78
77
  "browser_close_tab and retry — never close a tab without their confirmation. "
78
+ "If the error's scope is \"app\", Spaces refused the tab because the window "
79
+ "is at its live-tab cap across chats; say that, and do not pretend the cap "
80
+ "is this chat's 10 tabs. "
79
81
  "Close tabs you opened when done. Do not expect a background SPA to finish "
80
82
  "loading while unfocused."
81
83
  ),
82
84
  )
83
85
 
84
86
 
87
+ def _run_tool(ctx: chat_context.ChatContext, fn: Callable[_P, str], args: tuple[Any, ...], kwargs: dict[str, Any]) -> str:
88
+ """Run one tool against ``ctx`` only. Other chats keep their own lock and daemon."""
89
+ tokens = chat_context.enter(ctx)
90
+ try:
91
+ with ctx.lock, perf.timed_tool(fn.__name__) as rec:
92
+ try:
93
+ result = fn(*args, **kwargs)
94
+ rec.observe(result)
95
+ return result
96
+ except Exception as exc:
97
+ rec.fail()
98
+ in_app_cdp._reraise_public_harness_error(exc)
99
+ finally:
100
+ chat_context.leave(tokens)
101
+
102
+
85
103
  def _public_tool(fn: Callable[_P, str]) -> Callable[_P, str]:
86
104
  """Register-time wrapper that keeps CDP tokens out of tool failures.
87
105
 
@@ -89,23 +107,35 @@ def _public_tool(fn: Callable[_P, str]) -> Callable[_P, str]:
89
107
  endpoint it connects to, and FastMCP turns any raised exception into
90
108
  agent-visible ``ToolError`` text. Redacting inside individual helpers only
91
109
  covers the call sites someone remembered, so every tool goes through here.
110
+
111
+ The object FastMCP calls is ``_async_entry`` (see ``server``): the thread
112
+ id is read on the event loop, then context lookup and the tool body run
113
+ in a worker under that chat's lock. Context lookup can wait out a daemon
114
+ shutdown, so it must not run on the loop. Direct calls stay synchronous
115
+ so tests can invoke tools without an event loop. Two chats therefore run
116
+ at the same time; one chat's calls stay ordered.
92
117
  """
93
118
 
94
119
  @functools.wraps(fn)
95
120
  def wrapper(*args: _P.args, **kwargs: _P.kwargs) -> str:
96
- with _TOOL_LOCK, perf.timed_tool(fn.__name__) as rec:
97
- try:
98
- result = fn(*args, **kwargs)
99
- rec.observe(result)
100
- return result
101
- except Exception as exc:
102
- rec.fail()
103
- in_app_cdp._reraise_public_harness_error(exc)
121
+ ctx = chat_context.context_for_call(chat_scope.current_thread_id())
122
+ return _run_tool(ctx, fn, args, kwargs)
123
+
124
+ @functools.wraps(fn)
125
+ async def async_entry(*args: _P.args, **kwargs: _P.kwargs) -> str:
126
+ thread_id = chat_scope.current_thread_id()
127
+
128
+ def run() -> str:
129
+ ctx = chat_context.context_for_call(thread_id)
130
+ return _run_tool(ctx, fn, args, kwargs)
131
+
132
+ return await anyio.to_thread.run_sync(run)
104
133
 
105
134
  # FastMCP copies fn.__doc__ as-is (not inspect.getdoc), so without this the
106
135
  # model sees the 4-space body indent from the source. @mcp.tool() wraps
107
136
  # this function, so the cleaned docstring is what list_tools returns.
108
137
  wrapper.__doc__ = inspect.getdoc(fn)
138
+ wrapper._async_entry = async_entry # type: ignore[attr-defined]
109
139
  return wrapper
110
140
 
111
141
 
@@ -0,0 +1,257 @@
1
+ """Browser backend binding: in-app CDP, local harness daemon, or AgentCore.
2
+
3
+ In-app chats each own a :class:`browser_mcp.chat_context.ChatContext` (daemon,
4
+ tab registry, lock). Local Chrome and AgentCore use
5
+ :func:`browser_mcp.chat_context.shared`.
6
+ """
7
+
8
+ from __future__ import annotations
9
+
10
+ import contextlib
11
+ import logging
12
+ from typing import Any
13
+
14
+ from browser_mcp import agentcore, chat_context, chat_scope, dom_indexing, in_app_cdp, perf
15
+
16
+ logger = logging.getLogger(__name__)
17
+
18
+ _agentcore_admin: agentcore.AgentCoreAdmin | None = None
19
+
20
+
21
+ def mark_unbound() -> None:
22
+ chat_context.active().bound_cdp = None
23
+
24
+
25
+ def in_app_backend_active() -> bool:
26
+ """True when the live binding is Monkeyapp's in-app CDP bridge."""
27
+ ctx = chat_context.active()
28
+ return (
29
+ ctx.bh is not None
30
+ and ctx.bound_cdp not in (None, "agentcore")
31
+ and in_app_cdp._env_set_from_in_app_file
32
+ )
33
+
34
+
35
+ def in_app_helpers() -> Any | None:
36
+ """Return in-app CDP helpers when the in-app backend is bound, else None."""
37
+ if not in_app_backend_active():
38
+ return None
39
+ ctx = chat_context.active()
40
+ assert ctx.bh is not None
41
+ helpers, _ = ctx.bh
42
+ return helpers
43
+
44
+
45
+ def _ensure_active_context() -> chat_context.ChatContext:
46
+ """Bind the context for this call when the tool wrapper has not already."""
47
+ ctx = chat_context.context_for_call(chat_scope.current_thread_id())
48
+ if chat_context.current_context.get() is not ctx:
49
+ chat_context.current_context.set(ctx)
50
+ chat_context.current_daemon.set(ctx.daemon_name)
51
+ return ctx
52
+
53
+
54
+ def teardown_bound_backend() -> None:
55
+ """Tear down whatever backend the active context is bound to, if any.
56
+
57
+ Clears ``bh`` before attempting the (possibly failing) teardown call, so a
58
+ raised exception here never leaves stale backend state behind for the next
59
+ ``browser_harness()`` call to mistakenly reuse. Dispatches on ``bound_cdp``
60
+ rather than introspecting the admin object, since the non-agentcore path
61
+ always re-imports (and stops) the real ``browser_harness.admin`` module.
62
+ """
63
+ ctx = chat_context.active()
64
+ if ctx.bh is None:
65
+ return
66
+ helpers, admin = ctx.bh
67
+ is_agentcore = ctx.bound_cdp == "agentcore"
68
+ with contextlib.suppress(Exception):
69
+ ctx.registry.detach_all(helpers)
70
+ ctx.bh = None
71
+ ctx.bound_cdp = None
72
+ dom_indexing.clear_registered_targets()
73
+ chat_scope.reset()
74
+ if is_agentcore:
75
+ admin.stop_session()
76
+ from browser_mcp import playwright_helpers
77
+
78
+ playwright_helpers.disconnect()
79
+ return
80
+ if ctx.isolated:
81
+ chat_context.drop(ctx)
82
+ return
83
+ from browser_harness import admin as bh_admin
84
+
85
+ bh_admin.restart_daemon()
86
+
87
+
88
+ def _with_perf_helpers(bh: tuple[Any, Any]) -> tuple[Any, Any]:
89
+ helpers, admin = bh
90
+ return perf.wrap_helpers(helpers), admin
91
+
92
+
93
+ def _announce_in_app(helpers: Any, ctx: chat_context.ChatContext) -> None:
94
+ """Tell an older app which chat this connection serves. Once per bind.
95
+
96
+ Current apps read ``chat=`` from the WebSocket URL, so a repeat announce
97
+ is only needed after the daemon reconnects. Playbook/login skip this by
98
+ not binding.
99
+ """
100
+ if not in_app_cdp._env_set_from_in_app_file or ctx.announced:
101
+ return
102
+ chat_scope.announce(helpers, ctx.thread_id)
103
+ ctx.announced = True
104
+
105
+
106
+ def _reconnect_agentcore() -> tuple[str, dict[str, str]]:
107
+ """Force a fresh AgentCore session (stop + restart) and return new ws creds.
108
+
109
+ Registered with playwright_helpers as its reconnect hook: a stale/expired
110
+ AgentCore session (~15-30 min TTL) leaves the old ws connection dead, and
111
+ plain ensure_session() would just re-sign headers for the same (already
112
+ dead) session, so the old session is explicitly stopped first.
113
+ """
114
+ assert _agentcore_admin is not None
115
+ _agentcore_admin.stop_session()
116
+ return _agentcore_admin.ensure_session()
117
+
118
+
119
+ def _agentcore_browser_harness(ctx: chat_context.ChatContext) -> tuple[Any, Any]:
120
+ """Bind the shared context to AgentCore (StartBrowserSession + Playwright)."""
121
+ global _agentcore_admin
122
+ from browser_mcp import playwright_helpers
123
+
124
+ if _agentcore_admin is None:
125
+ _agentcore_admin = agentcore.AgentCoreAdmin(agentcore.resolve_region())
126
+
127
+ ws_url, headers = _agentcore_admin.ensure_session()
128
+ playwright_helpers.connect(ws_url, headers)
129
+ playwright_helpers.set_reconnect_hook(_reconnect_agentcore)
130
+ ctx.bh = (playwright_helpers, _agentcore_admin)
131
+ ctx.bound_cdp = "agentcore"
132
+ return ctx.bh
133
+
134
+
135
+ def _ensure_harness_daemon(
136
+ ctx: chat_context.ChatContext, endpoint: str | None
137
+ ) -> tuple[Any, Any]:
138
+ """Start or reuse this context's daemon without touching any other chat's."""
139
+ from browser_harness import admin, helpers
140
+
141
+ if ctx.bh is not None and endpoint == ctx.bound_cdp:
142
+ return ctx.bh
143
+
144
+ name = ctx.daemon_name
145
+ alive = admin.daemon_alive(name) if name else admin.daemon_alive()
146
+ if alive and ctx.bound_cdp != endpoint:
147
+ logger.info(
148
+ "browser-mcp: replacing harness daemon %s for CDP %s (was %s)",
149
+ name or "default",
150
+ in_app_cdp._redact_cdp_token(str(endpoint)) if endpoint else endpoint,
151
+ in_app_cdp._redact_cdp_token(str(ctx.bound_cdp)) if ctx.bound_cdp else ctx.bound_cdp,
152
+ )
153
+ if name:
154
+ admin.restart_daemon(name)
155
+ else:
156
+ admin.restart_daemon()
157
+ ctx.bh = None
158
+ ctx.announced = False
159
+
160
+ env: dict[str, str] | None = None
161
+ if ctx.isolated and endpoint:
162
+ env = {"BU_CDP_WS": endpoint} if endpoint.startswith(("ws://", "wss://")) else {"BU_CDP_URL": endpoint}
163
+ if name:
164
+ admin.ensure_daemon(name=name, env=env)
165
+ else:
166
+ admin.ensure_daemon()
167
+ ctx.bh = (helpers, admin)
168
+ ctx.bound_cdp = endpoint
169
+ return ctx.bh
170
+
171
+
172
+ def browser_harness() -> tuple[Any, Any]:
173
+ """Lazy import + daemon bootstrap on first browser tool use.
174
+
175
+ When an explicit CDP URL is configured (env or Monkeyapp runtime file) and the
176
+ live daemon was bound to a different endpoint (or none — i.e. local Chrome),
177
+ bounce that daemon so tool calls drive the in-app panel instead.
178
+ BROWSER_BACKEND=agentcore (with no explicit CDP endpoint) dispatches to AWS
179
+ Bedrock AgentCore Browser instead.
180
+
181
+ In-app chats each get their own daemon. Bouncing one never restarts another.
182
+ """
183
+ chat_context.install_send_router()
184
+ in_app_cdp._apply_in_app_cdp_url()
185
+ ctx = _ensure_active_context()
186
+ endpoint = (
187
+ in_app_cdp.daemon_cdp_endpoint(ctx.thread_id) if ctx.isolated else in_app_cdp._apply_in_app_cdp_url()
188
+ )
189
+
190
+ if agentcore.agentcore_backend_requested():
191
+ chat_context.stop_all_isolated()
192
+ shared = chat_context.shared()
193
+ if chat_context.current_context.get() is not shared:
194
+ chat_context.current_context.set(shared)
195
+ chat_context.current_daemon.set(None)
196
+ if shared.bh is not None and shared.bound_cdp == "agentcore":
197
+ return _with_perf_helpers(shared.bh)
198
+ teardown_bound_backend()
199
+ return _with_perf_helpers(_agentcore_browser_harness(shared))
200
+
201
+ if ctx.bound_cdp == "agentcore":
202
+ teardown_bound_backend()
203
+ ctx = _ensure_active_context()
204
+
205
+ if ctx.bh is not None and endpoint == ctx.bound_cdp:
206
+ wrapped = _with_perf_helpers(ctx.bh)
207
+ _announce_in_app(wrapped[0], ctx)
208
+ return wrapped
209
+
210
+ bh = _ensure_harness_daemon(ctx, endpoint)
211
+ _announce_in_app(bh[0], ctx)
212
+ return _with_perf_helpers(bh)
213
+
214
+
215
+ def stop_active_backend_best_effort() -> None:
216
+ """Stop the backend for the active chat.
217
+
218
+ ``browser_stop`` uses this so one chat does not tear down another chat's
219
+ daemon. Process exit uses :func:`stop_all_backends_best_effort`, which
220
+ also stops a leftover default daemon this process may never have bound.
221
+ """
222
+ from browser_mcp import tab_ops
223
+
224
+ ctx = chat_context.active()
225
+ if ctx.bound_cdp == "agentcore":
226
+ if ctx.bh is not None:
227
+ helpers, _ = ctx.bh
228
+ with contextlib.suppress(Exception):
229
+ tab_ops._close_agent_opened_tabs(helpers)
230
+ teardown_bound_backend()
231
+ return
232
+ if ctx.bh is not None:
233
+ helpers, _ = ctx.bh
234
+ with contextlib.suppress(Exception):
235
+ tab_ops._close_agent_opened_tabs(helpers)
236
+ ctx.bh = None
237
+ ctx.bound_cdp = None
238
+ ctx.announced = False
239
+ if ctx.isolated:
240
+ chat_context.drop(ctx)
241
+ return
242
+ chat_scope.reset()
243
+ from browser_harness import admin
244
+
245
+ admin.restart_daemon()
246
+
247
+
248
+ def stop_all_backends_best_effort() -> None:
249
+ """Stop every per-chat daemon, then the shared/default one.
250
+
251
+ Shutdown must still restart the default daemon even when this process
252
+ never bound it: a leftover Browser Use Cloud daemon from an earlier
253
+ process keeps billing until something stops it.
254
+ """
255
+ chat_context.stop_all_isolated()
256
+ chat_context.deactivate()
257
+ stop_active_backend_best_effort()