monkeybot 3.0.4__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 (933) hide show
  1. monkeybot-3.2.0/.github/workflows/live-eval-smoke.yml +208 -0
  2. monkeybot-3.2.0/CHANGELOG.md +359 -0
  3. monkeybot-3.2.0/PKG-INFO +203 -0
  4. monkeybot-3.2.0/cli/pyproject.toml +44 -0
  5. monkeybot-3.2.0/cli/skills/monkeybot/SKILL.md +202 -0
  6. monkeybot-3.2.0/cli/skills/monkeybot/references/config-sections.md +167 -0
  7. monkeybot-3.2.0/cli/src/monkeybot_cli/chat_session.py +938 -0
  8. monkeybot-3.2.0/cli/src/monkeybot_cli/chat_tui.py +1917 -0
  9. monkeybot-3.2.0/cli/src/monkeybot_cli/commands/chat.py +888 -0
  10. monkeybot-3.2.0/cli/src/monkeybot_cli/commands/doctor.py +592 -0
  11. monkeybot-3.2.0/cli/src/monkeybot_cli/commands/validate.py +383 -0
  12. monkeybot-3.2.0/cli/src/monkeybot_cli/realtime/talk_ui.py +247 -0
  13. monkeybot-3.2.0/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +41 -0
  14. monkeybot-3.2.0/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +261 -0
  15. monkeybot-3.2.0/cli/tests/test_chat_e2e.py +90 -0
  16. monkeybot-3.2.0/cli/tests/test_chat_session.py +452 -0
  17. monkeybot-3.2.0/cli/tests/test_doctor.py +217 -0
  18. monkeybot-3.2.0/cli/tests/test_gateway_health.py +163 -0
  19. monkeybot-3.2.0/cli/uv.lock +1846 -0
  20. monkeybot-3.2.0/docker/demo-model.yaml +5 -0
  21. monkeybot-3.2.0/docker/demo.yaml +4 -0
  22. monkeybot-3.2.0/docker-compose.yml +14 -0
  23. monkeybot-3.2.0/docs/browser-mcp-perf-baseline.md +363 -0
  24. monkeybot-3.2.0/docs/browser-mcp-performance-plan.md +17 -0
  25. monkeybot-3.2.0/docs/browser-mcp.md +316 -0
  26. monkeybot-3.2.0/docs/deploy-aws-agentcore.md +113 -0
  27. monkeybot-3.2.0/docs/deploy-pattern-c-agent-platform.md +236 -0
  28. monkeybot-3.2.0/docs/deploy-pattern-d-realtime.md +306 -0
  29. monkeybot-3.2.0/docs/features.md +827 -0
  30. monkeybot-3.2.0/docs/getting-started.md +182 -0
  31. monkeybot-3.2.0/docs/live-evals.md +112 -0
  32. monkeybot-3.2.0/docs/ollama-local.md +49 -0
  33. monkeybot-3.2.0/docs/spill-dynamic-design.md +557 -0
  34. monkeybot-3.2.0/docs/sse-gateway-ui.md +273 -0
  35. monkeybot-3.2.0/docs/verifier-agent-design.md +828 -0
  36. monkeybot-3.2.0/evals/TEST_COVERAGE.md +68 -0
  37. monkeybot-3.2.0/evals/assertions.py +177 -0
  38. monkeybot-3.2.0/evals/baselines/smoke.json +408 -0
  39. monkeybot-3.2.0/evals/baselines/smoke.md +55 -0
  40. monkeybot-3.2.0/evals/models.py +129 -0
  41. monkeybot-3.2.0/evals/runner.py +273 -0
  42. monkeybot-3.2.0/evals/scenarios/context/summarization_trigger.yaml +33 -0
  43. monkeybot-3.2.0/evals/scenarios/drift/declares_done.yaml +20 -0
  44. monkeybot-3.2.0/evals/scenarios/drift/path_constraint.yaml +26 -0
  45. monkeybot-3.2.0/evals/scenarios/drift/preempt.yaml +20 -0
  46. monkeybot-3.2.0/evals/scenarios/drift/repeat_correction.yaml +21 -0
  47. monkeybot-3.2.0/evals/scenarios/drift/supersession.yaml +19 -0
  48. monkeybot-3.2.0/evals/scenarios/mcp/get_prompt.yaml +13 -0
  49. monkeybot-3.2.0/evals/scenarios/mcp/list_resources.yaml +13 -0
  50. monkeybot-3.2.0/evals/scenarios/mcp/tool_invoke.yaml +13 -0
  51. monkeybot-3.2.0/evals/scenarios/memory/recall_cross_session.yaml +13 -0
  52. monkeybot-3.2.0/evals/scenarios/memory/recall_single_session.yaml +12 -0
  53. monkeybot-3.2.0/evals/scenarios/multi_turn/task_tracking.yaml +12 -0
  54. monkeybot-3.2.0/evals/scenarios/skills/skill_invocation.yaml +11 -0
  55. monkeybot-3.2.0/evals/scenarios/subagents/dispatch_complete.yaml +9 -0
  56. monkeybot-3.2.0/evals/scenarios/tools/core_read.yaml +11 -0
  57. monkeybot-3.2.0/evals/scenarios/tools/core_read_error.yaml +11 -0
  58. monkeybot-3.2.0/evals/scenarios/tools/core_run_command.yaml +12 -0
  59. monkeybot-3.2.0/evals/scenarios/tools/core_run_command_sandbox.yaml +21 -0
  60. monkeybot-3.2.0/evals/scenarios/tools/core_write.yaml +11 -0
  61. monkeybot-3.2.0/evals/scorer.py +366 -0
  62. monkeybot-3.2.0/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +53 -0
  63. monkeybot-3.2.0/evals/smoke_agent/monkeybot_config/monkeybot.yaml +40 -0
  64. monkeybot-3.2.0/evals/smoke_agent/pyproject.toml +13 -0
  65. monkeybot-3.2.0/evals/smoke_agent/skills/browser/SKILL.md +15 -0
  66. monkeybot-3.2.0/evals/smoke_agent/uv.lock +3851 -0
  67. monkeybot-3.2.0/evals/suites/drift.yaml +10 -0
  68. monkeybot-3.2.0/evals/test_assertions.py +249 -0
  69. monkeybot-3.2.0/evals/test_runner_sse.py +192 -0
  70. monkeybot-3.2.0/examples/README.md +41 -0
  71. monkeybot-3.2.0/examples/lambda/handler.py +95 -0
  72. monkeybot-3.2.0/examples/ollama/PrefixStable.Modelfile +49 -0
  73. monkeybot-3.2.0/examples/skills/browser/SKILL.md +88 -0
  74. monkeybot-3.2.0/examples/skills/diagnostics/README.md +249 -0
  75. monkeybot-3.2.0/examples/skills/diagnostics/SKILL.md +31 -0
  76. monkeybot-3.2.0/examples/skills/diagnostics/diagnostics.py +126 -0
  77. monkeybot-3.2.0/integrations/browser-mcp/pyproject.toml +27 -0
  78. monkeybot-3.2.0/integrations/browser-mcp/scripts/dump_tool_surface.py +25 -0
  79. monkeybot-3.2.0/integrations/browser-mcp/scripts/perf_bench.py +304 -0
  80. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/actions.py +645 -0
  81. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/app.py +158 -0
  82. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +935 -0
  83. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/backend.py +158 -0
  84. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +616 -0
  85. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +228 -0
  86. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/login.py +245 -0
  87. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/observe.py +441 -0
  88. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/perf.py +143 -0
  89. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/playbooks.py +321 -0
  90. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +418 -0
  91. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/results.py +36 -0
  92. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/screenshots.py +203 -0
  93. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/server.py +82 -0
  94. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tab_ops.py +168 -0
  95. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tabs.py +604 -0
  96. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +77 -0
  97. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tools/batch.py +62 -0
  98. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tools/capture.py +81 -0
  99. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tools/interact.py +309 -0
  100. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +61 -0
  101. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +126 -0
  102. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tools/read.py +169 -0
  103. monkeybot-3.2.0/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +255 -0
  104. monkeybot-3.2.0/integrations/browser-mcp/tests/fixtures/api.json +1 -0
  105. monkeybot-3.2.0/integrations/browser-mcp/tests/fixtures/article.html +32 -0
  106. monkeybot-3.2.0/integrations/browser-mcp/tests/fixtures/cards.html +25 -0
  107. monkeybot-3.2.0/integrations/browser-mcp/tests/fixtures/form.html +87 -0
  108. monkeybot-3.2.0/integrations/browser-mcp/tests/fixtures/long_list.html +55 -0
  109. monkeybot-3.2.0/integrations/browser-mcp/tests/fixtures/spa.html +35 -0
  110. monkeybot-3.2.0/integrations/browser-mcp/tests/fixtures/tool_surface.json +1207 -0
  111. monkeybot-3.2.0/integrations/browser-mcp/tests/integration/conftest.py +143 -0
  112. monkeybot-3.2.0/integrations/browser-mcp/tests/integration/test_act_observe.py +53 -0
  113. monkeybot-3.2.0/integrations/browser-mcp/tests/integration/test_driver_persist.py +54 -0
  114. monkeybot-3.2.0/integrations/browser-mcp/tests/integration/test_intent_tools.py +134 -0
  115. monkeybot-3.2.0/integrations/browser-mcp/tests/integration/test_multi_tab.py +169 -0
  116. monkeybot-3.2.0/integrations/browser-mcp/tests/integration/test_observation.py +97 -0
  117. monkeybot-3.2.0/integrations/browser-mcp/tests/integration/test_run_playbook.py +59 -0
  118. monkeybot-3.2.0/integrations/browser-mcp/tests/integration/test_wait_for.py +57 -0
  119. monkeybot-3.2.0/integrations/browser-mcp/tests/test_act.py +200 -0
  120. monkeybot-3.2.0/integrations/browser-mcp/tests/test_agentcore.py +353 -0
  121. monkeybot-3.2.0/integrations/browser-mcp/tests/test_dom_indexing.py +421 -0
  122. monkeybot-3.2.0/integrations/browser-mcp/tests/test_fill_form.py +116 -0
  123. monkeybot-3.2.0/integrations/browser-mcp/tests/test_in_app_cdp.py +1206 -0
  124. monkeybot-3.2.0/integrations/browser-mcp/tests/test_indexed_tools.py +326 -0
  125. monkeybot-3.2.0/integrations/browser-mcp/tests/test_observe.py +162 -0
  126. monkeybot-3.2.0/integrations/browser-mcp/tests/test_observe_after.py +332 -0
  127. monkeybot-3.2.0/integrations/browser-mcp/tests/test_perf.py +230 -0
  128. monkeybot-3.2.0/integrations/browser-mcp/tests/test_playbook_flows.py +245 -0
  129. monkeybot-3.2.0/integrations/browser-mcp/tests/test_playwright_helpers.py +238 -0
  130. monkeybot-3.2.0/integrations/browser-mcp/tests/test_screenshots.py +117 -0
  131. monkeybot-3.2.0/integrations/browser-mcp/tests/test_server_shutdown.py +117 -0
  132. monkeybot-3.2.0/integrations/browser-mcp/tests/test_tabs.py +352 -0
  133. monkeybot-3.2.0/integrations/browser-mcp/tests/test_tool_surface.py +17 -0
  134. monkeybot-3.2.0/integrations/browser-mcp/tests/test_wait_tools.py +118 -0
  135. monkeybot-3.2.0/integrations/browser-mcp/uv.lock +1212 -0
  136. monkeybot-3.2.0/pyproject.toml +140 -0
  137. monkeybot-3.2.0/src/monkeybot/computer/__init__.py +118 -0
  138. monkeybot-3.2.0/src/monkeybot/computer/tools.py +409 -0
  139. monkeybot-3.2.0/src/monkeybot/core/__init__.py +19 -0
  140. monkeybot-3.2.0/src/monkeybot/core/attachments/tools.py +42 -0
  141. monkeybot-3.2.0/src/monkeybot/core/bootstrap.py +302 -0
  142. monkeybot-3.2.0/src/monkeybot/core/config/__init__.py +111 -0
  143. monkeybot-3.2.0/src/monkeybot/core/config/realtime_config.py +213 -0
  144. monkeybot-3.2.0/src/monkeybot/core/config/runtime_env.py +521 -0
  145. monkeybot-3.2.0/src/monkeybot/core/config/settings.py +812 -0
  146. monkeybot-3.2.0/src/monkeybot/core/config/snapshot.py +1009 -0
  147. monkeybot-3.2.0/src/monkeybot/core/config/validation.py +270 -0
  148. monkeybot-3.2.0/src/monkeybot/core/context/__init__.py +992 -0
  149. monkeybot-3.2.0/src/monkeybot/core/context/secret_egress.py +443 -0
  150. monkeybot-3.2.0/src/monkeybot/core/context/tool_output_policy.py +284 -0
  151. monkeybot-3.2.0/src/monkeybot/core/layout.py +318 -0
  152. monkeybot-3.2.0/src/monkeybot/core/llm/provider.py +302 -0
  153. monkeybot-3.2.0/src/monkeybot/core/mcp/mcp_client.py +1419 -0
  154. monkeybot-3.2.0/src/monkeybot/core/mcp/ports_mcp.py +134 -0
  155. monkeybot-3.2.0/src/monkeybot/core/memory/config.py +50 -0
  156. monkeybot-3.2.0/src/monkeybot/core/memory/palace.py +446 -0
  157. monkeybot-3.2.0/src/monkeybot/core/memory/subsystem.py +357 -0
  158. monkeybot-3.2.0/src/monkeybot/core/persistence/backends.py +297 -0
  159. monkeybot-3.2.0/src/monkeybot/core/persistence/firestore.py +1481 -0
  160. monkeybot-3.2.0/src/monkeybot/core/persistence/firestore_scheduled_loops.py +415 -0
  161. monkeybot-3.2.0/src/monkeybot/core/persistence/goal_ledger.py +447 -0
  162. monkeybot-3.2.0/src/monkeybot/core/persistence/postgres.py +1639 -0
  163. monkeybot-3.2.0/src/monkeybot/core/persistence/scheduled_loops.py +491 -0
  164. monkeybot-3.2.0/src/monkeybot/core/persistence/sqlite.py +488 -0
  165. monkeybot-3.2.0/src/monkeybot/core/persistence/sqlite_backend.py +117 -0
  166. monkeybot-3.2.0/src/monkeybot/core/persistence/transcript.py +736 -0
  167. monkeybot-3.2.0/src/monkeybot/core/prompts/harness_prompt.py +203 -0
  168. monkeybot-3.2.0/src/monkeybot/core/prompts/prompt.py +197 -0
  169. monkeybot-3.2.0/src/monkeybot/core/runtime/events.py +1268 -0
  170. monkeybot-3.2.0/src/monkeybot/core/runtime/history_compaction.py +532 -0
  171. monkeybot-3.2.0/src/monkeybot/core/runtime/input_admission.py +170 -0
  172. monkeybot-3.2.0/src/monkeybot/core/runtime/loop.py +169 -0
  173. monkeybot-3.2.0/src/monkeybot/core/runtime/loop_hooks.py +188 -0
  174. monkeybot-3.2.0/src/monkeybot/core/runtime/loop_messages.py +262 -0
  175. monkeybot-3.2.0/src/monkeybot/core/runtime/loop_usage.py +174 -0
  176. monkeybot-3.2.0/src/monkeybot/core/runtime/realtime_loop.py +750 -0
  177. monkeybot-3.2.0/src/monkeybot/core/runtime/tool_batch.py +174 -0
  178. monkeybot-3.2.0/src/monkeybot/core/runtime/tool_dispatch.py +1169 -0
  179. monkeybot-3.2.0/src/monkeybot/core/runtime/turn_loop.py +1746 -0
  180. monkeybot-3.2.0/src/monkeybot/core/subagents/subagent_proto.py +372 -0
  181. monkeybot-3.2.0/src/monkeybot/core/subagents/subagent_worker.py +509 -0
  182. monkeybot-3.2.0/src/monkeybot/core/subagents/worker_pool.py +576 -0
  183. monkeybot-3.2.0/src/monkeybot/core/subprocess_groups.py +161 -0
  184. monkeybot-3.2.0/src/monkeybot/core/tools/core_tool_executor.py +2322 -0
  185. monkeybot-3.2.0/src/monkeybot/core/tools/sandbox_executor.py +390 -0
  186. monkeybot-3.2.0/src/monkeybot/core/tools/terminal.py +741 -0
  187. monkeybot-3.2.0/src/monkeybot/core/types/content_blocks.py +652 -0
  188. monkeybot-3.2.0/src/monkeybot/core/types/types_tools.py +48 -0
  189. monkeybot-3.2.0/src/monkeybot/core/verifier/__init__.py +38 -0
  190. monkeybot-3.2.0/src/monkeybot/core/verifier/actuator.py +39 -0
  191. monkeybot-3.2.0/src/monkeybot/core/verifier/classify.py +213 -0
  192. monkeybot-3.2.0/src/monkeybot/core/verifier/inspector.py +67 -0
  193. monkeybot-3.2.0/src/monkeybot/core/verifier/judge.py +187 -0
  194. monkeybot-3.2.0/src/monkeybot/core/verifier/ledger.py +357 -0
  195. monkeybot-3.2.0/src/monkeybot/core/verifier/mailbox.py +107 -0
  196. monkeybot-3.2.0/src/monkeybot/core/verifier/match.py +94 -0
  197. monkeybot-3.2.0/src/monkeybot/core/verifier/port.py +52 -0
  198. monkeybot-3.2.0/src/monkeybot/core/verifier/severity.py +12 -0
  199. monkeybot-3.2.0/src/monkeybot/core/verifier/tracker.py +292 -0
  200. monkeybot-3.2.0/src/monkeybot/gateway/main.py +49 -0
  201. monkeybot-3.2.0/src/monkeybot/gateway/realtime/app.py +116 -0
  202. monkeybot-3.2.0/src/monkeybot/gateway/realtime/deps.py +132 -0
  203. monkeybot-3.2.0/src/monkeybot/gateway/realtime/routes.py +993 -0
  204. monkeybot-3.2.0/src/monkeybot/gateway/realtime_main.py +50 -0
  205. monkeybot-3.2.0/src/monkeybot/gateway/sse/app.py +1323 -0
  206. monkeybot-3.2.0/src/monkeybot/gateway/sse/models.py +236 -0
  207. monkeybot-3.2.0/src/monkeybot/gateway/sse/reload.py +428 -0
  208. monkeybot-3.2.0/src/monkeybot/gateway/sse/routes.py +1215 -0
  209. monkeybot-3.2.0/src/monkeybot/gateway/sse/scheduler_wiring.py +96 -0
  210. monkeybot-3.2.0/src/monkeybot/gateway/sse/session_bus.py +394 -0
  211. monkeybot-3.2.0/src/monkeybot/observability/sqlite_exporter.py +748 -0
  212. monkeybot-3.2.0/src/monkeybot/providers/_openai_compat.py +1081 -0
  213. monkeybot-3.2.0/src/monkeybot/providers/gemini.py +801 -0
  214. monkeybot-3.2.0/src/monkeybot/providers/huggingface.py +129 -0
  215. monkeybot-3.2.0/src/monkeybot/providers/nvidia.py +104 -0
  216. monkeybot-3.2.0/src/monkeybot/providers/ollama.py +303 -0
  217. monkeybot-3.2.0/src/monkeybot/providers/openrouter.py +106 -0
  218. monkeybot-3.2.0/src/monkeybot/providers/sampling.py +53 -0
  219. monkeybot-3.2.0/src/monkeybot/providers/vertex_claude.py +145 -0
  220. monkeybot-3.2.0/src/monkeybot/scheduler/engine.py +348 -0
  221. monkeybot-3.2.0/src/monkeybot/scheduler/worker.py +92 -0
  222. monkeybot-3.2.0/src/monkeybot/subagents/worker/__main__.py +22 -0
  223. monkeybot-3.2.0/src/monkeybot/todo_list/__init__.py +42 -0
  224. monkeybot-3.2.0/src/monkeybot/web_search/__init__.py +79 -0
  225. monkeybot-3.2.0/src/monkeybot/web_search/tool.py +56 -0
  226. monkeybot-3.2.0/tests/acceptance/test_observability_acceptance.py +252 -0
  227. monkeybot-3.2.0/tests/cli/test_main.py +111 -0
  228. monkeybot-3.2.0/tests/computer/test_subagent_exclusion.py +34 -0
  229. monkeybot-3.2.0/tests/core/test_bootstrap.py +394 -0
  230. monkeybot-3.2.0/tests/core/test_config_extensions.py +819 -0
  231. monkeybot-3.2.0/tests/core/test_content_blocks.py +182 -0
  232. monkeybot-3.2.0/tests/core/test_context.py +754 -0
  233. monkeybot-3.2.0/tests/core/test_core_tool_executor.py +4540 -0
  234. monkeybot-3.2.0/tests/core/test_durable_events.py +97 -0
  235. monkeybot-3.2.0/tests/core/test_env_map_grep_gates.py +44 -0
  236. monkeybot-3.2.0/tests/core/test_events.py +712 -0
  237. monkeybot-3.2.0/tests/core/test_firestore_scheduled_loops.py +350 -0
  238. monkeybot-3.2.0/tests/core/test_gemini_history_replay.py +353 -0
  239. monkeybot-3.2.0/tests/core/test_goal_ledger.py +690 -0
  240. monkeybot-3.2.0/tests/core/test_harness_prompt.py +183 -0
  241. monkeybot-3.2.0/tests/core/test_history.py +431 -0
  242. monkeybot-3.2.0/tests/core/test_history_compaction_split.py +226 -0
  243. monkeybot-3.2.0/tests/core/test_input_admission.py +404 -0
  244. monkeybot-3.2.0/tests/core/test_loop.py +3160 -0
  245. monkeybot-3.2.0/tests/core/test_loop_hooks.py +764 -0
  246. monkeybot-3.2.0/tests/core/test_loop_transcript.py +279 -0
  247. monkeybot-3.2.0/tests/core/test_mcp_client.py +1306 -0
  248. monkeybot-3.2.0/tests/core/test_progress_tracker.py +738 -0
  249. monkeybot-3.2.0/tests/core/test_prompt.py +388 -0
  250. monkeybot-3.2.0/tests/core/test_runtime_config_snapshot.py +798 -0
  251. monkeybot-3.2.0/tests/core/test_runtime_env.py +552 -0
  252. monkeybot-3.2.0/tests/core/test_sandbox_executor.py +954 -0
  253. monkeybot-3.2.0/tests/core/test_scheduled_loops.py +293 -0
  254. monkeybot-3.2.0/tests/core/test_secret_egress.py +466 -0
  255. monkeybot-3.2.0/tests/core/test_storage_backends.py +1247 -0
  256. monkeybot-3.2.0/tests/core/test_subagent_trace_propagation.py +647 -0
  257. monkeybot-3.2.0/tests/core/test_subagent_worker_paths.py +420 -0
  258. monkeybot-3.2.0/tests/core/test_terminal.py +1010 -0
  259. monkeybot-3.2.0/tests/core/test_tool_def_schema.py +50 -0
  260. monkeybot-3.2.0/tests/core/test_transcript.py +745 -0
  261. monkeybot-3.2.0/tests/core/test_truncated_tool_batch.py +192 -0
  262. monkeybot-3.2.0/tests/core/test_verifier_inspector.py +108 -0
  263. monkeybot-3.2.0/tests/core/test_verifier_judge.py +260 -0
  264. monkeybot-3.2.0/tests/core/test_worker_pool.py +789 -0
  265. monkeybot-3.2.0/tests/evals/scenario_runner.py +193 -0
  266. monkeybot-3.2.0/tests/evals/test_agent_behavior.py +38 -0
  267. monkeybot-3.2.0/tests/evals/test_verifier_port.py +30 -0
  268. monkeybot-3.2.0/tests/gateway/realtime/test_deps.py +139 -0
  269. monkeybot-3.2.0/tests/gateway/realtime/test_routes_client_text.py +263 -0
  270. monkeybot-3.2.0/tests/gateway/sse/test_config_reload.py +1131 -0
  271. monkeybot-3.2.0/tests/gateway/sse/test_create_session_model.py +313 -0
  272. monkeybot-3.2.0/tests/gateway/sse/test_gateway_runtime.py +100 -0
  273. monkeybot-3.2.0/tests/gateway/sse/test_routes.py +719 -0
  274. monkeybot-3.2.0/tests/gateway/sse/test_session_bus.py +246 -0
  275. monkeybot-3.2.0/tests/gateway/sse/test_transcript_wiring.py +157 -0
  276. monkeybot-3.2.0/tests/integration/test_mb_e2e_simple_reply.py +118 -0
  277. monkeybot-3.2.0/tests/integration/test_observability_integration.py +402 -0
  278. monkeybot-3.2.0/tests/observability/test_sqlite_exporter.py +709 -0
  279. monkeybot-3.2.0/tests/providers/conftest.py +106 -0
  280. monkeybot-3.2.0/tests/providers/test_gemini_history.py +96 -0
  281. monkeybot-3.2.0/tests/providers/test_ollama.py +336 -0
  282. monkeybot-3.2.0/tests/providers/test_openai_history.py +437 -0
  283. monkeybot-3.2.0/tests/providers/test_sampling.py +156 -0
  284. monkeybot-3.2.0/tests/test_cold_start.py +90 -0
  285. monkeybot-3.2.0/tests/test_packaging_config.py +84 -0
  286. monkeybot-3.2.0/uv.lock +5433 -0
  287. monkeybot-3.0.4/.github/workflows/live-eval-smoke.yml +0 -213
  288. monkeybot-3.0.4/CHANGELOG.md +0 -285
  289. monkeybot-3.0.4/PKG-INFO +0 -203
  290. monkeybot-3.0.4/cli/pyproject.toml +0 -44
  291. monkeybot-3.0.4/cli/skills/monkeybot/SKILL.md +0 -202
  292. monkeybot-3.0.4/cli/skills/monkeybot/references/config-sections.md +0 -179
  293. monkeybot-3.0.4/cli/src/monkeybot_cli/chat_session.py +0 -938
  294. monkeybot-3.0.4/cli/src/monkeybot_cli/chat_tui.py +0 -1917
  295. monkeybot-3.0.4/cli/src/monkeybot_cli/commands/chat.py +0 -889
  296. monkeybot-3.0.4/cli/src/monkeybot_cli/commands/doctor.py +0 -439
  297. monkeybot-3.0.4/cli/src/monkeybot_cli/commands/validate.py +0 -394
  298. monkeybot-3.0.4/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -248
  299. monkeybot-3.0.4/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +0 -16
  300. monkeybot-3.0.4/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +0 -255
  301. monkeybot-3.0.4/cli/tests/test_chat_e2e.py +0 -86
  302. monkeybot-3.0.4/cli/tests/test_chat_session.py +0 -452
  303. monkeybot-3.0.4/cli/tests/test_doctor.py +0 -85
  304. monkeybot-3.0.4/cli/tests/test_gateway_health.py +0 -163
  305. monkeybot-3.0.4/cli/uv.lock +0 -1838
  306. monkeybot-3.0.4/docker-compose.yml +0 -13
  307. monkeybot-3.0.4/docs/browser-mcp.md +0 -221
  308. monkeybot-3.0.4/docs/deploy-aws-agentcore.md +0 -109
  309. monkeybot-3.0.4/docs/deploy-pattern-c-agent-platform.md +0 -236
  310. monkeybot-3.0.4/docs/deploy-pattern-d-realtime.md +0 -308
  311. monkeybot-3.0.4/docs/features.md +0 -846
  312. monkeybot-3.0.4/docs/getting-started.md +0 -182
  313. monkeybot-3.0.4/docs/live-evals.md +0 -66
  314. monkeybot-3.0.4/docs/spill-dynamic-design.md +0 -555
  315. monkeybot-3.0.4/docs/sse-gateway-ui.md +0 -273
  316. monkeybot-3.0.4/evals/TEST_COVERAGE.md +0 -68
  317. monkeybot-3.0.4/evals/assertions.py +0 -105
  318. monkeybot-3.0.4/evals/models.py +0 -115
  319. monkeybot-3.0.4/evals/runner.py +0 -231
  320. monkeybot-3.0.4/evals/scenarios/context/summarization_trigger.yaml +0 -32
  321. monkeybot-3.0.4/evals/scenarios/mcp/get_prompt.yaml +0 -12
  322. monkeybot-3.0.4/evals/scenarios/mcp/list_resources.yaml +0 -12
  323. monkeybot-3.0.4/evals/scenarios/mcp/tool_invoke.yaml +0 -12
  324. monkeybot-3.0.4/evals/scenarios/memory/recall_cross_session.yaml +0 -12
  325. monkeybot-3.0.4/evals/scenarios/memory/recall_single_session.yaml +0 -11
  326. monkeybot-3.0.4/evals/scenarios/multi_turn/task_tracking.yaml +0 -11
  327. monkeybot-3.0.4/evals/scenarios/skills/skill_invocation.yaml +0 -10
  328. monkeybot-3.0.4/evals/scenarios/subagents/dispatch_complete.yaml +0 -8
  329. monkeybot-3.0.4/evals/scenarios/tools/core_read.yaml +0 -10
  330. monkeybot-3.0.4/evals/scenarios/tools/core_read_error.yaml +0 -10
  331. monkeybot-3.0.4/evals/scenarios/tools/core_run_command.yaml +0 -11
  332. monkeybot-3.0.4/evals/scenarios/tools/core_run_command_sandbox.yaml +0 -20
  333. monkeybot-3.0.4/evals/scenarios/tools/core_write.yaml +0 -10
  334. monkeybot-3.0.4/evals/scorer.py +0 -361
  335. monkeybot-3.0.4/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -48
  336. monkeybot-3.0.4/evals/smoke_agent/pyproject.toml +0 -13
  337. monkeybot-3.0.4/evals/smoke_agent/skills/browser/SKILL.md +0 -8
  338. monkeybot-3.0.4/evals/smoke_agent/uv.lock +0 -2332
  339. monkeybot-3.0.4/evals/test_assertions.py +0 -166
  340. monkeybot-3.0.4/evals/test_runner_sse.py +0 -142
  341. monkeybot-3.0.4/examples/README.md +0 -34
  342. monkeybot-3.0.4/examples/lambda/handler.py +0 -95
  343. monkeybot-3.0.4/examples/skills/browser/SKILL.md +0 -68
  344. monkeybot-3.0.4/examples/skills/diagnostics/README.md +0 -250
  345. monkeybot-3.0.4/examples/skills/diagnostics/SKILL.md +0 -31
  346. monkeybot-3.0.4/examples/skills/diagnostics/diagnostics.py +0 -127
  347. monkeybot-3.0.4/integrations/browser-mcp/pyproject.toml +0 -25
  348. monkeybot-3.0.4/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -209
  349. monkeybot-3.0.4/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -123
  350. monkeybot-3.0.4/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -91
  351. monkeybot-3.0.4/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -344
  352. monkeybot-3.0.4/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -57
  353. monkeybot-3.0.4/integrations/browser-mcp/src/browser_mcp/server.py +0 -536
  354. monkeybot-3.0.4/integrations/browser-mcp/tests/test_agentcore.py +0 -348
  355. monkeybot-3.0.4/integrations/browser-mcp/tests/test_dom_indexing.py +0 -147
  356. monkeybot-3.0.4/integrations/browser-mcp/tests/test_in_app_cdp.py +0 -208
  357. monkeybot-3.0.4/integrations/browser-mcp/tests/test_indexed_tools.py +0 -120
  358. monkeybot-3.0.4/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -145
  359. monkeybot-3.0.4/integrations/browser-mcp/tests/test_screenshots.py +0 -61
  360. monkeybot-3.0.4/integrations/browser-mcp/tests/test_server_shutdown.py +0 -117
  361. monkeybot-3.0.4/integrations/browser-mcp/uv.lock +0 -1153
  362. monkeybot-3.0.4/pyproject.toml +0 -140
  363. monkeybot-3.0.4/src/monkeybot/computer/__init__.py +0 -116
  364. monkeybot-3.0.4/src/monkeybot/computer/tools.py +0 -406
  365. monkeybot-3.0.4/src/monkeybot/core/__init__.py +0 -19
  366. monkeybot-3.0.4/src/monkeybot/core/attachments/tools.py +0 -41
  367. monkeybot-3.0.4/src/monkeybot/core/bootstrap.py +0 -305
  368. monkeybot-3.0.4/src/monkeybot/core/config/__init__.py +0 -75
  369. monkeybot-3.0.4/src/monkeybot/core/config/realtime_config.py +0 -150
  370. monkeybot-3.0.4/src/monkeybot/core/config/runtime_env.py +0 -333
  371. monkeybot-3.0.4/src/monkeybot/core/config/settings.py +0 -438
  372. monkeybot-3.0.4/src/monkeybot/core/config/validation.py +0 -251
  373. monkeybot-3.0.4/src/monkeybot/core/context/__init__.py +0 -960
  374. monkeybot-3.0.4/src/monkeybot/core/context/tool_output_policy.py +0 -270
  375. monkeybot-3.0.4/src/monkeybot/core/layout.py +0 -315
  376. monkeybot-3.0.4/src/monkeybot/core/llm/provider.py +0 -302
  377. monkeybot-3.0.4/src/monkeybot/core/mcp/mcp_client.py +0 -1244
  378. monkeybot-3.0.4/src/monkeybot/core/mcp/ports_mcp.py +0 -103
  379. monkeybot-3.0.4/src/monkeybot/core/memory/config.py +0 -51
  380. monkeybot-3.0.4/src/monkeybot/core/memory/palace.py +0 -444
  381. monkeybot-3.0.4/src/monkeybot/core/memory/subsystem.py +0 -355
  382. monkeybot-3.0.4/src/monkeybot/core/persistence/backends.py +0 -294
  383. monkeybot-3.0.4/src/monkeybot/core/persistence/firestore.py +0 -1476
  384. monkeybot-3.0.4/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -336
  385. monkeybot-3.0.4/src/monkeybot/core/persistence/postgres.py +0 -1626
  386. monkeybot-3.0.4/src/monkeybot/core/persistence/scheduled_loops.py +0 -454
  387. monkeybot-3.0.4/src/monkeybot/core/persistence/sqlite.py +0 -471
  388. monkeybot-3.0.4/src/monkeybot/core/persistence/sqlite_backend.py +0 -108
  389. monkeybot-3.0.4/src/monkeybot/core/persistence/transcript.py +0 -304
  390. monkeybot-3.0.4/src/monkeybot/core/persistence/transcript_analyzer.py +0 -849
  391. monkeybot-3.0.4/src/monkeybot/core/prompts/harness_prompt.py +0 -183
  392. monkeybot-3.0.4/src/monkeybot/core/prompts/prompt.py +0 -203
  393. monkeybot-3.0.4/src/monkeybot/core/runtime/events.py +0 -1067
  394. monkeybot-3.0.4/src/monkeybot/core/runtime/history_compaction.py +0 -407
  395. monkeybot-3.0.4/src/monkeybot/core/runtime/input_admission.py +0 -154
  396. monkeybot-3.0.4/src/monkeybot/core/runtime/loop.py +0 -164
  397. monkeybot-3.0.4/src/monkeybot/core/runtime/loop_hooks.py +0 -133
  398. monkeybot-3.0.4/src/monkeybot/core/runtime/loop_messages.py +0 -261
  399. monkeybot-3.0.4/src/monkeybot/core/runtime/loop_usage.py +0 -171
  400. monkeybot-3.0.4/src/monkeybot/core/runtime/realtime_loop.py +0 -767
  401. monkeybot-3.0.4/src/monkeybot/core/runtime/tool_batch.py +0 -169
  402. monkeybot-3.0.4/src/monkeybot/core/runtime/tool_dispatch.py +0 -1058
  403. monkeybot-3.0.4/src/monkeybot/core/runtime/turn_loop.py +0 -1484
  404. monkeybot-3.0.4/src/monkeybot/core/subagents/subagent_proto.py +0 -371
  405. monkeybot-3.0.4/src/monkeybot/core/subagents/subagent_worker.py +0 -499
  406. monkeybot-3.0.4/src/monkeybot/core/subagents/worker_pool.py +0 -635
  407. monkeybot-3.0.4/src/monkeybot/core/tools/core_tool_executor.py +0 -2183
  408. monkeybot-3.0.4/src/monkeybot/core/tools/sandbox_executor.py +0 -387
  409. monkeybot-3.0.4/src/monkeybot/core/tools/terminal.py +0 -771
  410. monkeybot-3.0.4/src/monkeybot/core/types/content_blocks.py +0 -644
  411. monkeybot-3.0.4/src/monkeybot/core/types/types_tools.py +0 -45
  412. monkeybot-3.0.4/src/monkeybot/gateway/main.py +0 -50
  413. monkeybot-3.0.4/src/monkeybot/gateway/realtime/app.py +0 -133
  414. monkeybot-3.0.4/src/monkeybot/gateway/realtime/deps.py +0 -57
  415. monkeybot-3.0.4/src/monkeybot/gateway/realtime/routes.py +0 -926
  416. monkeybot-3.0.4/src/monkeybot/gateway/realtime_main.py +0 -51
  417. monkeybot-3.0.4/src/monkeybot/gateway/sse/app.py +0 -847
  418. monkeybot-3.0.4/src/monkeybot/gateway/sse/models.py +0 -236
  419. monkeybot-3.0.4/src/monkeybot/gateway/sse/routes.py +0 -1224
  420. monkeybot-3.0.4/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -96
  421. monkeybot-3.0.4/src/monkeybot/gateway/sse/session_bus.py +0 -407
  422. monkeybot-3.0.4/src/monkeybot/observability/sqlite_exporter.py +0 -722
  423. monkeybot-3.0.4/src/monkeybot/providers/_openai_compat.py +0 -1015
  424. monkeybot-3.0.4/src/monkeybot/providers/gemini.py +0 -780
  425. monkeybot-3.0.4/src/monkeybot/providers/huggingface.py +0 -129
  426. monkeybot-3.0.4/src/monkeybot/providers/nvidia.py +0 -104
  427. monkeybot-3.0.4/src/monkeybot/providers/ollama.py +0 -251
  428. monkeybot-3.0.4/src/monkeybot/providers/openrouter.py +0 -106
  429. monkeybot-3.0.4/src/monkeybot/providers/sampling.py +0 -44
  430. monkeybot-3.0.4/src/monkeybot/providers/vertex_claude.py +0 -144
  431. monkeybot-3.0.4/src/monkeybot/scheduler/engine.py +0 -333
  432. monkeybot-3.0.4/src/monkeybot/scheduler/worker.py +0 -91
  433. monkeybot-3.0.4/src/monkeybot/subagents/worker/__main__.py +0 -22
  434. monkeybot-3.0.4/src/monkeybot/todo_list/__init__.py +0 -45
  435. monkeybot-3.0.4/src/monkeybot/web_search/__init__.py +0 -82
  436. monkeybot-3.0.4/src/monkeybot/web_search/tool.py +0 -56
  437. monkeybot-3.0.4/tests/acceptance/test_observability_acceptance.py +0 -240
  438. monkeybot-3.0.4/tests/cli/test_main.py +0 -111
  439. monkeybot-3.0.4/tests/computer/test_subagent_exclusion.py +0 -34
  440. monkeybot-3.0.4/tests/core/test_bootstrap.py +0 -394
  441. monkeybot-3.0.4/tests/core/test_config_extensions.py +0 -576
  442. monkeybot-3.0.4/tests/core/test_content_blocks.py +0 -182
  443. monkeybot-3.0.4/tests/core/test_context.py +0 -687
  444. monkeybot-3.0.4/tests/core/test_core_tool_executor.py +0 -4306
  445. monkeybot-3.0.4/tests/core/test_durable_events.py +0 -103
  446. monkeybot-3.0.4/tests/core/test_events.py +0 -622
  447. monkeybot-3.0.4/tests/core/test_firestore_scheduled_loops.py +0 -34
  448. monkeybot-3.0.4/tests/core/test_gemini_history_replay.py +0 -327
  449. monkeybot-3.0.4/tests/core/test_harness_prompt.py +0 -162
  450. monkeybot-3.0.4/tests/core/test_history.py +0 -406
  451. monkeybot-3.0.4/tests/core/test_history_compaction_split.py +0 -120
  452. monkeybot-3.0.4/tests/core/test_input_admission.py +0 -387
  453. monkeybot-3.0.4/tests/core/test_loop.py +0 -3114
  454. monkeybot-3.0.4/tests/core/test_loop_hooks.py +0 -584
  455. monkeybot-3.0.4/tests/core/test_loop_transcript.py +0 -270
  456. monkeybot-3.0.4/tests/core/test_mcp_client.py +0 -993
  457. monkeybot-3.0.4/tests/core/test_prompt.py +0 -336
  458. monkeybot-3.0.4/tests/core/test_runtime_env.py +0 -419
  459. monkeybot-3.0.4/tests/core/test_sandbox_executor.py +0 -863
  460. monkeybot-3.0.4/tests/core/test_scheduled_loops.py +0 -116
  461. monkeybot-3.0.4/tests/core/test_storage_backends.py +0 -1238
  462. monkeybot-3.0.4/tests/core/test_subagent_trace_propagation.py +0 -557
  463. monkeybot-3.0.4/tests/core/test_subagent_worker_paths.py +0 -402
  464. monkeybot-3.0.4/tests/core/test_terminal.py +0 -1010
  465. monkeybot-3.0.4/tests/core/test_tool_def_schema.py +0 -49
  466. monkeybot-3.0.4/tests/core/test_transcript.py +0 -254
  467. monkeybot-3.0.4/tests/core/test_transcript_analyzer.py +0 -371
  468. monkeybot-3.0.4/tests/core/test_truncated_tool_batch.py +0 -175
  469. monkeybot-3.0.4/tests/core/test_worker_pool.py +0 -693
  470. monkeybot-3.0.4/tests/evals/scenario_runner.py +0 -183
  471. monkeybot-3.0.4/tests/evals/test_agent_behavior.py +0 -48
  472. monkeybot-3.0.4/tests/gateway/realtime/test_deps.py +0 -15
  473. monkeybot-3.0.4/tests/gateway/realtime/test_routes_client_text.py +0 -249
  474. monkeybot-3.0.4/tests/gateway/sse/test_create_session_model.py +0 -282
  475. monkeybot-3.0.4/tests/gateway/sse/test_routes.py +0 -721
  476. monkeybot-3.0.4/tests/gateway/sse/test_session_bus.py +0 -247
  477. monkeybot-3.0.4/tests/gateway/sse/test_transcript_wiring.py +0 -155
  478. monkeybot-3.0.4/tests/integration/test_mb_e2e_simple_reply.py +0 -112
  479. monkeybot-3.0.4/tests/integration/test_observability_integration.py +0 -382
  480. monkeybot-3.0.4/tests/observability/test_sqlite_exporter.py +0 -655
  481. monkeybot-3.0.4/tests/providers/conftest.py +0 -79
  482. monkeybot-3.0.4/tests/providers/test_ollama.py +0 -227
  483. monkeybot-3.0.4/tests/providers/test_openai_history.py +0 -356
  484. monkeybot-3.0.4/tests/providers/test_sampling.py +0 -136
  485. monkeybot-3.0.4/tests/test_cold_start.py +0 -84
  486. monkeybot-3.0.4/tests/test_packaging_config.py +0 -84
  487. monkeybot-3.0.4/uv.lock +0 -5429
  488. {monkeybot-3.0.4 → monkeybot-3.2.0}/.dockerignore +0 -0
  489. {monkeybot-3.0.4 → monkeybot-3.2.0}/.github/workflows/ci.yml +0 -0
  490. {monkeybot-3.0.4 → monkeybot-3.2.0}/.github/workflows/prepare-release.yml +0 -0
  491. {monkeybot-3.0.4 → monkeybot-3.2.0}/.github/workflows/publish-release.yml +0 -0
  492. {monkeybot-3.0.4 → monkeybot-3.2.0}/.gitignore +0 -0
  493. {monkeybot-3.0.4 → monkeybot-3.2.0}/.pre-commit-config.yaml +0 -0
  494. {monkeybot-3.0.4 → monkeybot-3.2.0}/BACKLOG.md +0 -0
  495. {monkeybot-3.0.4 → monkeybot-3.2.0}/CONTRIBUTING.md +0 -0
  496. {monkeybot-3.0.4 → monkeybot-3.2.0}/LICENSE +0 -0
  497. {monkeybot-3.0.4 → monkeybot-3.2.0}/README.md +0 -0
  498. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/__init__.py +0 -0
  499. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
  500. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
  501. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
  502. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
  503. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
  504. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_tool_display.py +0 -0
  505. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
  506. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
  507. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
  508. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
  509. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
  510. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
  511. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
  512. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/compat.py +0 -0
  513. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
  514. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
  515. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
  516. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
  517. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/main.py +0 -0
  518. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
  519. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/output.py +0 -0
  520. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
  521. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/providers.py +0 -0
  522. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
  523. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
  524. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
  525. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
  526. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
  527. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
  528. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
  529. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
  530. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
  531. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold.py +0 -0
  532. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
  533. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
  534. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
  535. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -0
  536. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
  537. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
  538. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
  539. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
  540. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
  541. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
  542. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
  543. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
  544. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
  545. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
  546. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
  547. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_continue.py +0 -0
  548. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_errors.py +0 -0
  549. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_file_index.py +0 -0
  550. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_grounding.py +0 -0
  551. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_local_shell.py +0 -0
  552. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_renderer_parity.py +0 -0
  553. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_status_bar.py +0 -0
  554. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_theme.py +0 -0
  555. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_tool_display.py +0 -0
  556. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_chat_tui.py +0 -0
  557. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_cli.py +0 -0
  558. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_config_resolve.py +0 -0
  559. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_extras_catalog.py +0 -0
  560. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
  561. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_realtime_session_controller.py +0 -0
  562. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_run_cmd.py +0 -0
  563. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_runtime_python.py +0 -0
  564. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_scaffold.py +0 -0
  565. {monkeybot-3.0.4 → monkeybot-3.2.0}/cli/tests/test_terminal_markdown.py +0 -0
  566. {monkeybot-3.0.4 → monkeybot-3.2.0}/docker/Dockerfile +0 -0
  567. {monkeybot-3.0.4 → monkeybot-3.2.0}/docker/docker-compose.sandbox.yml +0 -0
  568. {monkeybot-3.0.4 → monkeybot-3.2.0}/docker/opensandbox.docker.toml +0 -0
  569. {monkeybot-3.0.4 → monkeybot-3.2.0}/docker/sandbox.Dockerfile +0 -0
  570. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/agent-layout.md +0 -0
  571. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/assets/logo.png +0 -0
  572. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/cloud-deployment-design.md +0 -0
  573. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/deploy-pattern-a-container.md +0 -0
  574. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/deploy-pattern-b-serverless.md +0 -0
  575. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/knowledge-layer-fixes.md +0 -0
  576. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/mcp.md +0 -0
  577. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/memory-graph-split-plan.md +0 -0
  578. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/migrations/agent-scope-namespacing.md +0 -0
  579. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/migrations/memory-outbox.sql +0 -0
  580. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/observability-runbook.md +0 -0
  581. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/otel-collector.example.yaml +0 -0
  582. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/progressive-loop-tools.md +0 -0
  583. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/progressive-mcp-tools.md +0 -0
  584. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/skills.md +0 -0
  585. {monkeybot-3.0.4 → monkeybot-3.2.0}/docs/workspace-index-design.md +0 -0
  586. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/diff.py +0 -0
  587. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/eval_config.yaml +0 -0
  588. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/persistence.py +0 -0
  589. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/report.py +0 -0
  590. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/scenario_loader.py +0 -0
  591. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/.env.example +0 -0
  592. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/.gitignore +0 -0
  593. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
  594. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
  595. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
  596. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
  597. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
  598. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
  599. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
  600. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/suites/smoke.yaml +0 -0
  601. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/test_diff.py +0 -0
  602. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/test_judge.py +0 -0
  603. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/test_report.py +0 -0
  604. {monkeybot-3.0.4 → monkeybot-3.2.0}/evals/test_scorer.py +0 -0
  605. {monkeybot-3.0.4 → monkeybot-3.2.0}/examples/agentcore/handler.py +0 -0
  606. {monkeybot-3.0.4 → monkeybot-3.2.0}/examples/agentcore/runtime_app.py +0 -0
  607. {monkeybot-3.0.4 → monkeybot-3.2.0}/examples/agentengine/handler.py +0 -0
  608. {monkeybot-3.0.4 → monkeybot-3.2.0}/examples/cloud-functions/main.py +0 -0
  609. {monkeybot-3.0.4 → monkeybot-3.2.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
  610. {monkeybot-3.0.4 → monkeybot-3.2.0}/examples/skills/diagnostics/__init__.py +0 -0
  611. {monkeybot-3.0.4 → monkeybot-3.2.0}/examples/skills/image-generator/SKILL.md +0 -0
  612. {monkeybot-3.0.4 → monkeybot-3.2.0}/examples/skills/image-generator/generate_image.py +0 -0
  613. {monkeybot-3.0.4 → monkeybot-3.2.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
  614. {monkeybot-3.0.4 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
  615. {monkeybot-3.0.4 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
  616. {monkeybot-3.0.4 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
  617. {monkeybot-3.0.4 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
  618. {monkeybot-3.0.4 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
  619. {monkeybot-3.0.4 → monkeybot-3.2.0}/pytest.ini +0 -0
  620. {monkeybot-3.0.4 → monkeybot-3.2.0}/scripts/create_schema.py +0 -0
  621. {monkeybot-3.0.4 → monkeybot-3.2.0}/scripts/precommit-pytest.sh +0 -0
  622. {monkeybot-3.0.4 → monkeybot-3.2.0}/scripts/release.py +0 -0
  623. {monkeybot-3.0.4 → monkeybot-3.2.0}/scripts/smoke_global_cli.sh +0 -0
  624. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/__init__.py +0 -0
  625. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/cli/__init__.py +0 -0
  626. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/cli/__main__.py +0 -0
  627. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/cli/audio_io.py +0 -0
  628. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/cli/gateway_manager.py +0 -0
  629. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/cli/main.py +0 -0
  630. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/cli/push_to_talk.py +0 -0
  631. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/cli/realtime_client.py +0 -0
  632. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/computer/approvals.py +0 -0
  633. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/computer/permissions.py +0 -0
  634. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/computer/safety.py +0 -0
  635. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/attachments/__init__.py +0 -0
  636. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/attachments/catalog.py +0 -0
  637. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/attachments/config.py +0 -0
  638. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/attachments/freeze.py +0 -0
  639. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/attachments/resolve.py +0 -0
  640. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/attachments/store.py +0 -0
  641. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/attachments/text.py +0 -0
  642. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
  643. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/context/campaign_context.py +0 -0
  644. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/context/common.py +0 -0
  645. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/context/epoch.py +0 -0
  646. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/context/tool_result_ingress.py +0 -0
  647. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/context/tool_shapers.py +0 -0
  648. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/hooks/__init__.py +0 -0
  649. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/__init__.py +0 -0
  650. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/captions.py +0 -0
  651. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/chunking.py +0 -0
  652. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/config.py +0 -0
  653. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/__init__.py +0 -0
  654. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/base.py +0 -0
  655. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/factory.py +0 -0
  656. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/gemini.py +0 -0
  657. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/nvidia.py +0 -0
  658. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/openai_compat.py +0 -0
  659. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/sanitize.py +0 -0
  660. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/evidence_guard.py +0 -0
  661. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/extractors.py +0 -0
  662. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/fusion.py +0 -0
  663. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/hook.py +0 -0
  664. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/indexer.py +0 -0
  665. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/links.py +0 -0
  666. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/salience.py +0 -0
  667. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/sqlite_index.py +0 -0
  668. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/subsystem.py +0 -0
  669. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/tool.py +0 -0
  670. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/types.py +0 -0
  671. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/llm/__init__.py +0 -0
  672. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
  673. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/llm/usage.py +0 -0
  674. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/lockfile_names.py +0 -0
  675. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/logging_utils.py +0 -0
  676. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/mcp/__init__.py +0 -0
  677. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/__init__.py +0 -0
  678. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/hook.py +0 -0
  679. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/ids.py +0 -0
  680. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/ingest.py +0 -0
  681. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
  682. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/observability.py +0 -0
  683. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/outbox.py +0 -0
  684. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/uri.py +0 -0
  685. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/memory/writer.py +0 -0
  686. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/messages/__init__.py +0 -0
  687. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
  688. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/messages/tool_integrity.py +0 -0
  689. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/messages/transform_context.py +0 -0
  690. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/path_safety.py +0 -0
  691. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/__init__.py +0 -0
  692. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/db.py +0 -0
  693. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
  694. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/errors.py +0 -0
  695. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
  696. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/history.py +0 -0
  697. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/runs.py +0 -0
  698. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
  699. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/sqlite_vector.py +0 -0
  700. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/thread_summary.py +0 -0
  701. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/usage.py +0 -0
  702. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
  703. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/prompts/__init__.py +0 -0
  704. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/prompts/headings.py +0 -0
  705. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/runtime/__init__.py +0 -0
  706. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/runtime/context_budget.py +0 -0
  707. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/runtime/doom_loop.py +0 -0
  708. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
  709. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
  710. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
  711. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/subagents/__init__.py +0 -0
  712. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
  713. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/testing/__init__.py +0 -0
  714. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
  715. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
  716. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/__init__.py +0 -0
  717. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
  718. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/inspector.py +0 -0
  719. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
  720. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/patch.py +0 -0
  721. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/permission.py +0 -0
  722. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/spill_inventory.py +0 -0
  723. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
  724. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
  725. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/tool_kind.py +0 -0
  726. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/types.py +0 -0
  727. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/tools/workspace_service.py +0 -0
  728. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/types/__init__.py +0 -0
  729. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/types/interfaces.py +0 -0
  730. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/workspace/__init__.py +0 -0
  731. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/workspace/factory.py +0 -0
  732. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/workspace/gcs.py +0 -0
  733. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/workspace/local.py +0 -0
  734. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/workspace/protocol.py +0 -0
  735. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/workspace/s3.py +0 -0
  736. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/core/workspace_layout.py +0 -0
  737. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/__init__.py +0 -0
  738. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/bootstrap.py +0 -0
  739. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
  740. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
  741. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
  742. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
  743. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/manager.py +0 -0
  744. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
  745. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/session.py +0 -0
  746. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
  747. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
  748. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
  749. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
  750. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
  751. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/sse.py +0 -0
  752. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
  753. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/observability/__init__.py +0 -0
  754. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/observability/_state.py +0 -0
  755. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/observability/instrumentation.py +0 -0
  756. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/observability/propagation.py +0 -0
  757. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/observability/spans.py +0 -0
  758. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/__init__.py +0 -0
  759. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
  760. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/_utils.py +0 -0
  761. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/bedrock.py +0 -0
  762. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/claude.py +0 -0
  763. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/gemini_live.py +0 -0
  764. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/model_capabilities.py +0 -0
  765. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/openai.py +0 -0
  766. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/providers/pricing.py +0 -0
  767. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/scaffold/__init__.py +0 -0
  768. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/scheduler/__init__.py +0 -0
  769. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/scheduler/__main__.py +0 -0
  770. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
  771. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/scheduler/interval.py +0 -0
  772. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/scheduler/tick_result.py +0 -0
  773. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/subagents/__init__.py +0 -0
  774. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
  775. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/todo_list/store.py +0 -0
  776. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/todo_list/tool.py +0 -0
  777. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
  778. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
  779. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
  780. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
  781. {monkeybot-3.0.4 → monkeybot-3.2.0}/src/monkeybot/web_search/protocol.py +0 -0
  782. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/__init__.py +0 -0
  783. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/cli/__init__.py +0 -0
  784. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/cli/test_gateway_manager.py +0 -0
  785. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/cli/test_push_to_talk.py +0 -0
  786. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/cli/test_realtime_client.py +0 -0
  787. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/computer/__init__.py +0 -0
  788. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/computer/test_approvals.py +0 -0
  789. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/computer/test_computer_tools.py +0 -0
  790. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/computer/test_package_init.py +0 -0
  791. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/computer/test_path_policy.py +0 -0
  792. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/computer/test_permissions.py +0 -0
  793. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/computer/test_wiring.py +0 -0
  794. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/conftest.py +0 -0
  795. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/__init__.py +0 -0
  796. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
  797. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/memory/helpers.py +0 -0
  798. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/memory/in_memory_palace.py +0 -0
  799. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/memory/test_mempalace.py +0 -0
  800. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/memory/test_review_fixes.py +0 -0
  801. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_agent_layout.py +0 -0
  802. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_attachment_freeze.py +0 -0
  803. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_attachment_store.py +0 -0
  804. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_context_budget.py +0 -0
  805. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_context_epoch.py +0 -0
  806. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_doom_loop.py +0 -0
  807. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_durable_runs.py +0 -0
  808. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_empty_completion.py +0 -0
  809. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_evidence_guard.py +0 -0
  810. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_firestore_history.py +0 -0
  811. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_firestore_usage.py +0 -0
  812. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_fs_isolation.py +0 -0
  813. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_hooks.py +0 -0
  814. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_inspector.py +0 -0
  815. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_chunking.py +0 -0
  816. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_chunking_rank.py +0 -0
  817. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_config.py +0 -0
  818. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_embeddings.py +0 -0
  819. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_fts.py +0 -0
  820. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_fusion.py +0 -0
  821. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_fusion_ann.py +0 -0
  822. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_hook.py +0 -0
  823. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_indexer.py +0 -0
  824. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_links.py +0 -0
  825. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_media.py +0 -0
  826. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_salience.py +0 -0
  827. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_single_writer.py +0 -0
  828. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_subsystem.py +0 -0
  829. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_knowledge_vectors.py +0 -0
  830. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_layout.py +0 -0
  831. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_logging_utils.py +0 -0
  832. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_loop_observability.py +0 -0
  833. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_memory_layout_migrate.py +0 -0
  834. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_message_pipeline.py +0 -0
  835. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_mocks_realtime_provider.py +0 -0
  836. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_patch.py +0 -0
  837. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_path_safety.py +0 -0
  838. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_permission.py +0 -0
  839. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_pricing.py +0 -0
  840. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_progress_publish.py +0 -0
  841. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_provider_contract.py +0 -0
  842. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_provider_stream_mapper.py +0 -0
  843. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_realtime_loop.py +0 -0
  844. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_replace_fuzzy.py +0 -0
  845. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_run_command_parse.py +0 -0
  846. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_runs.py +0 -0
  847. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_session_turn_locks.py +0 -0
  848. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_settlement.py +0 -0
  849. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_spill_dynamic.py +0 -0
  850. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_spill_inventory.py +0 -0
  851. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_subagent_proto.py +0 -0
  852. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_thread_summary_wire.py +0 -0
  853. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_tool_integrity.py +0 -0
  854. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_tool_result_ingress.py +0 -0
  855. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_tool_shapers.py +0 -0
  856. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_usage.py +0 -0
  857. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_usage_migration.py +0 -0
  858. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_utterance_buffer.py +0 -0
  859. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_workspace_layout.py +0 -0
  860. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_workspace_symlinks.py +0 -0
  861. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/test_workspace_write_scope.py +0 -0
  862. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/workspace/test_factory.py +0 -0
  863. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/workspace/test_local_storage.py +0 -0
  864. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/core/workspace/test_protocol_contract.py +0 -0
  865. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/__init__.py +0 -0
  866. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/eval_hook.py +0 -0
  867. /monkeybot-3.0.4/tests/evals/scenarios/context_curation.yaml → /monkeybot-3.2.0/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
  868. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
  869. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
  870. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
  871. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
  872. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
  873. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_read.yaml +0 -0
  874. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
  875. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
  876. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_search_knowledge.yaml +0 -0
  877. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
  878. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
  879. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
  880. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/tool_write.yaml +0 -0
  881. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
  882. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/evals/test_memory_knowledge_routing.py +0 -0
  883. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/__init__.py +0 -0
  884. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/realtime/__init__.py +0 -0
  885. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/realtime/test_app.py +0 -0
  886. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/realtime/test_guardrails.py +0 -0
  887. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/realtime/test_manager.py +0 -0
  888. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/realtime/test_metrics.py +0 -0
  889. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/realtime/test_session.py +0 -0
  890. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/realtime/test_wire.py +0 -0
  891. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/sse/test_attachments.py +0 -0
  892. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
  893. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/test_otel_fastapi.py +0 -0
  894. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/test_otel_lifespan.py +0 -0
  895. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
  896. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/test_realtime_main.py +0 -0
  897. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/test_resolve_provider.py +0 -0
  898. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/test_sse_events.py +0 -0
  899. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
  900. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/integration/__init__.py +0 -0
  901. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/integration/test_prompt_caching_integration.py +0 -0
  902. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/conftest.py +0 -0
  903. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/test_init.py +0 -0
  904. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/test_instrumentation.py +0 -0
  905. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/test_loop_hook_spans.py +0 -0
  906. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/test_propagation.py +0 -0
  907. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/test_span_contract.py +0 -0
  908. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/test_spans.py +0 -0
  909. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/test_truncate.py +0 -0
  910. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/observability/test_turn_complete_trace.py +0 -0
  911. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_anthropic_cache.py +0 -0
  912. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_anthropic_history.py +0 -0
  913. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_bedrock_converse.py +0 -0
  914. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_bedrock_estimate.py +0 -0
  915. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_gemini_live.py +0 -0
  916. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_gemini_usage.py +0 -0
  917. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_huggingface.py +0 -0
  918. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_model_capabilities.py +0 -0
  919. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_nvidia.py +0 -0
  920. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_openai_compat_usage.py +0 -0
  921. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_pricing.py +0 -0
  922. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
  923. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_sonnet5_sampling.py +0 -0
  924. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_source_grep_gates.py +0 -0
  925. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/providers/test_vertex_claude_history.py +0 -0
  926. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/scheduler/test_engine.py +0 -0
  927. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/scheduler/test_interval.py +0 -0
  928. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/skills/__init__.py +0 -0
  929. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/skills/test_generate_image_script.py +0 -0
  930. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/test_release_script.py +0 -0
  931. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/todo_list/test_todo_list.py +0 -0
  932. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/web_search/__init__.py +0 -0
  933. {monkeybot-3.0.4 → monkeybot-3.2.0}/tests/web_search/test_web_search.py +0 -0
@@ -0,0 +1,208 @@
1
+ name: Live eval smoke
2
+
3
+ # Runs the live eval smoke suite (see docs/live-evals.md) and posts a Markdown
4
+ # scorecard. LLM-judge calls cost money and take minutes, so this does not run on
5
+ # ordinary feature-branch -> develop PRs. Trigger points:
6
+ # (a) any PR from develop into main (release-promotion gate; --fail-on-regression)
7
+ # (b) any PR that touches a dependency lockfile (catches silent SDK breakage,
8
+ # e.g. provider request/response shape changes, that code review won't see)
9
+ # (c) every push to main (scores the new release; report-only, never fails the build)
10
+ # (d) manual: Actions tab -> Live eval smoke -> Run workflow
11
+ # The scorecard always lands on the workflow run's Summary page; PR events also get it
12
+ # as a PR comment. The run JSON is uploaded as an artifact — download two of them and
13
+ # compare with `uv run python -m evals.diff <old.json> <new.json>`.
14
+ #
15
+ # Cost/time budget: smoke suite is ~11 scenarios x 2-5 turns x (agent call + judge call),
16
+ # paced by EVAL_SCENARIO_DELAY_SEC=150 between scenarios to stay under the current
17
+ # model's provider rate limit. Expect roughly $0.75-3.00 and ~30-45 minutes per run
18
+ # (10 delays x 150s = 25 min of pacing alone, plus actual call time) — this is not
19
+ # stuck if it runs long; see timeout-minutes below.
20
+ #
21
+ # Secrets required: NVIDIA_API_KEY only (https://build.nvidia.com — free tier). The agent
22
+ # and the judge both run on NVIDIA-hosted models through the same key, pinned to two
23
+ # *different* models below so the judge isn't grading its own output and scoring doesn't
24
+ # silently drift.
25
+
26
+ on:
27
+ pull_request:
28
+ push:
29
+ branches: [main]
30
+ workflow_dispatch:
31
+
32
+ permissions:
33
+ contents: read
34
+ pull-requests: write
35
+
36
+ jobs:
37
+ gate:
38
+ runs-on: ubuntu-latest
39
+ outputs:
40
+ run: ${{ steps.decide.outputs.run }}
41
+ steps:
42
+ - uses: actions/checkout@v4
43
+ with:
44
+ fetch-depth: 0
45
+
46
+ - id: decide
47
+ env:
48
+ EVENT_NAME: ${{ github.event_name }}
49
+ BASE_REF: ${{ github.base_ref }}
50
+ HEAD_REF: ${{ github.head_ref }}
51
+ BASE_SHA: ${{ github.event.pull_request.base.sha }}
52
+ HEAD_SHA: ${{ github.event.pull_request.head.sha }}
53
+ run: |
54
+ run=false
55
+ # Push to main and manual dispatch always run; PRs are gated below.
56
+ if [[ "$EVENT_NAME" != "pull_request" ]]; then
57
+ run=true
58
+ else
59
+ if [[ "$BASE_REF" == "main" && "$HEAD_REF" == "develop" ]]; then
60
+ run=true
61
+ fi
62
+ changed="$(git diff --name-only "$BASE_SHA" "$HEAD_SHA")"
63
+ for f in uv.lock cli/uv.lock evals/smoke_agent/uv.lock; do
64
+ if grep -qxF "$f" <<<"$changed"; then
65
+ run=true
66
+ fi
67
+ done
68
+ fi
69
+ echo "run=$run" >> "$GITHUB_OUTPUT"
70
+
71
+ secrets:
72
+ needs: gate
73
+ if: needs.gate.outputs.run == 'true'
74
+ runs-on: ubuntu-latest
75
+ outputs:
76
+ available: ${{ steps.check.outputs.available }}
77
+ steps:
78
+ - name: Require live-eval secrets
79
+ id: check
80
+ env:
81
+ NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }}
82
+ run: |
83
+ if [[ -z "$NVIDIA_API_KEY" ]]; then
84
+ echo "::warning::NVIDIA_API_KEY is not configured; skipping live-eval smoke (https://build.nvidia.com)"
85
+ echo "available=false" >> "$GITHUB_OUTPUT"
86
+ exit 0
87
+ fi
88
+ echo "available=true" >> "$GITHUB_OUTPUT"
89
+
90
+ live-eval:
91
+ needs: [gate, secrets]
92
+ if: needs.gate.outputs.run == 'true' && needs.secrets.outputs.available == 'true'
93
+ runs-on: ubuntu-latest
94
+ timeout-minutes: 60 # 11 scenarios x ~150s inter-scenario delay (see EVAL_SCENARIO_DELAY_SEC) + run time,
95
+ # plus headroom for checkout/uv sync/gateway boot and slow judge or subagent turns
96
+ steps:
97
+ - uses: actions/checkout@v4
98
+
99
+ - uses: astral-sh/setup-uv@v5
100
+ with:
101
+ version: "latest"
102
+
103
+ - name: Sync root deps (evals/report.py needs deepeval, langfuse)
104
+ run: uv sync --extra evals
105
+
106
+ - name: Sync smoke_agent deps
107
+ working-directory: evals/smoke_agent
108
+ run: uv sync
109
+
110
+ - name: Boot monkeybot gateway (evals/smoke_agent workspace)
111
+ working-directory: evals/smoke_agent
112
+ env:
113
+ NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }}
114
+ # Agent model is YAML-only (evals/smoke_agent/monkeybot_config/monkeybot.yaml).
115
+ # smoke_agent monkeybot.yaml sets runtime.port: 8080; the health check and
116
+ # AGENT_URL below expect 8787, so pin PORT explicitly (env beats yaml).
117
+ PORT: "8787"
118
+ SANDBOX_ENABLED: "false" # no Docker socket in this runner
119
+ # summarization_trigger is excluded from smoke; if it returns, set
120
+ # model.context_window in smoke_agent YAML (not MODEL_CONTEXT_WINDOW env).
121
+ run: |
122
+ uv run -m monkeybot.gateway.main > /tmp/gateway.log 2>&1 &
123
+ echo $! > /tmp/gateway.pid
124
+ for i in $(seq 1 30); do
125
+ if curl -sf http://127.0.0.1:8787/health > /dev/null; then
126
+ echo "gateway healthy"
127
+ exit 0
128
+ fi
129
+ sleep 2
130
+ done
131
+ echo "gateway did not become healthy" >&2
132
+ cat /tmp/gateway.log >&2
133
+ exit 1
134
+
135
+ - name: Run smoke suite report
136
+ env:
137
+ AGENT_URL: http://127.0.0.1:8787
138
+ # Judge on a different NVIDIA-hosted model than the agent (same key).
139
+ JUDGE_PROVIDER: nvidia
140
+ JUDGE_MODEL: nvidia/nemotron-3-ultra-550b-a55b
141
+ NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }}
142
+ # Scorecard metadata: read the model the gateway ran from smoke_agent YAML.
143
+ MONKEYBOT_AGENT_CONFIG: evals/smoke_agent/monkeybot_config/monkeybot.yaml
144
+ EVENT_NAME: ${{ github.event_name }}
145
+ # thinkingmachines/inkling gets rate-limited by NVIDIA even at low concurrency;
146
+ # each scenario itself makes several requests in quick succession, so space
147
+ # scenarios out rather than trying to throttle within one.
148
+ EVAL_SCENARIO_DELAY_SEC: "150"
149
+ run: |
150
+ # PRs are a gate and must block on regressions; main pushes and manual runs
151
+ # just score the build and always report. --fail-on-regression always blocks on
152
+ # this run's own scenario errors/failures. It does NOT require evals/baselines/
153
+ # smoke.json to exist (that's the separate --require-baseline flag, intentionally
154
+ # omitted below) — no trusted baseline has been committed yet. Once one has
155
+ # (`uv run python -m evals.report --suite smoke --update-baseline`, committed),
156
+ # add --require-baseline here too so a missing/deleted file can't silently skip
157
+ # the token/cost/latency drift checks.
158
+ flags=""
159
+ if [[ "$EVENT_NAME" == "pull_request" ]]; then
160
+ flags="--fail-on-regression"
161
+ fi
162
+ uv run python -m evals.report \
163
+ --suite smoke \
164
+ --baseline evals/baselines/smoke.json \
165
+ $flags \
166
+ | tee eval-report.md
167
+
168
+ - name: Publish report to run summary
169
+ if: always()
170
+ run: |
171
+ if [[ -f eval-report.md ]]; then
172
+ cat eval-report.md >> "$GITHUB_STEP_SUMMARY"
173
+ else
174
+ echo '`FAIL` — no report produced; see the job logs.' >> "$GITHUB_STEP_SUMMARY"
175
+ fi
176
+
177
+ - name: Post report as PR comment
178
+ if: always() && github.event_name == 'pull_request'
179
+ uses: actions/github-script@v7
180
+ with:
181
+ script: |
182
+ const fs = require("fs");
183
+ const body = fs.existsSync("eval-report.md")
184
+ ? fs.readFileSync("eval-report.md", "utf8")
185
+ : "## monkeybot Eval Scorecard\n\n`FAIL` — the report step did not complete " +
186
+ "(gateway boot or the report command itself errored before writing a report). " +
187
+ "See the workflow run logs for details.";
188
+ await github.rest.issues.createComment({
189
+ issue_number: context.issue.number,
190
+ owner: context.repo.owner,
191
+ repo: context.repo.repo,
192
+ body,
193
+ });
194
+
195
+ - name: Upload run + report artifacts
196
+ if: always()
197
+ uses: actions/upload-artifact@v4
198
+ with:
199
+ name: live-eval-smoke-${{ github.run_id }}
200
+ path: |
201
+ evals/runs/
202
+ eval-report.md
203
+ if-no-files-found: ignore
204
+
205
+ - name: Stop gateway
206
+ if: always()
207
+ working-directory: evals/smoke_agent
208
+ run: kill "$(cat /tmp/gateway.pid)" 2>/dev/null || true
@@ -0,0 +1,359 @@
1
+ # Changelog
2
+
3
+ All notable changes to monkeybot are documented in this file. The
4
+ format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) and
5
+ the project adheres to [Semantic Versioning](https://semver.org/).
6
+
7
+ ## [Unreleased]
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
+
27
+ ## [core v3.1.0] - 2026-09-05
28
+
29
+ ### Breaking
30
+
31
+ - `context_curation` is retired. The section no longer maps to env or trims MemPalace wake-up lines. Leftover YAML still loads and logs one warning per process; `CONTEXT_CURATION_*` / `MEMORY_INDEX_CAP` process env is unused. Wake-up size is whatever MemPalace L0+L1 returns; `model.context_window` still only bounds history summarization. Subagents now include the same wake-up block as the parent (they previously received none of it).
32
+ - `model.provider`, `model.name`, `model.temperature`, `model.max_tokens`, `model.thinking_budget`, `model.context_window`, `model.summarization_model`, `model.max_turns`, and `model.cache_retention` are YAML-only. Process env `MODEL_PROVIDER`, `MODEL_NAME`, `MODEL_TEMPERATURE`, `MODEL_MAX_TOKENS`, `MODEL_THINKING_BUDGET`, `MODEL_CONTEXT_WINDOW`, `CONTEXT_SUMMARIZATION_MODEL`, `MAX_TURNS`, and `MODEL_CACHE_RETENTION` are ignored (a warning is logged once per process). If leftover `MODEL_PROVIDER` is set and `monkeybot.yaml` has no `model.provider`, startup fails instead of silently defaulting to `google_vertexai` / `gemini-2.5-flash`. Set them under `model:` in `monkeybot.yaml`. Credentials (`GEMINI_API_KEY`, `NVIDIA_API_KEY`, …) stay in `.env`.
33
+
34
+ ### Added
35
+
36
+ - Local Ollama prefix-cache knobs: `ollama-local` sends `keep_alive` (default 24h, `model.keep_alive`) and optional pinned `num_ctx` (`model.num_ctx`) via OpenAI-compat `extra_body`. YAML-only — not mapped from the runtime env. `model.context_window` is never mapped to `num_ctx`. See `docs/ollama-local.md` and `examples/ollama/PrefixStable.Modelfile`.
37
+
38
+ ### Fixed
39
+
40
+ - An image inside a tool result (e.g. `load_file`) now reaches OpenAI-compatible models (OpenAI, Ollama, NVIDIA, HuggingFace, OpenRouter) as a real `image_url` promoted into a synthetic user turn after the tool row, instead of a text placeholder telling the model to guess at content it never saw. Anthropic-family, Bedrock, and Gemini already carried this media natively and are unaffected. Also fixes Gemini replaying a media-only tool result as an empty `functionResponse`, and fixes OpenAI-compat prompt-token counting tokenizing an image's base64 data URL as JSON text (a 1MB image previously counted as ~340K tokens and could trigger spurious compaction).
41
+ - Subagent timeout/cancel now walks and kills the full process tree (including nested `run_command` sessions that use their own `start_new_session` process groups), not only the subagent leader's session. `process_group_id` returns `None` when the PID is gone instead of treating a recycled PID as a process group. The tree walk's non-`/proc` fallback (macOS) now uses `pgrep -P` instead of an invalid BSD `ps -P` invocation that silently returned no children. `stop_subagent_process` `killpg`s the spawn-time `pgid` even after the leader has been reaped, and skips the tree walk in that case so a recycled leader PID cannot be used as a `killpg` target.
42
+ - Scheduled loops: a single malformed record — e.g. `interval_ms <= 0` from legacy/hand-edited data — is skipped and logged on Firestore, SQLite, and Postgres `get`/`list_all`/`list_due` instead of raising out of the mapper and stalling the scheduler (or 500ing the loops API).
43
+ - Progressive MCP: harness catalog + `enable_mcp` schema no longer mention `mcp.json`, which sent models to `read_file` a control-plane file outside the workspace. Catalog names are now an `enable_mcp` enum; the tool is omitted when the catalog is empty.
44
+
45
+ ## [browser v0.5.0] - 2026-09-05
46
+
47
+ ### Added
48
+
49
+ - Opt-in per-tool timing via `BROWSER_MCP_PERF=1` (JSONL to `BROWSER_MCP_PERF_LOG` or `<workspace>/browser/perf/tools.jsonl`). Never logs tool arguments. `scripts/perf_bench.py` records the Phase 0 baseline against static fixtures. See [browser-mcp-perf-baseline.md](docs/browser-mcp-perf-baseline.md).
50
+ - The DOM driver is registered once per tab (`Page.addScriptToEvaluateOnNewDocument` / Playwright `add_init_script`) so `browser_get_elements` after navigation is one harness call. `browser_input_by_index` gains `mode` (`auto`/`keys`/`fast`) and returns `mode_used`; default override `BROWSER_MCP_FILL_MODE`. `browser_goto(url, new_tab=False)` reuses the current tab via `goto_url` and an in-page load/settle wait. `browser_click_by_index` adds `warning` when the target is covered by another element.
51
+ - Tab registry with aliases (`t1`, `t2`, …), `tab=` on interaction tools (omitted = focused tab), `browser_open_tab` / `browser_close_tab` / `browser_read_tabs`, enriched `browser_tabs` (`{ok, focused, tabs}` instead of a raw list), alias-aware `browser_switch_tab`, five-tab cap (`BROWSER_MCP_MAX_TABS`, user chooses what to drop), and serialized tool execution. Reads never move focus; actions do. `browser_stop` closes agent-opened tabs.
52
+ - `browser_screenshot` defaults to JPEG (`max_dim=1200`, `quality=60`) and returns `bytes` + `format`. `annotate=True` draws current `get_elements` index labels so the next action can still use `browser_click_by_index`. PNG remains available via `format="png"`. Inline MCP images (7b) are not included.
53
+ - `browser_wait_for` waits with one in-page `MutationObserver` (chunked at 4s to stay under the harness IPC timeout) instead of polling `wait_for_element`. `browser_wait_idle` still uses network idle on the focused tab, then a DOM settle; `ok`/`idle` stay the network result and the response adds `quiet`/`navigated`.
54
+ - `browser_get_elements` defaults to the viewport (`BROWSER_MCP_VIEWPORT_DEFAULT`), filters with `kind` / `contains` / `max_elements=150`, and returns `truncated` + `below_viewport`. Indices stay valid until navigation. `observe="diff"` diffs against the per-tab cached tree. New `browser_get_text` for readable body copy.
55
+ - Action tools (`click`/`input`/`select`/`fill`/`press`/`scroll`/`switch_tab`) settle then return `{action, page, observation}` (diff by default, `BROWSER_MCP_OBSERVE_DEFAULT`; `observe="none"` keeps the legacy shape). `browser_goto` and focused `browser_open_tab` return a full observation. Timing: `BROWSER_MCP_SETTLE_MS` / `BROWSER_MCP_QUIET_MS`. Legacy top-level keys (`clicked`, `index`, `tagName`, `selected`) stay for this release.
56
+ - `browser_act` runs up to 25 sequential steps in one turn (`fill_form` is a step, not a separate tool); `browser_click_text` clicks by visible text; `browser_extract` scrapes structured rows. Shared `do_*` helpers back both the single tools and the batch executor.
57
+ - Optional `playbook` YAML fences in host markdown are executable via `browser_run_playbook`. `browser_list_playbooks` / `browser_goto` list `flows`. `browser_write_playbook` validates fences before save. Timeout: `BROWSER_MCP_PLAYBOOK_TIMEOUT_S` (default 120). Secrets are never flow params — use `{do: login, expected_origin}`.
58
+
59
+ ## [cli v0.6.0] - 2026-09-05
60
+
61
+ ### Added
62
+
63
+ - `doctor` warns on local Ollama `*-mlx` tags, default thinking on known reasoning tags, and huge `num_ctx`, and fails on unparseable/`<1` `num_ctx`. See `docs/ollama-local.md`.
64
+
65
+ ### Changed
66
+
67
+ - New-agent browser skill documents `fill_form` as a `browser_act` / playbook step.
68
+ - Example YAML documents YAML-only `model.*` knobs and drops retired `context_curation`.
69
+ - Declares `monkeybot[cli]>=3.1.0,<4` and `monkeybot-browser-mcp>=0.5.0,<1` so a global CLI install pulls this train.
70
+
71
+ ## [browser v0.4.0] - 2026-08-29
72
+
73
+ ### Added
74
+
75
+ - `browser_login`: sign in with a Spaces-saved password without exposing the credential. Returns the `origin` it acted on and accepts `expected_origin`, so a login cannot silently land on a tab other than the one the agent is driving. In-app CDP uses a tokenized WebSocket URL so a 403 is not misreported as Chrome's Allow-remote-debugging popup.
76
+
77
+ ### Fixed
78
+
79
+ - Scrubs `?token=` values from every browser tool error rather than only daemon startup, so the in-app CDP token cannot reach the agent transcript through a mid-session harness failure.
80
+
81
+ ## [cli v0.5.1] - 2026-08-28
82
+
83
+ ### Changed
84
+
85
+ - CLI extras catalog / `monkeybot new` provider menu lists `ollama-cloud` and `ollama-local` instead of a single `ollama` row. `--with ollama` and `--provider ollama` still work.
86
+
87
+ ## [core v3.0.4] - 2026-08-28
88
+
89
+ ### Added
90
+
91
+ - Explicit `ollama-cloud` and `ollama-local` provider ids so Cloud always hits `https://ollama.com` even when a leftover local `OLLAMA_BASE_URL` is set. Legacy `ollama` still auto-routes from env.
92
+
93
+ ## [core v3.0.3] - 2026-08-23
94
+
95
+ ### Added
96
+
97
+ - Local computer control: nine opt-in, macOS-only `computer_*` tools (`computer/`) let the agent open/reveal files and folders, launch apps, open URLs, read/write the clipboard, and list/find/move/trash files under the user's home directory. Off by default (`computer.enabled: false` / `MONKEYBOT_COMPUTER_TOOLS`); intended for the Monkeybot desktop app, never a server deployment. Every call asks for approval by default via a built-in ruleset baseline (not `permissions.yaml`, which is fail-open); "Always allow" is scoped to the exact `(tool, resource)` approved and persists durably to `monkeybot_config/approvals.json` (a new machine-written file — never hand-edit). Hard security limits (home-directory confinement, credential-path denylist, exec-surface refusal on `open`, trash-not-delete) live in the tool bodies and cannot be bypassed by permission rules. See `docs/features.md` §22.
98
+ - `permissions.yaml`'s `tool-confirmations` approval now supports a durable `persist` hook (`remember_always_approval(..., persist=...)`) in addition to the existing in-session `SessionApprovals` cache; `resource_for_call` gained `url`/`app` argument lookups for readable permission resource strings on tools with no `path` arg.
99
+
100
+ ### Fixed
101
+
102
+ - Anthropic SDK 1.0 removed `temperature` / `top_p` / `top_k` from `messages.stream()`. Filter stream kwargs to the callable signature and retry `TypeError: unexpected keyword argument` so Claude/Bedrock streams no longer die before the request.
103
+ - Stop during a tool confirmation sets the turn cancel Event in `POST /cancel` (and on realtime interrupt) before pending futures are cancelled, so completed tool results settle into history instead of racing a 50ms poller. Session DELETE and websocket teardown leave the Event unset and propagate cancellation. Spill writes refuse an uncontained `_` symlink fallback; transcript and attachment dirs reuse a safe pre-sanitization folder when it still exists on disk. Attachment reads also reject symlinked attachment ids that resolve outside the workspace.
104
+
105
+ ## [core v3.0.2] - 2026-08-18
106
+
107
+ ### Fixed
108
+
109
+ - Compute-only OpenSandbox (`SANDBOX_SHARED_FILESYSTEM=false`) no longer rejects every `run_command` when the harness passes the default workspace-root cwd. Nested workspace cwd and workspace/skills path args are still refused.
110
+
111
+ ## [core v3.0.1] - 2026-08-18
112
+
113
+ ### Fixed
114
+
115
+ - Host `run_command` no longer fail-closes every command when filesystem isolation is unavailable and none of the memory hidden paths exist on disk (typical in nested Linux containers with memory off). Isolation is still required — and the command still refused — when at least one palace path is present.
116
+
117
+ ## [core v3.0.0] - 2026-08-17
118
+
119
+ ### Breaking
120
+
121
+ - Note-based memory (INDEX.md, curator, `search_memory` / `edit_memory` / `forget`) is replaced by per-agent MemPalace with a durable outbox on SQLite, Postgres, and Firestore. Capture can be turned off with `memory.enabled: false` or `MONKEYBOT_MEMORY_HOOK_ENABLED=0`. Object-store palace URIs (`gcs://`, `s3://`) are not supported; use `local://`. MemPalace itself is the optional `monkeybot[memory]` extra.
122
+ - `subagents:` as a bare list of personas is no longer supported; wrap personas under `subagents.personas` in `monkeybot.yaml`. `SUBAGENT_TIMEOUT_SEC`, `SUBAGENT_MAX_TURNS`, and `MONKEYBOT_SUBAGENT_AGENT_MD` environment variable overrides are removed — set `subagents.timeout_sec`, `subagents.max_turns`, and per-persona `agent_md` in `monkeybot.yaml` instead. Top-level `subagents.agent_md` is also removed.
123
+
124
+ ### Added
125
+
126
+ - MemPalace outbox now persists on Postgres and Firestore (same table/document shape as SQLite), with replica `palace_id` claim partitioning. Replicated deployments must share a lock-capable palace volume.
127
+ - Knowledge indexing follows document structure instead of fixed line windows: markdown headings, code definitions (tree-sitter via the optional `knowledge-ast` extra, brace/indent heuristic otherwise), and JSON/YAML/TOML top-level keys become chunk boundaries.
128
+ - Embeddings run on NVIDIA, OpenAI, any OpenAI-compatible endpoint, Voyage, or Gemini via `knowledge.embeddings.provider`. Misconfigured or unavailable providers degrade to keyword + graph search rather than failing the turn.
129
+ - PDF, DOCX, and image files are indexed with the `knowledge-media` extra. Images use `knowledge.captions` (`off` / `path` / `llm`); DOCX indexing covers tables as well as paragraphs.
130
+ - Subagents search the parent workspace index read-only, and a second gateway attempting to write the same index is refused.
131
+ - Soft spill and unified `read_file` char budgets derive from `model.context_window`: large tool results always land on disk with a large inline body when headroom allows; `read_file` returns `next_offset` and never lies about `end_line`.
132
+ - When memory is off, host `run_command` children cannot see palace files (Linux user+mount namespaces or macOS `sandbox-exec`). If isolation cannot be established, the command is refused. OpenSandbox does not mount the palace. `/tmp` and `/var/folders` are no longer implicitly allowlisted path prefixes.
133
+
134
+ ### Fixed
135
+
136
+ - Firestore scheduled-loop `defer_tick` and `release_stale_claims` now re-check claim ownership / lease freshness inside a transaction (matching SQL `WHERE` guards), so a stale worker cannot clear another worker's reclaimed tick and a renewed heartbeat cannot be wiped mid-release.
137
+ - Inline `task` subagent timeout/cancel kills the process group (not only the direct child), matching the worker-pool path so nested shell descendants do not keep running after Stop. The inline subagent is detached from the parent process group (`start_new_session`), so a parent SIGKILL/crash no longer tears it down automatically — cleanup relies on timeout/cancel paths. Inline `task` has no `subagent.pid` reap path (unlike the worker pool); orphans after a hard parent crash are accepted on that path.
138
+ - Stop during a tool confirmation now settles completed tool results into history (and synthesizes cancel envelopes for the rest) instead of escaping before abort settlement; the realtime confirm path does the same. Cancel after a finished provider stream also persists already-shown assistant text so follow-ups match what the user saw, and settles any finalized tool calls with cancel envelopes.
139
+ - SQLite `history.reset` (compaction / load-max truncate) runs delete+reinsert in one transaction, matching Postgres, so a crash mid-reset cannot wipe or partially rewrite a thread.
140
+ - Tool spill paths sanitize client `session_id` / `thread_id` components and refuse to write or delete outside `.monkeybot/spill`; `POST /sessions` rejects path-traversal session ids; session DELETE quiesces the active turn before removing spill dirs. The same path-component sanitizer also applies to transcript and attachment directories, so legacy ids containing glob metacharacters map to a sanitized on-disk folder (reads still find a pre-sanitization folder when it exists).
141
+ - Streamable HTTP MCP connects accept both 2-tuple and 3-tuple transport yields from the MCP Python SDK.
142
+ - Stop mid-reply now cancels the in-flight provider token stream (instead of waiting for the full LLM call) and persists any already-streamed assistant text to history so follow-up turns keep matching what the user saw.
143
+ - Chunking improvements now reach existing workspaces: a chunker version bump re-chunks indexed files even when their modification time never changed, so upgrades no longer require deleting `.monkeybot/knowledge/`.
144
+ - Vector search scores only vectors from the active embedding model. Switching provider or `dimensions` purges the incomparable rows at startup and re-embeds them, instead of blending two models into one similarity ranking.
145
+ - The knowledge index writer lock is claimed atomically, so two gateways starting at the same moment can no longer both believe they own the index.
146
+ - Embedding requests carry a per-request timeout, so one slow endpoint cannot stall an indexing pass; cached vector matrices are bounded by a memory budget with least-recently-used eviction.
147
+ - PDF extraction closes its file handle (previously leaked a descriptor per file on large scans), the code chunker no longer splits mid-function when a docstring contains an unbalanced brace, and `knowledge.chunk_overlap_ratio` is honored for markdown, code, and structured files.
148
+ - `read_file` no longer applies a post-hoc 32k char chop after line selection (which made `end_line` lie and caused the model to skip unread lines when paging).
149
+ - `read_file` reports `truncated: false` and omits `next_offset` when a read reaches the end of the file, instead of marking every complete read truncated and pointing past EOF. A line too long for the whole char budget is now marked inline where it was cut.
150
+ - Tool results too large to inline as-is are shaped into still-valid JSON (with `… (+N more items)` markers) rather than inlined as a raw, unparseable JSON prefix.
151
+ - Context summarization sizes its per-result cap from the active model's context window rather than a hardcoded 200k window.
152
+
153
+ ### Changed
154
+
155
+ - `mcp` is pinned to `>=1.0.0,<2` until Streamable HTTP can construct an `httpx2.AsyncClient` for MCP SDK 2.x (see #190).
156
+ - Subagent defaults and named personas are now configured under a single `subagents:` YAML mapping (`subagents.timeout_sec`, `subagents.max_turns`, `subagents.vertex_google_search`, `subagents.personas`), replacing the separate `subagent:` defaults block and bare-list `subagents:` personas. Persona prompts live only on `subagents.personas[].agent_md`; tasks without a `subagent_type` inherit the parent `paths.agent_md`.
157
+ - Spill sizing is window-derived (soft spill). `tools.spill_min_chars` / `tools.spill_read_max_lines` / `tools.read_default_lines` are retired (warned, ignored). `tools.read_max_lines` is YAML-only (env overrides removed). `read_file` defaults to 2000 lines when `limit` is omitted; pass `limit` to request more. Large ordinary reads can return more content than the old flat 32k cap.
158
+
159
+ ## [browser v0.3.0] - 2026-08-17
160
+
161
+ ### Added
162
+
163
+ - AWS Bedrock AgentCore Browser backend via the optional `agentcore` extra (`bedrock-agentcore`, Playwright).
164
+ - Prefer a Monkeyapp in-app CDP endpoint over desktop Chrome or a stale `BROWSER_CDP_*` env when the in-app CDP file is present.
165
+
166
+ ### Changed
167
+
168
+ - `mcp` is pinned to `>=1.0.0,<2` (same Streamable HTTP constraint as core; see #190).
169
+
170
+ ## [cli v0.5.0] - 2026-08-17
171
+
172
+ ### Added
173
+
174
+ - `monkeybot run` / `chat` / `talk` refuse to start when the agent interpreter lacks MonkeyBot 3.x (and MemPalace when memory is enabled). A failed probe may `uv sync` an existing lock; it never rewrites `pyproject.toml`. Config-only agents with memory on get a CLI-managed cache venv holding `monkeybot[memory]` pinned to the running core, reused offline. A local monkeybot checkout can provision that runtime from source; the cache invalidates when those sources change.
175
+ - `monkeybot chat` TUI gained Claude-Code-style interaction: `Esc` interrupts the active turn (double-tap while idle recalls your last message for editing), `Shift+Tab` cycles a client-side approval mode (`normal` / `auto-approve` / `deny-confirms` — auto-answers tool confirmation prompts only, elicitations still ask), `@` fuzzy-inserts a workspace file path, `!<command>` runs a local shell command shown in the transcript but never sent to the agent, and `?` opens a keyboard-shortcut overlay. New slash commands: `/clear` (alias of `/new`), `/model` (switches model by starting a fresh session), `/status`, `/config`.
176
+ - `monkeybot chat -c` / `--continue` resumes the most recent session for the current agent.
177
+
178
+ ### Changed
179
+
180
+ - `monkeybot new` no longer scaffolds capability skills into new agents.
181
+ - Declares `monkeybot[cli]>=3.0.0,<4` so a global CLI install pulls MonkeyBot 3.x.
182
+
183
+ ## [cli v0.3.1] - 2026-07-28
184
+
185
+ ### Changed
186
+
187
+ - Scaffold `monkeybot.example.yaml` documents harness-fixed `read_file` default (2000 lines), YAML-only `tools.read_max_lines`, and retired `read_default_lines` / spill knobs. `model.context_window` notes that it also drives soft-spill / read char budgets.
188
+
189
+ ## [core v2.2.0] - 2026-07-13
190
+
191
+ ### Added
192
+
193
+ - Canonical agent-root layout and a read-only virtual `skills/` root.
194
+
195
+ ### Changed
196
+
197
+ - Remote sandboxes require an explicit compute-only capability setting.
198
+
199
+ ### Breaking
200
+
201
+ - Workspace or skills symlinks that resolve outside their respective roots are now rejected. Move their targets inside the agent's `workspace/`, `data/`, or `skills/` layout.
202
+
203
+ ## [browser v0.2.0] - 2026-07-13
204
+
205
+ ### Added
206
+
207
+ - Browser MCP package release supporting the canonical agent layout.
208
+
209
+ ## [cli v0.3.0] - 2026-07-13
210
+
211
+ ### Added
212
+
213
+ - Agent scaffolds now include the canonical layout, Dockerfile, and disabled browser MCP configuration.
214
+
215
+ ### Fixed
216
+
217
+ - `monkeybot chat` no longer adopts a stale gateway on a busy port: it refuses to spawn when the port is already in use (suggesting `/bye`, stopping `monkeybot run`, or `--attach`), and `wait_for_health` rejects a `/health` 200 if the child process has already exited.
218
+
219
+ ## [0.2.1] - 2026-07-13
220
+
221
+ ### Added
222
+
223
+ - First PyPI release of **monkeybot-cli** (Trusted Publishing) — install with `uv tool install monkeybot-cli`.
224
+
225
+
226
+ ## [2.1.1] - 2026-07-13
227
+
228
+ ### Added
229
+
230
+ - Evals: `response_regex` and `response_not_contains` deterministic assertions; run files now persist per-turn prompt/response text, and `python -m evals.diff` pinpoints the exact turn behind a regression between two runs.
231
+ - Live eval smoke workflow now also runs on every push to `main` (report-only, scorecard on the run Summary page) and on manual dispatch, in addition to the existing PR gates.
232
+ - Live evals need only `NVIDIA_API_KEY`: the deepeval judge can now run on build.nvidia.com models (`JUDGE_PROVIDER=nvidia`) via NVIDIA's OpenAI-compatible endpoint, and CI pins agent (`meta/llama-3.3-70b-instruct`) and judge (`nvidia/llama-3.3-nemotron-super-49b-v1`) to two different free NVIDIA-hosted models. The workflow also now sets `MODEL_PROVIDER`/`MODEL_NAME` explicitly — previously it booted whatever `demo_agent`'s committed config said (ollama, which doesn't exist in CI).
233
+ - Repo-root `monkeybot_config_example/` — full-option human-readable config templates (`.example` filenames).
234
+ - `monkeybot new` also scaffolds `permissions.yaml`.
235
+ - `monkeybot new` writes an agent-project `pyproject.toml` with a PyPI `monkeybot[<provider>]>=2.1.0,<3` dependency (plain `uv sync` after scaffold).
236
+ - `monkeybot new` interactive menus (and `--with`) select additional providers/features into that same `monkeybot[…]` dep list.
237
+ - `scripts/smoke_global_cli.sh` — local-wheel stand-in for clean-machine PyPI smoke (`uv tool install` → `new` → `uv sync` → `validate`/`doctor`/`chat`).
238
+ - README / getting-started / onboarding skill lead with `uv tool install monkeybot-cli` (clone is contributor-only).
239
+ - **monkeybot-cli** declares published core bound `monkeybot[cli]>=2.1.0,<3` (local clones still use `[tool.uv.sources]`).
240
+
241
+ ### Removed
242
+
243
+ - Evals FastAPI service (`evals/main.py`, in-memory store, WebSocket fan-out, Dockerfile, `docker-compose.evals.yml`) — nothing consumed its HTTP/WS API; `python -m evals.report` is the single execution path. `google-genai` (Gemini judge dep) moved into the root `evals` extra.
244
+
245
+ ### Changed
246
+
247
+ - `monkeybot doctor` remediation for missing extras: add `monkeybot[<extra>]` to agent deps + `uv sync` (keeps `uv sync --extra` only when the agent defines project-level optionals).
248
+ - `fake` provider credentials treated as optional in `doctor` (smoke / no-API-key path).
249
+ - `publish-release.yml` Trusted-Publishes to PyPI (OIDC) packages tagged in that run only — core before cli; `scripts/release.py publish` emits `packages` via `GITHUB_OUTPUT`.
250
+ - Remove redundant CLI hatch `force-include` of `scaffold_defaults` (duplicated wheel paths and broke `uv build`).
251
+ - Scaffold templates and `run_new` moved into **monkeybot-cli** (`monkeybot_cli.scaffold` / `scaffold_defaults`). Harness `monkeybot.scaffold` is a compatibility shim; Docker installs the CLI to scaffold at image build.
252
+ - **monkeybot-cli** version bumped to **0.2.0**.
253
+
254
+ - README integrations tables aligned with v2.0.0 shipped scope (per CHANGELOG); removed speculative "Coming Soon" items to BACKLOG.md with a short near-term roadmap.
255
+ - Reframed public positioning: multi-cloud-capable harness with **GCP-first** docs (README, cloud deployment design, getting started, features, Pattern A guide). Clarifies this is not a universal integration catalog; documents AWS shipped paths alongside GCP examples.
256
+
257
+ ## [2.0.0] - 2026-07-05
258
+
259
+ Major v2 rewrite: FastAPI SSE gateway, owned agent loop, pluggable storage, multi-provider support, CLI, evals, and cloud-ready deployment artifacts.
260
+
261
+ ### Added
262
+
263
+ #### Gateway & runtime
264
+ - **2026-05-14** — FastAPI SSE gateway (`monkeybot.gateway.sse`): `POST /sessions`, `GET /sessions/{id}/events` (SSE with `Last-Event-ID` resume), `POST /sessions/{id}/reply`, `GET /health`. SQLite-backed session bus.
265
+ - **2026-05-14** — Owned agent loop (`monkeybot.core.runtime.loop`) with streaming provider integration, tool execution, history append, and inspector hooks. Per-turn usage recorded.
266
+ - **2026-05-14** — Harness fixed prompt (`monkeybot.core.prompts.harness_prompt`) — non-overridable system block describing tool names, paths, MCP naming, and skill usage, appended after the bot's `AGENT.md`.
267
+ - **2026-05-14** — Context-window safety: pre-call token counting against `MODEL_CONTEXT_WINDOW`, sync history summarization at threshold, and tool-result spill to `.monkeybot/spill/{thread_id}/{call_id}.txt` with capped in-history text + path hint.
268
+ - **2026-05-14** — Subagents (`subagent_proto.py`, `subagent_worker.py`) — parallel `task` tool that fans out work over `asyncio.gather`; results appended in stable `call_id` order.
269
+ - **2026-06-24** — Structured debug and error logging for the agent loop.
270
+ - **2026-06-23** — Auto-create session on first send and background final assistant write.
271
+ - **2026-06-26** — Tier 1–2 token optimization for context and tool output.
272
+ - **2026-06-28** — Repair broken tool turns in memory before provider replay.
273
+ - **2026-06-29** — Opt-in terse emission-style guidance in the harness prompt.
274
+ - **2026-07-01** — Opt-in session transcript capture for harness debugging (`GET` usage, SSE, usage DB).
275
+ - **2026-07-01** — Prompt-first scheduled loops: `start_loop` tool, scheduler worker, and Firestore-backed loop store.
276
+
277
+ #### Memory & context
278
+ - **2026-05-14** — Memory (`monkeybot.core.memory`): markdown files under `MEMORY_PATH` with optional `INDEX.md` snapshotted into context; `search_memory` for on-demand lookup; mid-turn refresh via `refresh_memory_index()`.
279
+ - **2026-05-14** — Memory organizer (`monkeybot.core.memory.organizer`) — async post-turn classifier that updates `INDEX.md` and routes new entries to the right markdown file.
280
+ - **2026-05-15** — Context curation configuration (`CONTEXT_CURATION_*` env vars) and optional secondary LLM curator pass.
281
+ - **2026-07-02** — Hybrid memory curation: append-only INDEX with archive cap, sliding `memory_window_lines`, structural coverage/confidence with `search_memory` nudge when truncated, optional LLM curator (`mode`: window/curator/hybrid), and index fingerprint cache to skip repeat curator calls.
282
+ - **2026-07-09** — Simplified context curation to a single path (recent window; curator only when token-heavy). Removed `CONTEXT_CURATION_MODE` / `window`/`curator`-only modes and dropped `memory_threshold`, `max_memory_lines`, and `search_max_hits` knobs (#67).
283
+ - **2026-07-02** — Skills discovered via `list_skills` instead of full prompt injection; skill names always injected from `ctx.skills`; `list_skills`/`read_file` remain the path for the skills root and full `SKILL.md` procedure.
284
+
285
+ #### Tools, skills & workspace
286
+ - **2026-05-14** — MCP (`mcp_client.py`, `ports_mcp.py`) — stdio + streamable HTTP MCP servers loaded from `MCP_CONFIG`; tools exposed as `server__tool`.
287
+ - **2026-05-16** — Web search integration and enhanced tool invocation.
288
+ - **2026-05-20** — MCP OAuth2 client credentials and password grant with strict validation.
289
+ - **2026-05-14** — Skills (`monkeybot.core.context._discover_skills`, `monkeybot.skills.{loader,executor}`) — folder-based skills under `SKILLS_PATH` with `SKILL.md` per skill.
290
+ - **2026-05-14** — Workspace tools (`workspace_tools.py`, `workspace_service.py`) — read/write/edit/find under a configurable workspace scope; paths under `.monkeybot` bypass `WORKSPACE_WRITE_SCOPE_REL`.
291
+ - **2026-06-24** — `render_image` tool, `ImageBlock` SSE events, and Gemini image-generation fixes.
292
+ - **2026-06-24** — Default `deny_patterns` block package installs via `run_command`.
293
+ - **2026-06-30** — Browser MCP integration (`integrations/browser-mcp/`) with tool result ingress guards.
294
+ - **2026-07-02** — YAML frontmatter `description` parsing for `list_skills`.
295
+
296
+ #### Providers
297
+ - **2026-05-14** — Provider adapters: Vertex / Gemini, OpenAI, Anthropic, Anthropic-on-Vertex. Resolved via `monkeybot.core.config.get_provider_config()`.
298
+ - **2026-05-18** — HuggingFace Inference API provider.
299
+ - **2026-05-18** — OpenTelemetry observability integration with runbook and configuration.
300
+ - **2026-06-22** — Provider prompt caching, cost telemetry, and playground model UI.
301
+ - **2026-06-30** — Ollama provider for local models.
302
+ - **2026-06-30** — Shared stream / `count_input_tokens` logic for OpenAI-compatible providers.
303
+ - **2026-07-01** — NVIDIA NIM provider (`monkeybot[nvidia]`).
304
+ - **2026-07-03** — Vertex `google_search` grounding for Gemini (agent turns only); CLI display for grounding metadata.
305
+
306
+ #### Storage & persistence
307
+ - **2026-05-17** — Storage abstraction layer (SQLite / Postgres, Step 1 + 1.5).
308
+ - **2026-05-17** — Pluggable memory storage (`WorkspaceStorage` + `MemorySubsystem`, Step 2).
309
+ - **2026-06-23** — Firestore backend, worker pool, and playground chat history.
310
+ - **2026-06-30** — Opt out of auto schema via `paths.auto_schema` in `monkeybot.yaml`.
311
+
312
+ #### CLI & developer experience
313
+ - **2026-06-24** — Standalone `monkeybot` CLI for agent setup and terminal chat (`monkeybot new`, `monkeybot chat`, `monkeybot run`).
314
+ - **2026-06-25** — Named subagent personas via `monkeybot.yaml` and `task(subagent_type)`.
315
+ - **2026-06-25** — `monkeybot` skill as a [skills.sh](https://skills.sh) entry point for onboarding.
316
+ - **2026-06-26** — Pinned session status bar in `monkeybot chat`.
317
+ - **2026-06-30** — Self-contained `demo_agent/` example (replaces playground) with its own `pyproject.toml` and editable path dependency.
318
+ - **2026-06-30** — `develop` → `main` release process and `scripts/release.py` helpers.
319
+ - **2026-07-01** — Chat UX polish and Ollama thinking-level control.
320
+
321
+ #### Evals & testing
322
+ - **2026-05-18** — Evals service, playground UI, and agent behavior tests.
323
+ - **2026-07-01** — Live eval PR scorecard: telemetry, requirement gates, smoke suite, and CI wiring.
324
+
325
+ #### Deployment & packaging
326
+ - **2026-05-17** — Public Docker artifacts (Step 3): `docker-compose.yml`, `docker/opensandbox.docker.toml`, `.env.example`, `docker/Dockerfile` with `HEALTHCHECK`.
327
+ - **2026-05-17** — Step 4 deployment guides (Pattern A, B, C).
328
+ - **2026-05-17** — Harness-as-library (Step 5) for embedding the runtime in other services.
329
+ - **2026-05-18** — OSS sanitization: gitignore `internal/`, GCP placeholders, public playground Docker.
330
+ - **2026-05-16** — Opt-in OpenSandbox execution backend.
331
+ - **2026-05-14** — Demo agent under `demo_agent/`, default skills under `.agents/skills/`.
332
+ - **2026-05-14** — Docs (v2): `docs/getting-started.md`, `docs/skills.md`; configuration reference in `.env.example`.
333
+ - **2026-05-14** — Test + bench infra: `tests/` (pytest + pytest-asyncio) and `testing/bench.py`.
334
+
335
+ #### Multimodal & UI
336
+ - **2026-06-22** — Multimodal attachments and refreshed playground chat UI.
337
+ - **2026-06-24** — Chat UI interleaves assistant prose with tool cards in the transcript.
338
+
339
+ ### Changed
340
+
341
+ - **2026-05-14** — Packaging: `pyproject.toml` authors set to `human-plus-machine`; repository URLs point at `https://github.com/human-plus-machine/monkeybot`. Build backend is `hatchling`; package layout is `src/monkeybot`.
342
+ - **2026-05-14** — Default `SKILLS_PATH` is `./.agents/skills` (matches `.env.example` and `docker/Dockerfile`).
343
+ - **2026-05-16** — Core module restructure and configuration cleanup; legacy files removed.
344
+ - **2026-06-24** — Improved tool failure recovery and progress visibility in prompts.
345
+ - **2026-06-25** — Harness context budgeting and unified provider sampling parameters.
346
+ - **2026-06-26** — Gateway spawned from the agent project's Python env instead of the CLI env.
347
+ - **2026-06-30** — Scaffold consolidated packaged defaults; unified on `monkeybot new`.
348
+ - **2026-06-30** — Provider and runtime paths deduplicated; observability gap logging improved.
349
+ - **2026-07-02** — Pre-flight prompt tokens: summarization threshold and `estimated_prompt_tokens` use each provider's tokenizer / count API (`Provider.count_input_tokens`). OpenAI installs should include the `openai` extra (adds `tiktoken`).
350
+ - **2026-07-02** — Configurable history summarization model via `CONTEXT_SUMMARIZATION_MODEL`, optional `model.summarization_model` in `monkeybot.yaml`, or `TurnContext.summarization_model`; main turn still uses `ctx.model`.
351
+
352
+ ### Fixed
353
+
354
+ - **2026-05-14** — Anthropic harness tool-call replay correctness.
355
+ - **2026-05-18** — Gateway resolves LLM providers via `get_provider_config`.
356
+ - **2026-06-23** — Task queue, worker claims, and session resume hardened.
357
+ - **2026-06-29** — Agent-root resolution, malformed tool args, and chat stream exit code.
358
+ - **2026-07-01** — OpenAI-compatible providers request stream usage metadata.
359
+ - **2026-07-03** — Skill names restored in prompt; session teardown on disconnect.