monkeybot 3.1.0__tar.gz → 3.2.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 (734) hide show
  1. {monkeybot-3.1.0 → monkeybot-3.2.0}/CHANGELOG.md +18 -0
  2. {monkeybot-3.1.0 → monkeybot-3.2.0}/PKG-INFO +1 -1
  3. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/browser-mcp.md +30 -2
  4. monkeybot-3.2.0/docs/live-evals.md +112 -0
  5. monkeybot-3.2.0/docs/verifier-agent-design.md +828 -0
  6. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/assertions.py +77 -5
  7. monkeybot-3.2.0/evals/baselines/smoke.json +408 -0
  8. monkeybot-3.2.0/evals/baselines/smoke.md +55 -0
  9. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/models.py +14 -0
  10. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/runner.py +44 -2
  11. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/context/summarization_trigger.yaml +1 -0
  12. monkeybot-3.2.0/evals/scenarios/drift/declares_done.yaml +20 -0
  13. monkeybot-3.2.0/evals/scenarios/drift/path_constraint.yaml +26 -0
  14. monkeybot-3.2.0/evals/scenarios/drift/preempt.yaml +20 -0
  15. monkeybot-3.2.0/evals/scenarios/drift/repeat_correction.yaml +21 -0
  16. monkeybot-3.2.0/evals/scenarios/drift/supersession.yaml +19 -0
  17. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/mcp/get_prompt.yaml +1 -0
  18. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/mcp/list_resources.yaml +1 -0
  19. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/mcp/tool_invoke.yaml +1 -0
  20. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/memory/recall_cross_session.yaml +1 -0
  21. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/memory/recall_single_session.yaml +1 -0
  22. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/multi_turn/task_tracking.yaml +1 -0
  23. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/skills/skill_invocation.yaml +1 -0
  24. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/subagents/dispatch_complete.yaml +1 -0
  25. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_read.yaml +1 -0
  26. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_read_error.yaml +1 -0
  27. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_run_command.yaml +1 -0
  28. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +1 -0
  29. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_write.yaml +1 -0
  30. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scorer.py +11 -0
  31. monkeybot-3.2.0/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +53 -0
  32. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +2 -2
  33. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/pyproject.toml +1 -1
  34. monkeybot-3.2.0/evals/smoke_agent/uv.lock +3851 -0
  35. monkeybot-3.2.0/evals/suites/drift.yaml +10 -0
  36. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_assertions.py +84 -1
  37. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_runner_sse.py +53 -3
  38. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/app.py +19 -2
  39. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +32 -1
  40. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/login.py +105 -1
  41. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +2 -0
  42. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +27 -1
  43. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +39 -17
  44. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +415 -0
  45. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_tool_surface.py +1 -1
  46. {monkeybot-3.1.0 → monkeybot-3.2.0}/pyproject.toml +1 -1
  47. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/tools.py +3 -0
  48. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/tools.py +1 -0
  49. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/__init__.py +8 -0
  50. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/runtime_env.py +2 -0
  51. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/settings.py +231 -1
  52. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/snapshot.py +30 -0
  53. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/__init__.py +21 -0
  54. monkeybot-3.2.0/src/monkeybot/core/context/secret_egress.py +443 -0
  55. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/backends.py +3 -0
  56. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/firestore.py +6 -1
  57. monkeybot-3.2.0/src/monkeybot/core/persistence/goal_ledger.py +447 -0
  58. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/postgres.py +3 -0
  59. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/sqlite.py +16 -0
  60. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/sqlite_backend.py +9 -0
  61. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/events.py +110 -5
  62. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/history_compaction.py +134 -21
  63. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/input_admission.py +29 -13
  64. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop.py +8 -3
  65. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_hooks.py +56 -1
  66. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/tool_dispatch.py +8 -2
  67. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/turn_loop.py +248 -30
  68. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/core_tool_executor.py +126 -1
  69. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/types/content_blocks.py +10 -2
  70. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/types/types_tools.py +9 -6
  71. monkeybot-3.2.0/src/monkeybot/core/verifier/__init__.py +38 -0
  72. monkeybot-3.2.0/src/monkeybot/core/verifier/actuator.py +39 -0
  73. monkeybot-3.2.0/src/monkeybot/core/verifier/classify.py +213 -0
  74. monkeybot-3.2.0/src/monkeybot/core/verifier/inspector.py +67 -0
  75. monkeybot-3.2.0/src/monkeybot/core/verifier/judge.py +187 -0
  76. monkeybot-3.2.0/src/monkeybot/core/verifier/ledger.py +357 -0
  77. monkeybot-3.2.0/src/monkeybot/core/verifier/mailbox.py +107 -0
  78. monkeybot-3.2.0/src/monkeybot/core/verifier/match.py +94 -0
  79. monkeybot-3.2.0/src/monkeybot/core/verifier/port.py +52 -0
  80. monkeybot-3.2.0/src/monkeybot/core/verifier/severity.py +12 -0
  81. monkeybot-3.2.0/src/monkeybot/core/verifier/tracker.py +292 -0
  82. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/app.py +130 -1
  83. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/sqlite_exporter.py +28 -2
  84. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/gemini.py +6 -0
  85. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_config_extensions.py +90 -3
  86. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_content_blocks.py +1 -1
  87. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_core_tool_executor.py +159 -0
  88. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_durable_events.py +6 -0
  89. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_events.py +36 -0
  90. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_gemini_history_replay.py +27 -1
  91. monkeybot-3.2.0/tests/core/test_goal_ledger.py +690 -0
  92. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_history.py +30 -5
  93. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_history_compaction_split.py +107 -1
  94. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_input_admission.py +21 -4
  95. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_loop_hooks.py +107 -0
  96. monkeybot-3.2.0/tests/core/test_progress_tracker.py +738 -0
  97. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_runtime_config_snapshot.py +56 -0
  98. monkeybot-3.2.0/tests/core/test_secret_egress.py +466 -0
  99. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_storage_backends.py +9 -0
  100. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_tool_def_schema.py +1 -0
  101. monkeybot-3.2.0/tests/core/test_verifier_inspector.py +108 -0
  102. monkeybot-3.2.0/tests/core/test_verifier_judge.py +260 -0
  103. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenario_runner.py +14 -3
  104. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/test_agent_behavior.py +2 -12
  105. monkeybot-3.2.0/tests/evals/test_verifier_port.py +30 -0
  106. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_sqlite_exporter.py +54 -0
  107. monkeybot-3.1.0/docs/live-evals.md +0 -65
  108. monkeybot-3.1.0/evals/smoke_agent/uv.lock +0 -2332
  109. {monkeybot-3.1.0 → monkeybot-3.2.0}/.dockerignore +0 -0
  110. {monkeybot-3.1.0 → monkeybot-3.2.0}/.github/workflows/ci.yml +0 -0
  111. {monkeybot-3.1.0 → monkeybot-3.2.0}/.github/workflows/live-eval-smoke.yml +0 -0
  112. {monkeybot-3.1.0 → monkeybot-3.2.0}/.github/workflows/prepare-release.yml +0 -0
  113. {monkeybot-3.1.0 → monkeybot-3.2.0}/.github/workflows/publish-release.yml +0 -0
  114. {monkeybot-3.1.0 → monkeybot-3.2.0}/.gitignore +0 -0
  115. {monkeybot-3.1.0 → monkeybot-3.2.0}/.pre-commit-config.yaml +0 -0
  116. {monkeybot-3.1.0 → monkeybot-3.2.0}/BACKLOG.md +0 -0
  117. {monkeybot-3.1.0 → monkeybot-3.2.0}/CONTRIBUTING.md +0 -0
  118. {monkeybot-3.1.0 → monkeybot-3.2.0}/LICENSE +0 -0
  119. {monkeybot-3.1.0 → monkeybot-3.2.0}/README.md +0 -0
  120. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/pyproject.toml +0 -0
  121. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/skills/monkeybot/SKILL.md +0 -0
  122. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
  123. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/__init__.py +0 -0
  124. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
  125. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
  126. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
  127. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_session.py +0 -0
  128. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
  129. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
  130. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_tool_display.py +0 -0
  131. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_tui.py +0 -0
  132. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
  133. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
  134. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
  135. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
  136. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
  137. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
  138. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
  139. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
  140. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
  141. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
  142. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/compat.py +0 -0
  143. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
  144. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
  145. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
  146. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
  147. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/main.py +0 -0
  148. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
  149. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/output.py +0 -0
  150. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
  151. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/providers.py +0 -0
  152. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
  153. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
  154. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
  155. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
  156. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
  157. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
  158. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
  159. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
  160. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
  161. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
  162. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold.py +0 -0
  163. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
  164. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
  165. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
  166. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +0 -0
  167. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -0
  168. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
  169. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
  170. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
  171. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
  172. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
  173. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
  174. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +0 -0
  175. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
  176. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
  177. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
  178. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
  179. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
  180. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_continue.py +0 -0
  181. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_e2e.py +0 -0
  182. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_errors.py +0 -0
  183. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_file_index.py +0 -0
  184. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_grounding.py +0 -0
  185. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_local_shell.py +0 -0
  186. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_renderer_parity.py +0 -0
  187. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_session.py +0 -0
  188. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_status_bar.py +0 -0
  189. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_theme.py +0 -0
  190. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_tool_display.py +0 -0
  191. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_tui.py +0 -0
  192. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_cli.py +0 -0
  193. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_config_resolve.py +0 -0
  194. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_doctor.py +0 -0
  195. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_extras_catalog.py +0 -0
  196. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_gateway_health.py +0 -0
  197. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
  198. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_realtime_session_controller.py +0 -0
  199. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_run_cmd.py +0 -0
  200. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_runtime_python.py +0 -0
  201. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_scaffold.py +0 -0
  202. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_terminal_markdown.py +0 -0
  203. {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/uv.lock +0 -0
  204. {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/Dockerfile +0 -0
  205. {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/demo-model.yaml +0 -0
  206. {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/demo.yaml +0 -0
  207. {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/docker-compose.sandbox.yml +0 -0
  208. {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/opensandbox.docker.toml +0 -0
  209. {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/sandbox.Dockerfile +0 -0
  210. {monkeybot-3.1.0 → monkeybot-3.2.0}/docker-compose.yml +0 -0
  211. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/agent-layout.md +0 -0
  212. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/assets/logo.png +0 -0
  213. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/browser-mcp-perf-baseline.md +0 -0
  214. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/browser-mcp-performance-plan.md +0 -0
  215. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/cloud-deployment-design.md +0 -0
  216. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-aws-agentcore.md +0 -0
  217. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-pattern-a-container.md +0 -0
  218. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-pattern-b-serverless.md +0 -0
  219. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
  220. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-pattern-d-realtime.md +0 -0
  221. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/features.md +0 -0
  222. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/getting-started.md +0 -0
  223. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/knowledge-layer-fixes.md +0 -0
  224. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/mcp.md +0 -0
  225. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/memory-graph-split-plan.md +0 -0
  226. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/migrations/agent-scope-namespacing.md +0 -0
  227. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/migrations/memory-outbox.sql +0 -0
  228. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/observability-runbook.md +0 -0
  229. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/ollama-local.md +0 -0
  230. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/otel-collector.example.yaml +0 -0
  231. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/progressive-loop-tools.md +0 -0
  232. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/progressive-mcp-tools.md +0 -0
  233. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/skills.md +0 -0
  234. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/spill-dynamic-design.md +0 -0
  235. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/sse-gateway-ui.md +0 -0
  236. {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/workspace-index-design.md +0 -0
  237. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/TEST_COVERAGE.md +0 -0
  238. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/diff.py +0 -0
  239. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/eval_config.yaml +0 -0
  240. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/persistence.py +0 -0
  241. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/report.py +0 -0
  242. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenario_loader.py +0 -0
  243. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/.env.example +0 -0
  244. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/.gitignore +0 -0
  245. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
  246. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
  247. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
  248. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
  249. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
  250. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
  251. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
  252. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
  253. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/suites/smoke.yaml +0 -0
  254. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_diff.py +0 -0
  255. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_judge.py +0 -0
  256. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_report.py +0 -0
  257. {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_scorer.py +0 -0
  258. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/README.md +0 -0
  259. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/agentcore/handler.py +0 -0
  260. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/agentcore/runtime_app.py +0 -0
  261. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/agentengine/handler.py +0 -0
  262. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/cloud-functions/main.py +0 -0
  263. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/lambda/handler.py +0 -0
  264. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/ollama/PrefixStable.Modelfile +0 -0
  265. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/browser/SKILL.md +0 -0
  266. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
  267. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/diagnostics/README.md +0 -0
  268. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/diagnostics/SKILL.md +0 -0
  269. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/diagnostics/__init__.py +0 -0
  270. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/diagnostics/diagnostics.py +0 -0
  271. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/image-generator/SKILL.md +0 -0
  272. {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/image-generator/generate_image.py +0 -0
  273. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/pyproject.toml +0 -0
  274. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
  275. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
  276. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
  277. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
  278. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
  279. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
  280. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
  281. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
  282. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
  283. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/backend.py +0 -0
  284. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
  285. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
  286. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
  287. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
  288. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
  289. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
  290. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
  291. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/server.py +0 -0
  292. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +0 -0
  293. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +0 -0
  294. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
  295. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
  296. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
  297. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
  298. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
  299. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
  300. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
  301. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
  302. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
  303. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
  304. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
  305. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
  306. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/conftest.py +0 -0
  307. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
  308. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
  309. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
  310. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +0 -0
  311. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
  312. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
  313. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
  314. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_act.py +0 -0
  315. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_agentcore.py +0 -0
  316. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
  317. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_fill_form.py +0 -0
  318. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_indexed_tools.py +0 -0
  319. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_observe.py +0 -0
  320. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_observe_after.py +0 -0
  321. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_perf.py +0 -0
  322. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_playbook_flows.py +0 -0
  323. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
  324. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
  325. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
  326. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_server_shutdown.py +0 -0
  327. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_tabs.py +0 -0
  328. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_wait_tools.py +0 -0
  329. {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/uv.lock +0 -0
  330. {monkeybot-3.1.0 → monkeybot-3.2.0}/pytest.ini +0 -0
  331. {monkeybot-3.1.0 → monkeybot-3.2.0}/scripts/create_schema.py +0 -0
  332. {monkeybot-3.1.0 → monkeybot-3.2.0}/scripts/precommit-pytest.sh +0 -0
  333. {monkeybot-3.1.0 → monkeybot-3.2.0}/scripts/release.py +0 -0
  334. {monkeybot-3.1.0 → monkeybot-3.2.0}/scripts/smoke_global_cli.sh +0 -0
  335. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/__init__.py +0 -0
  336. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/__init__.py +0 -0
  337. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/__main__.py +0 -0
  338. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/audio_io.py +0 -0
  339. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/gateway_manager.py +0 -0
  340. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/main.py +0 -0
  341. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/push_to_talk.py +0 -0
  342. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/realtime_client.py +0 -0
  343. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/__init__.py +0 -0
  344. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/approvals.py +0 -0
  345. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/permissions.py +0 -0
  346. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/safety.py +0 -0
  347. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/__init__.py +0 -0
  348. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/__init__.py +0 -0
  349. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/catalog.py +0 -0
  350. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/config.py +0 -0
  351. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/freeze.py +0 -0
  352. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/resolve.py +0 -0
  353. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/store.py +0 -0
  354. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/text.py +0 -0
  355. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/bootstrap.py +0 -0
  356. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/realtime_config.py +0 -0
  357. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/validation.py +0 -0
  358. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
  359. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/campaign_context.py +0 -0
  360. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/common.py +0 -0
  361. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/epoch.py +0 -0
  362. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
  363. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/tool_result_ingress.py +0 -0
  364. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/tool_shapers.py +0 -0
  365. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/hooks/__init__.py +0 -0
  366. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/__init__.py +0 -0
  367. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/captions.py +0 -0
  368. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/chunking.py +0 -0
  369. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/config.py +0 -0
  370. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/__init__.py +0 -0
  371. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/base.py +0 -0
  372. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/factory.py +0 -0
  373. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/gemini.py +0 -0
  374. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/nvidia.py +0 -0
  375. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/openai_compat.py +0 -0
  376. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/sanitize.py +0 -0
  377. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/evidence_guard.py +0 -0
  378. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/extractors.py +0 -0
  379. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/fusion.py +0 -0
  380. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/hook.py +0 -0
  381. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/indexer.py +0 -0
  382. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/links.py +0 -0
  383. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/salience.py +0 -0
  384. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/sqlite_index.py +0 -0
  385. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/subsystem.py +0 -0
  386. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/tool.py +0 -0
  387. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/types.py +0 -0
  388. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/layout.py +0 -0
  389. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/llm/__init__.py +0 -0
  390. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/llm/provider.py +0 -0
  391. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
  392. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/llm/usage.py +0 -0
  393. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/lockfile_names.py +0 -0
  394. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/logging_utils.py +0 -0
  395. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/mcp/__init__.py +0 -0
  396. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/mcp/mcp_client.py +0 -0
  397. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
  398. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/__init__.py +0 -0
  399. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/config.py +0 -0
  400. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/hook.py +0 -0
  401. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/ids.py +0 -0
  402. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/ingest.py +0 -0
  403. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
  404. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/observability.py +0 -0
  405. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/outbox.py +0 -0
  406. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/palace.py +0 -0
  407. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/subsystem.py +0 -0
  408. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/uri.py +0 -0
  409. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/writer.py +0 -0
  410. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/messages/__init__.py +0 -0
  411. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
  412. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/messages/tool_integrity.py +0 -0
  413. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/messages/transform_context.py +0 -0
  414. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/path_safety.py +0 -0
  415. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/__init__.py +0 -0
  416. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/db.py +0 -0
  417. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
  418. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/errors.py +0 -0
  419. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
  420. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
  421. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/history.py +0 -0
  422. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/runs.py +0 -0
  423. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
  424. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
  425. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/sqlite_vector.py +0 -0
  426. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/thread_summary.py +0 -0
  427. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/transcript.py +0 -0
  428. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/usage.py +0 -0
  429. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
  430. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/prompts/__init__.py +0 -0
  431. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/prompts/harness_prompt.py +0 -0
  432. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/prompts/headings.py +0 -0
  433. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/prompts/prompt.py +0 -0
  434. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/__init__.py +0 -0
  435. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/context_budget.py +0 -0
  436. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/doom_loop.py +0 -0
  437. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
  438. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
  439. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_usage.py +0 -0
  440. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
  441. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/realtime_loop.py +0 -0
  442. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
  443. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
  444. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/__init__.py +0 -0
  445. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
  446. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
  447. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/subagent_worker.py +0 -0
  448. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
  449. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subprocess_groups.py +0 -0
  450. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/testing/__init__.py +0 -0
  451. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
  452. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
  453. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/__init__.py +0 -0
  454. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
  455. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/inspector.py +0 -0
  456. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
  457. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/patch.py +0 -0
  458. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/permission.py +0 -0
  459. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/sandbox_executor.py +0 -0
  460. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/spill_inventory.py +0 -0
  461. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/terminal.py +0 -0
  462. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
  463. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
  464. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/tool_kind.py +0 -0
  465. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/types.py +0 -0
  466. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/workspace_service.py +0 -0
  467. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/types/__init__.py +0 -0
  468. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/types/interfaces.py +0 -0
  469. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/__init__.py +0 -0
  470. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/factory.py +0 -0
  471. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/gcs.py +0 -0
  472. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/local.py +0 -0
  473. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/protocol.py +0 -0
  474. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/s3.py +0 -0
  475. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace_layout.py +0 -0
  476. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/__init__.py +0 -0
  477. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/bootstrap.py +0 -0
  478. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/main.py +0 -0
  479. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
  480. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
  481. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/app.py +0 -0
  482. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
  483. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
  484. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
  485. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/manager.py +0 -0
  486. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
  487. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/routes.py +0 -0
  488. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/session.py +0 -0
  489. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
  490. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime_main.py +0 -0
  491. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
  492. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
  493. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/models.py +0 -0
  494. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/reload.py +0 -0
  495. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
  496. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/routes.py +0 -0
  497. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
  498. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
  499. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/session_bus.py +0 -0
  500. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/sse.py +0 -0
  501. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
  502. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/__init__.py +0 -0
  503. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/_state.py +0 -0
  504. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/instrumentation.py +0 -0
  505. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/propagation.py +0 -0
  506. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/spans.py +0 -0
  507. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/__init__.py +0 -0
  508. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
  509. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/_openai_compat.py +0 -0
  510. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/_utils.py +0 -0
  511. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/bedrock.py +0 -0
  512. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/claude.py +0 -0
  513. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/gemini_live.py +0 -0
  514. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/huggingface.py +0 -0
  515. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/model_capabilities.py +0 -0
  516. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/nvidia.py +0 -0
  517. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/ollama.py +0 -0
  518. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/openai.py +0 -0
  519. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/openrouter.py +0 -0
  520. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/pricing.py +0 -0
  521. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/sampling.py +0 -0
  522. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/vertex_claude.py +0 -0
  523. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scaffold/__init__.py +0 -0
  524. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/__init__.py +0 -0
  525. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/__main__.py +0 -0
  526. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/engine.py +0 -0
  527. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
  528. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/interval.py +0 -0
  529. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/tick_result.py +0 -0
  530. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/worker.py +0 -0
  531. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/subagents/__init__.py +0 -0
  532. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
  533. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
  534. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/todo_list/__init__.py +0 -0
  535. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/todo_list/store.py +0 -0
  536. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/todo_list/tool.py +0 -0
  537. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/__init__.py +0 -0
  538. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
  539. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
  540. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
  541. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
  542. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/protocol.py +0 -0
  543. {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/tool.py +0 -0
  544. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/__init__.py +0 -0
  545. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/acceptance/test_observability_acceptance.py +0 -0
  546. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/__init__.py +0 -0
  547. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/test_gateway_manager.py +0 -0
  548. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/test_main.py +0 -0
  549. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/test_push_to_talk.py +0 -0
  550. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/test_realtime_client.py +0 -0
  551. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/__init__.py +0 -0
  552. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_approvals.py +0 -0
  553. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_computer_tools.py +0 -0
  554. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_package_init.py +0 -0
  555. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_path_policy.py +0 -0
  556. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_permissions.py +0 -0
  557. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_subagent_exclusion.py +0 -0
  558. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_wiring.py +0 -0
  559. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/conftest.py +0 -0
  560. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/__init__.py +0 -0
  561. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
  562. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/memory/helpers.py +0 -0
  563. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/memory/in_memory_palace.py +0 -0
  564. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/memory/test_mempalace.py +0 -0
  565. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/memory/test_review_fixes.py +0 -0
  566. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_agent_layout.py +0 -0
  567. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_attachment_freeze.py +0 -0
  568. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_attachment_store.py +0 -0
  569. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_bootstrap.py +0 -0
  570. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_context.py +0 -0
  571. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_context_budget.py +0 -0
  572. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_context_epoch.py +0 -0
  573. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_doom_loop.py +0 -0
  574. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_durable_runs.py +0 -0
  575. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_empty_completion.py +0 -0
  576. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_env_map_grep_gates.py +0 -0
  577. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_evidence_guard.py +0 -0
  578. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_firestore_history.py +0 -0
  579. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
  580. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_firestore_usage.py +0 -0
  581. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_fs_isolation.py +0 -0
  582. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_harness_prompt.py +0 -0
  583. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_hooks.py +0 -0
  584. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_inspector.py +0 -0
  585. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_chunking.py +0 -0
  586. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_chunking_rank.py +0 -0
  587. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_config.py +0 -0
  588. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_embeddings.py +0 -0
  589. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_fts.py +0 -0
  590. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_fusion.py +0 -0
  591. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_fusion_ann.py +0 -0
  592. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_hook.py +0 -0
  593. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_indexer.py +0 -0
  594. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_links.py +0 -0
  595. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_media.py +0 -0
  596. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_salience.py +0 -0
  597. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_single_writer.py +0 -0
  598. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_subsystem.py +0 -0
  599. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_vectors.py +0 -0
  600. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_layout.py +0 -0
  601. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_logging_utils.py +0 -0
  602. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_loop.py +0 -0
  603. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_loop_observability.py +0 -0
  604. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_loop_transcript.py +0 -0
  605. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_mcp_client.py +0 -0
  606. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_memory_layout_migrate.py +0 -0
  607. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_message_pipeline.py +0 -0
  608. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_mocks_realtime_provider.py +0 -0
  609. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_patch.py +0 -0
  610. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_path_safety.py +0 -0
  611. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_permission.py +0 -0
  612. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_pricing.py +0 -0
  613. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_progress_publish.py +0 -0
  614. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_prompt.py +0 -0
  615. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_provider_contract.py +0 -0
  616. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_provider_stream_mapper.py +0 -0
  617. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_realtime_loop.py +0 -0
  618. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_replace_fuzzy.py +0 -0
  619. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_run_command_parse.py +0 -0
  620. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_runs.py +0 -0
  621. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_runtime_env.py +0 -0
  622. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_sandbox_executor.py +0 -0
  623. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_scheduled_loops.py +0 -0
  624. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_session_turn_locks.py +0 -0
  625. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_settlement.py +0 -0
  626. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_spill_dynamic.py +0 -0
  627. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_spill_inventory.py +0 -0
  628. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_subagent_proto.py +0 -0
  629. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_subagent_trace_propagation.py +0 -0
  630. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_subagent_worker_paths.py +0 -0
  631. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_terminal.py +0 -0
  632. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_thread_summary_wire.py +0 -0
  633. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_tool_integrity.py +0 -0
  634. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_tool_result_ingress.py +0 -0
  635. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_tool_shapers.py +0 -0
  636. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_transcript.py +0 -0
  637. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_truncated_tool_batch.py +0 -0
  638. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_usage.py +0 -0
  639. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_usage_migration.py +0 -0
  640. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_utterance_buffer.py +0 -0
  641. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_worker_pool.py +0 -0
  642. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_workspace_layout.py +0 -0
  643. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_workspace_symlinks.py +0 -0
  644. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_workspace_write_scope.py +0 -0
  645. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/workspace/test_factory.py +0 -0
  646. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/workspace/test_local_storage.py +0 -0
  647. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/workspace/test_protocol_contract.py +0 -0
  648. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/__init__.py +0 -0
  649. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/eval_hook.py +0 -0
  650. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
  651. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
  652. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
  653. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
  654. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
  655. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
  656. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_read.yaml +0 -0
  657. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
  658. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
  659. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_search_knowledge.yaml +0 -0
  660. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
  661. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
  662. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
  663. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_write.yaml +0 -0
  664. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
  665. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/test_memory_knowledge_routing.py +0 -0
  666. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/__init__.py +0 -0
  667. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/__init__.py +0 -0
  668. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_app.py +0 -0
  669. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_deps.py +0 -0
  670. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_guardrails.py +0 -0
  671. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_manager.py +0 -0
  672. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_metrics.py +0 -0
  673. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_routes_client_text.py +0 -0
  674. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_session.py +0 -0
  675. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_wire.py +0 -0
  676. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_attachments.py +0 -0
  677. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_config_reload.py +0 -0
  678. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_create_session_model.py +0 -0
  679. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_gateway_runtime.py +0 -0
  680. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_routes.py +0 -0
  681. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
  682. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_session_bus.py +0 -0
  683. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_transcript_wiring.py +0 -0
  684. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_otel_fastapi.py +0 -0
  685. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_otel_lifespan.py +0 -0
  686. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
  687. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_realtime_main.py +0 -0
  688. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_resolve_provider.py +0 -0
  689. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_sse_events.py +0 -0
  690. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
  691. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/integration/__init__.py +0 -0
  692. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
  693. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/integration/test_observability_integration.py +0 -0
  694. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/integration/test_prompt_caching_integration.py +0 -0
  695. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/conftest.py +0 -0
  696. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_init.py +0 -0
  697. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_instrumentation.py +0 -0
  698. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_loop_hook_spans.py +0 -0
  699. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_propagation.py +0 -0
  700. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_span_contract.py +0 -0
  701. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_spans.py +0 -0
  702. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_truncate.py +0 -0
  703. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_turn_complete_trace.py +0 -0
  704. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/conftest.py +0 -0
  705. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_anthropic_cache.py +0 -0
  706. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_anthropic_history.py +0 -0
  707. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_bedrock_converse.py +0 -0
  708. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_bedrock_estimate.py +0 -0
  709. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_gemini_history.py +0 -0
  710. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_gemini_live.py +0 -0
  711. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_gemini_usage.py +0 -0
  712. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_huggingface.py +0 -0
  713. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_model_capabilities.py +0 -0
  714. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_nvidia.py +0 -0
  715. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_ollama.py +0 -0
  716. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_openai_compat_usage.py +0 -0
  717. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_openai_history.py +0 -0
  718. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_pricing.py +0 -0
  719. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
  720. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_sampling.py +0 -0
  721. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_sonnet5_sampling.py +0 -0
  722. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_source_grep_gates.py +0 -0
  723. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_vertex_claude_history.py +0 -0
  724. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/scheduler/test_engine.py +0 -0
  725. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/scheduler/test_interval.py +0 -0
  726. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/skills/__init__.py +0 -0
  727. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/skills/test_generate_image_script.py +0 -0
  728. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/test_cold_start.py +0 -0
  729. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/test_packaging_config.py +0 -0
  730. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/test_release_script.py +0 -0
  731. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/todo_list/test_todo_list.py +0 -0
  732. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/web_search/__init__.py +0 -0
  733. {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/web_search/test_web_search.py +0 -0
  734. {monkeybot-3.1.0 → monkeybot-3.2.0}/uv.lock +0 -0
@@ -6,6 +6,24 @@ the project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ### Browser MCP
10
+
11
+ #### Added
12
+
13
+ - `browser_login` now returns fail-closed errors from the Spaces sealed-login path, scopes grants and errors per run (`MONKEYBOT_RUN_ID` / `MONKEYBOT_RUN_LABEL`), and surfaces TOTP outcome (`mfa`: `none` / `completed` / `needed`) plus injection mode (`mode`: `keystroke` / `network`).
14
+ - `browser_passkey` requests a Spaces-saved passkey with the same allowlisted error surface as `browser_login`. Live passkey sites have not been verified yet.
15
+
16
+ #### Fixed
17
+
18
+ - Credential-broker JSON 413 responses fail closed instead of leaking a body, and thinking text is redacted on that path. Tool descriptions are `cleandoc`'d so the golden surface matches CI.
19
+
20
+ ## [core v3.2.0] - 2026-09-07
21
+
22
+ #### Added
23
+
24
+ - Opt-in background verifier (`verifier:` in YAML, defaults off, no env mapping). A SQLite goal ledger plus an off-loop classifier record the user's intent; an observe-only progress tracker emits `VerifierVerdict` events; verdicts persist as pinned `verifierVerdict` history rows through compaction. When `max_severity` allows it, the ladder can nudge on the next system extra, replan by emptying tools for one inner turn, or block mutating tools while `parallel_safe` reads still run. Firestore/Postgres have no ledger (fail closed). See `docs/verifier-agent-design.md`.
25
+ - Credential-egress detection: new assistant text and tool results are scanned against Spaces' `/json/scan` before they reach the LLM, with a separate scan of outbound tool arguments (terminal, file write, browser navigation/input, `web_*`) and a local-SQLite-only trace-value scan. A hit is redacted in place; a routine turn ends visibly and an interactive chat continues with the secret withheld. User-authored text is never scanned. Emits `CredentialEgressBlocked`.
26
+
9
27
  ## [core v3.1.0] - 2026-09-05
10
28
 
11
29
  ### Breaking
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: monkeybot
3
- Version: 3.1.0
3
+ Version: 3.2.0
4
4
  Summary: monkeybot agent harness — FastAPI SSE gateway, owned loop, SQLite, and MCP.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -191,18 +191,46 @@ synchronization layer.
191
191
 
192
192
  ## Tools
193
193
 
194
- Navigation, interaction, screenshots, tabs, waits, playbooks (`browser_list_playbooks`, `browser_read_playbook`, `browser_write_playbook`, `browser_run_playbook`), `browser_login` for Spaces-saved passwords (returns `{ok, loggedIn, origin}` — never the password), and `browser_stop` for daemon cleanup.
194
+ Navigation, interaction, screenshots, tabs, waits, playbooks (`browser_list_playbooks`, `browser_read_playbook`, `browser_write_playbook`, `browser_run_playbook`), `browser_login` for Spaces-saved passwords (returns `{ok, loggedIn, origin, mfa?, mode?}` — never the password), and `browser_stop` for daemon cleanup.
195
195
 
196
196
  ### `browser_login` targets the focused tab
197
197
 
198
198
  A sealed login runs in the tab the **user** has focused, because typing the credential requires Spaces to detach CDP from that tab first. Ordinary `browser_*` calls address tabs by CDP session id, so after `browser_switch_tab` — or if the user clicks another tab — the tab the agent is driving and the tab that receives the password are different ones.
199
199
 
200
- Pass `expected_origin` to make the bridge refuse (`focused tab is on a different origin`) instead of signing in somewhere unintended, and check the returned `origin`. A saved credential is scoped to its own origin and must be marked for agent use, so a mismatch can never disclose another site's password — but it can still submit a login the user did not ask for.
200
+ Pass `expected_origin` to make the bridge refuse (`focused tab is on a different origin`) instead of signing in somewhere unintended, and check the returned `origin`. A saved credential is scoped to its own origin and needs its own grant (`Never` / `Ask me` / `Always`) before the agent can use it, so a mismatch can never disclose another site's password — but it can still submit a login the user did not ask for.
201
201
 
202
202
  A Spaces build predating `expectedOrigin` support ignores it and echoes no `origin`. Since that login cannot be verified after the fact, `browser_login` reports `in-app browser could not verify the origin` rather than a confirmed success; update Spaces to get the check.
203
203
 
204
204
  Errors raised by browser tools are scrubbed of `?token=` values before they reach the agent: the in-app CDP token grants full control of the user's browser, and browser-harness echoes its endpoint in daemon log tails.
205
205
 
206
+ ### `browser_login` fails closed
207
+
208
+ Spaces verifies its own scrub before returning: after typing the password (and a one-time code, if one was needed and available — see below) and submitting, it hashes every editable value left on the page and confirms none of them match what it just typed. If that check cannot be completed — the login did not clearly succeed or fail, or a same-origin iframe could not be checked — Spaces navigates the tab to the site's origin root itself and `browser_login` returns `login needs your attention` instead of guessing. Do not retry the call or attempt to type the password yourself when you see this error; tell the user to finish signing in in the Spaces browser. Calling `browser_get_text` or `browser_get_elements` afterward is safe either way: on this outcome, the page has already been navigated away from any form that held the secret.
209
+
210
+ ### One-time codes (TOTP)
211
+
212
+ If the page shows a one-time-code field after the password step, `browser_login`'s result carries an `mfa` field:
213
+
214
+ - `"none"` — no OTP field appeared; nothing to report.
215
+ - `"completed"` — Spaces had a stored authenticator seed for this credential, generated the code, typed and submitted it itself. The password never left Spaces and neither did the code.
216
+ - `"needed"` — an OTP field appeared but no seed is stored. `browser_login` also returns the error `mfa needs your attention`; tell the user to add an authenticator for this site in Spaces' "Connected sites" panel (paste the `otpauth://` URI or the base32 secret from the site's QR setup) or finish signing in themselves. Do not retry.
217
+
218
+ ### How the password reaches the request
219
+
220
+ `browser_login`'s result also carries a `mode` field: `"keystroke"` (the password was typed into the page, the default) or `"network"` (Spaces typed a harmless placeholder and rewrote the real password into the outgoing request itself, so the password never touched the page's DOM or JS). Both behave identically from the agent's side — this is informational only, set per credential in Spaces' "Connected sites" panel ("Auto" tries network first and remembers if a site doesn't support it).
221
+
222
+ ### Grants and "ask" mode
223
+
224
+ Each saved credential has an agent-access grant: `Never` (default for imported passwords — the agent cannot use it at all), `Ask me` (the user is prompted every time, unless the request happens again within an already-approved run), or `Always` (a standing grant, replacing the old "Agent" checkbox). Grants can also be scoped to one run — an "Allow once" approval covers only the routine or chat that asked for it, and expires after 30 minutes or one use, whichever comes first.
225
+
226
+ In `Ask me` mode, `browser_login` blocks — up to 150s — while Spaces shows the user a prompt ("*Run* wants to sign in to *origin* as *username*") with "Allow once", "Always allow", and "Don't allow" buttons, gated by a click plus Touch ID on macOS. Three outcomes reach the agent:
227
+
228
+ - `waiting for your approval` — the user did not respond within the window, or another approval was already pending. Do not retry; tell the user their approval is (or was) needed.
229
+ - `agent access denied for this site` — the user declined, or the credential's grant is `Never`.
230
+ - `grant expired` — a scoped grant that once covered this exact run lapsed with no `Ask me` fallback to re-prompt through.
231
+
232
+ Every credential use — granted, denied, or needing attention — is recorded in Spaces' "Connected sites" panel (reachable from the Saved passwords strip) along with which run used it.
233
+
206
234
  ### Default: indexed DOM interaction (no screenshots needed)
207
235
 
208
236
  `browser_get_elements`, `browser_click_by_index`, `browser_input_by_index`, and `browser_select_by_index` give the agent a **text-based, indexed** view of the page instead of screenshot + pixel coordinates — ported from [alibaba/page-agent](https://github.com/alibaba/page-agent)'s DOM-extraction engine (MIT licensed; see `src/browser_mcp/dom_indexing.py` and `src/browser_mcp/assets/` for provenance).
@@ -0,0 +1,112 @@
1
+ # Live evals
2
+
3
+ Run real-provider smoke scenarios against a live monkeybot gateway, score them, and optionally compare to a baseline. Complements deterministic loop evals under `tests/evals/` (fake provider / pytest).
4
+
5
+ **Fixture agent:** [`evals/smoke_agent/`](../evals/smoke_agent/)
6
+ **Workflow:** [`.github/workflows/live-eval-smoke.yml`](../.github/workflows/live-eval-smoke.yml)
7
+ **Suite:** [`evals/suites/smoke.yaml`](../evals/suites/smoke.yaml)
8
+
9
+ ## Local run
10
+
11
+ ```bash
12
+ # Terminal 1 — gateway
13
+ cd evals/smoke_agent
14
+ uv sync
15
+ export OLLAMA_API_KEY=… # ollama.com/settings/keys; extra is monkeybot[ollama]
16
+ # model.provider / model.name come from monkeybot_config/monkeybot.yaml (YAML-only)
17
+ export PORT=8787
18
+ export SANDBOX_ENABLED=false
19
+ uv run -m monkeybot.gateway.main
20
+
21
+ # Terminal 2 — scorecard (repo root)
22
+ uv sync --extra evals
23
+ export AGENT_URL=http://127.0.0.1:8787
24
+ export JUDGE_PROVIDER=fake # deepeval's GPTModel against ollama.com times out with no scores
25
+ export EVAL_SCENARIO_DELAY_SEC=10 # space scenarios out if the model gets rate-limited
26
+ uv run python -m evals.report \
27
+ --suite smoke \
28
+ --baseline evals/baselines/smoke.json
29
+ ```
30
+
31
+ Useful flags:
32
+
33
+ | Flag | Effect |
34
+ |---|---|
35
+ | `--fail-on-regression` | Exit non-zero on scenario errors/failures (and baseline drift when a baseline is present) |
36
+ | `--require-baseline` | Fail if the baseline file is missing |
37
+ | `--update-baseline` | Rewrite the baseline from this run (commit deliberately) |
38
+ | `--scenario-delay-sec` (or `EVAL_SCENARIO_DELAY_SEC`) | Sleep this many seconds between scenarios — a scenario itself fires several requests in a tight burst, so pacing is applied between scenarios, not within one. Use when a low-rpm model gets provider-side rate-limited. |
39
+
40
+ Runs land under `evals/runs/` (gitignored). Diff two artifacts with `uv run python -m evals.diff <old.json> <new.json>`.
41
+
42
+ ## Drift suite (paired verifier off / on)
43
+
44
+ The drift suite (`evals/suites/drift.yaml`, scenarios under `evals/scenarios/drift/`) is **not** in smoke. It exists to measure verifier precision/recall once Phase 2+ lands. Cases `supersession` and `preempt` assert `max_verdicts: 0` with the verifier on — they are the precision half.
45
+
46
+ The gateway discovers `monkeybot_config/monkeybot.yaml` from cwd, so a second filename is never loaded unless you point `MONKEYBOT_CONFIG` at it (bootstrap pointer, not a YAML value).
47
+
48
+ ```bash
49
+ # Terminal 1a — verifier off (default smoke config)
50
+ cd evals/smoke_agent
51
+ uv sync
52
+ export OLLAMA_API_KEY=…
53
+ export PORT=8787
54
+ export SANDBOX_ENABLED=false
55
+ uv run -m monkeybot.gateway.main
56
+
57
+ # Terminal 2a
58
+ cd ../.. # repo root
59
+ uv sync --extra evals
60
+ export AGENT_URL=http://127.0.0.1:8787
61
+ export EVAL_VERIFIER_MODE=off
62
+ uv run python -m evals.report --suite drift
63
+ # note the run id printed / the new file under evals/runs/
64
+
65
+ # Stop the gateway, then boot with the verifier-on file:
66
+ cd evals/smoke_agent
67
+ export MONKEYBOT_CONFIG=./monkeybot_config/monkeybot.verifier-on.yaml
68
+ uv run -m monkeybot.gateway.main
69
+
70
+ # Terminal 2b
71
+ export EVAL_VERIFIER_MODE=on
72
+ uv run python -m evals.report --suite drift
73
+ uv run python -m evals.diff evals/runs/<off-run>.json evals/runs/<on-run>.json
74
+ ```
75
+
76
+ Until a consumer reads `verifier:` (Phase 1+), the on-config is a parsed no-op and the on/off pair should be identical besides the YAML digest.
77
+
78
+ ## Smoke baseline (pre-verifier)
79
+
80
+ Committed at [`evals/baselines/smoke.json`](../evals/baselines/smoke.json); readable summary in [`evals/baselines/smoke.md`](../evals/baselines/smoke.md). Agent is `ollama-cloud` / `glm-5.3-flash`. Judge scores are empty (`JUDGE_PROVIDER=fake`) — deepeval's OpenAI-compatible judge against Ollama Cloud timed out with no metric scores.
81
+
82
+ ```bash
83
+ cd evals/smoke_agent && uv sync
84
+ OLLAMA_API_KEY=… PORT=8787 SANDBOX_ENABLED=false uv run -m monkeybot.gateway.main &
85
+ cd ../.. && AGENT_URL=http://127.0.0.1:8787 JUDGE_PROVIDER=fake \
86
+ uv run python -m evals.report --suite smoke --update-baseline
87
+ ```
88
+
89
+ Do not add `--require-baseline` to CI until that workflow uses the same provider as this file. The GitHub Action still keys off `NVIDIA_API_KEY`.
90
+
91
+ ## What the smoke suite covers
92
+
93
+ Scenarios under `evals/scenarios/` assert both judge metrics and harness telemetry (e.g. `required_tools`). Current smoke membership is the explicit list in `evals/suites/smoke.yaml` (tools, skills, subagents, memory, multi-turn, mcp — `context/summarization_trigger` is currently commented out, see `evals/TEST_COVERAGE.md`). MCP scenarios run against an in-process fixture MCP server (`evals/smoke_agent/fixture_mcp_server.py`, no network calls) wired up in `evals/smoke_agent/monkeybot_config/mcp.json` — see `evals/scenarios/mcp/`.
94
+
95
+ ## CI
96
+
97
+ Live eval does **not** run on every feature PR. Triggers (see the workflow):
98
+
99
+ - PR from `develop` → `main` (release gate; uses `--fail-on-regression`)
100
+ - PR that changes `uv.lock`, `cli/uv.lock`, or `evals/smoke_agent/uv.lock`
101
+ - Push to `main` (report-only)
102
+ - Manual `workflow_dispatch`
103
+
104
+ CI still requires repository secret `NVIDIA_API_KEY` (legacy agent + judge on build.nvidia.com). Local smoke uses `OLLAMA_API_KEY` and `monkeybot.yaml`'s `ollama-cloud` / `glm-5.3-flash`. The scorecard is posted to the run summary and as a PR comment.
105
+
106
+ ## vs `tests/evals/`
107
+
108
+ | | `tests/evals/` | `evals/` (this doc) |
109
+ |---|---|---|
110
+ | Driver | `loop.run` + fake provider | Live gateway HTTP + SSE |
111
+ | CI | Every push/PR via pytest | Selective (above) |
112
+ | Catches | Deterministic loop/tool wiring | Real provider + gateway/SSE behavior |