monkeybot 3.9.0__tar.gz → 3.10.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 (852) hide show
  1. {monkeybot-3.9.0 → monkeybot-3.10.0}/.github/workflows/ci.yml +2 -1
  2. {monkeybot-3.9.0 → monkeybot-3.10.0}/.gitignore +5 -1
  3. {monkeybot-3.9.0 → monkeybot-3.10.0}/CHANGELOG.md +38 -0
  4. {monkeybot-3.9.0 → monkeybot-3.10.0}/PKG-INFO +1 -1
  5. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/pyproject.toml +2 -2
  6. monkeybot-3.10.0/cli/src/monkeybot_cli/commands/mcp_login.py +81 -0
  7. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/new.py +44 -4
  8. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/main.py +13 -1
  9. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold.py +86 -16
  10. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +2 -0
  11. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +15 -0
  12. monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/AGENT.md +35 -0
  13. monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/command_allowlist.yaml +92 -0
  14. monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/monkeybot.overrides.yaml +31 -0
  15. monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/permissions.yaml +42 -0
  16. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_cli.py +44 -0
  17. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_scaffold.py +193 -0
  18. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/uv.lock +3 -2
  19. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/features.md +45 -6
  20. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/live-evals.md +40 -0
  21. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/assertions.py +147 -1
  22. monkeybot-3.10.0/evals/conftest.py +4 -0
  23. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/.gitignore +2 -0
  24. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/AGENTS.md +7 -0
  25. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/build/calc/ops.py +5 -0
  26. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/calc/__init__.py +3 -0
  27. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/calc/ops.py +17 -0
  28. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/node_modules/left-pad/index.js +4 -0
  29. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/node_modules/left-pad/package.json +1 -0
  30. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/pyproject.toml +9 -0
  31. monkeybot-3.10.0/evals/fixtures/coding/calc_repo/tests/test_ops.py +24 -0
  32. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/.gitignore +2 -0
  33. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/AGENTS.md +7 -0
  34. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/build/calc/ops.py +5 -0
  35. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/calc/__init__.py +3 -0
  36. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/calc/ops.py +19 -0
  37. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/node_modules/left-pad/index.js +4 -0
  38. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/node_modules/left-pad/package.json +1 -0
  39. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/pyproject.toml +9 -0
  40. monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/tests/test_ops.py +24 -0
  41. monkeybot-3.10.0/evals/fixtures/coding/overlays/bug_discount/shop/pricing.py +25 -0
  42. monkeybot-3.10.0/evals/fixtures/coding/overlays/noisy_tests/shop/taxes.py +15 -0
  43. monkeybot-3.10.0/evals/fixtures/coding/overlays/noisy_tests/tests/conftest.py +12 -0
  44. monkeybot-3.10.0/evals/fixtures/coding/overlays/offline_gateway/tests/test_gateway.py +7 -0
  45. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/.gitignore +2 -0
  46. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/AGENTS.md +10 -0
  47. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/CHANGELOG.md +10 -0
  48. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/README.md +4 -0
  49. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/build/shop/shipping.py +4 -0
  50. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/pyproject.toml +8 -0
  51. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/__init__.py +3 -0
  52. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/cart.py +26 -0
  53. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/coupons.py +15 -0
  54. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/gateway.py +23 -0
  55. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/inventory.py +21 -0
  56. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/legacy/pricing_v1.py +5 -0
  57. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/legacy/shipping_v1.py +7 -0
  58. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/models.py +27 -0
  59. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/orders.py +21 -0
  60. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/pricing.py +26 -0
  61. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/reports.py +13 -0
  62. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/shipping.py +32 -0
  63. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/taxes.py +15 -0
  64. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/utils/money.py +15 -0
  65. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/utils/text.py +11 -0
  66. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_cart.py +16 -0
  67. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_coupons.py +7 -0
  68. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_inventory.py +16 -0
  69. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_money.py +9 -0
  70. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_orders.py +28 -0
  71. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_pricing.py +24 -0
  72. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_reports.py +8 -0
  73. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_shipping.py +24 -0
  74. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_taxes.py +17 -0
  75. monkeybot-3.10.0/evals/fixtures/coding/shop_repo/vendor/pricekit/__init__.py +6 -0
  76. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/models.py +12 -0
  77. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/report.py +14 -2
  78. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/runner.py +48 -6
  79. monkeybot-3.10.0/evals/scenario_loader.py +195 -0
  80. monkeybot-3.10.0/evals/scenarios/coding/add_feature_with_tests.yaml +19 -0
  81. monkeybot-3.10.0/evals/scenarios/coding/fix_failing_test.yaml +16 -0
  82. monkeybot-3.10.0/evals/scenarios/coding/navigate_repo.yaml +17 -0
  83. monkeybot-3.10.0/evals/scenarios/coding_hard/add_bulk_discount.yaml +22 -0
  84. monkeybot-3.10.0/evals/scenarios/coding_hard/fix_discount_rounding.yaml +17 -0
  85. monkeybot-3.10.0/evals/scenarios/coding_hard/honest_unfixable_failure.yaml +15 -0
  86. monkeybot-3.10.0/evals/scenarios/coding_hard/multi_feature_long.yaml +24 -0
  87. monkeybot-3.10.0/evals/scenarios/coding_hard/navigate_intl_rate.yaml +14 -0
  88. monkeybot-3.10.0/evals/scenarios/coding_hard/noisy_test_failure.yaml +16 -0
  89. monkeybot-3.10.0/evals/scenarios/coding_hard/rename_calc_tax.yaml +17 -0
  90. monkeybot-3.10.0/evals/smoke_agent/monkeybot_config/AGENT.coding.md +35 -0
  91. monkeybot-3.10.0/evals/smoke_agent/monkeybot_config/monkeybot.coding.yaml +56 -0
  92. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/pyproject.toml +2 -0
  93. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/uv.lock +48 -12
  94. monkeybot-3.10.0/evals/suites/coding.yaml +9 -0
  95. monkeybot-3.10.0/evals/suites/coding_hard.yaml +11 -0
  96. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_assertions.py +183 -0
  97. monkeybot-3.10.0/evals/test_coding_hard_oracle.py +264 -0
  98. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_report.py +70 -0
  99. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_runner_sse.py +144 -0
  100. monkeybot-3.10.0/evals/trials.py +128 -0
  101. {monkeybot-3.9.0 → monkeybot-3.10.0}/pyproject.toml +2 -1
  102. {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/ci-local.sh +4 -1
  103. monkeybot-3.10.0/src/monkeybot/core/coding/__init__.py +1 -0
  104. monkeybot-3.10.0/src/monkeybot/core/coding/git_context_hook.py +134 -0
  105. monkeybot-3.10.0/src/monkeybot/core/coding/read_ledger_hook.py +27 -0
  106. monkeybot-3.10.0/src/monkeybot/core/coding/verification_gate.py +383 -0
  107. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/runtime_env.py +9 -0
  108. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/settings.py +125 -0
  109. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/snapshot.py +24 -1
  110. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/__init__.py +77 -4
  111. monkeybot-3.10.0/src/monkeybot/core/context/project_context.py +276 -0
  112. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/tool_result_ingress.py +1 -0
  113. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/tool_shapers.py +1 -1
  114. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/hooks/__init__.py +23 -2
  115. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/mcp/mcp_client.py +59 -5
  116. monkeybot-3.10.0/src/monkeybot/core/mcp/oauth_flow.py +783 -0
  117. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/prompts/harness_prompt.py +20 -1
  118. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/prompts/headings.py +5 -0
  119. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/prompts/prompt.py +36 -4
  120. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/context_budget.py +25 -10
  121. monkeybot-3.10.0/src/monkeybot/core/runtime/doom_loop.py +228 -0
  122. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/events.py +1 -1
  123. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/history_compaction.py +78 -1
  124. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop_hooks.py +2 -0
  125. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/tool_dispatch.py +4 -1
  126. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/turn_loop.py +102 -4
  127. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/subagent_worker.py +5 -0
  128. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/core_tool_executor.py +210 -16
  129. monkeybot-3.10.0/src/monkeybot/core/tools/gitignore.py +120 -0
  130. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/inspector.py +241 -1
  131. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/patch.py +134 -20
  132. monkeybot-3.10.0/src/monkeybot/core/tools/read_ledger.py +95 -0
  133. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/spill_inventory.py +109 -7
  134. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/workspace_service.py +336 -32
  135. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/match.py +1 -1
  136. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/routes.py +15 -1
  137. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/app.py +27 -1
  138. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/session_bus.py +3 -0
  139. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_context.py +1 -0
  140. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_context_budget.py +36 -0
  141. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_core_tool_executor.py +655 -3
  142. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_doom_loop.py +190 -0
  143. monkeybot-3.10.0/tests/core/test_gitignore.py +62 -0
  144. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_harness_prompt.py +28 -0
  145. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_inspector.py +193 -0
  146. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_loop.py +258 -0
  147. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_loop_hooks.py +288 -0
  148. monkeybot-3.10.0/tests/core/test_mcp_oauth.py +224 -0
  149. monkeybot-3.10.0/tests/core/test_mcp_oauth_regressions.py +366 -0
  150. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_patch.py +119 -0
  151. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_progress_tracker.py +4 -1
  152. monkeybot-3.10.0/tests/core/test_project_context.py +448 -0
  153. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_prompt.py +31 -1
  154. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_runtime_config_snapshot.py +78 -0
  155. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_spill_inventory.py +52 -0
  156. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_terminal.py +31 -0
  157. monkeybot-3.10.0/tests/core/test_verification_gate.py +383 -0
  158. monkeybot-3.10.0/tests/core/test_verifier_tracker.py +62 -0
  159. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/eval_hook.py +7 -0
  160. monkeybot-3.10.0/tests/evals/scenario_runner.py +359 -0
  161. monkeybot-3.10.0/tests/evals/scenarios/coding_fix_failing_test.yaml +39 -0
  162. monkeybot-3.10.0/tests/evals/scenarios/coding_gate_passes_when_verified.yaml +35 -0
  163. monkeybot-3.10.0/tests/evals/scenarios/coding_gate_rejects_unverified.yaml +41 -0
  164. monkeybot-3.10.0/tests/evals/scenarios/coding_read_before_write.yaml +48 -0
  165. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/test_agent_behavior.py +6 -2
  166. monkeybot-3.10.0/tests/gateway/realtime/__init__.py +0 -0
  167. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_routes_client_text.py +45 -0
  168. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/test_packaging_config.py +9 -1
  169. monkeybot-3.10.0/tests/web_search/__init__.py +0 -0
  170. {monkeybot-3.9.0 → monkeybot-3.10.0}/uv.lock +3 -1
  171. monkeybot-3.9.0/evals/scenario_loader.py +0 -93
  172. monkeybot-3.9.0/src/monkeybot/core/runtime/doom_loop.py +0 -118
  173. monkeybot-3.9.0/tests/evals/scenario_runner.py +0 -191
  174. {monkeybot-3.9.0 → monkeybot-3.10.0}/.cursor/hooks/pre-pr.py +0 -0
  175. {monkeybot-3.9.0 → monkeybot-3.10.0}/.cursor/hooks.json +0 -0
  176. {monkeybot-3.9.0 → monkeybot-3.10.0}/.cursor/skills/mb-retro/SKILL.md +0 -0
  177. {monkeybot-3.9.0 → monkeybot-3.10.0}/.dockerignore +0 -0
  178. {monkeybot-3.9.0 → monkeybot-3.10.0}/.github/workflows/live-eval-smoke.yml +0 -0
  179. {monkeybot-3.9.0 → monkeybot-3.10.0}/.github/workflows/prepare-release.yml +0 -0
  180. {monkeybot-3.9.0 → monkeybot-3.10.0}/.github/workflows/publish-release.yml +0 -0
  181. {monkeybot-3.9.0 → monkeybot-3.10.0}/.pre-commit-config.yaml +0 -0
  182. {monkeybot-3.9.0 → monkeybot-3.10.0}/BACKLOG.md +0 -0
  183. {monkeybot-3.9.0 → monkeybot-3.10.0}/CONTRIBUTING.md +0 -0
  184. {monkeybot-3.9.0 → monkeybot-3.10.0}/LICENSE +0 -0
  185. {monkeybot-3.9.0 → monkeybot-3.10.0}/README.md +0 -0
  186. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/skills/monkeybot/SKILL.md +0 -0
  187. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
  188. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/__init__.py +0 -0
  189. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
  190. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
  191. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
  192. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_session.py +0 -0
  193. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
  194. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
  195. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_tool_display.py +0 -0
  196. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_tui.py +0 -0
  197. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
  198. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
  199. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
  200. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
  201. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
  202. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
  203. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
  204. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
  205. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/trace.py +0 -0
  206. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
  207. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/compat.py +0 -0
  208. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
  209. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
  210. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
  211. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
  212. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
  213. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/output.py +0 -0
  214. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
  215. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/providers.py +0 -0
  216. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
  217. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
  218. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
  219. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
  220. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
  221. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
  222. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
  223. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
  224. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
  225. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
  226. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
  227. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
  228. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
  229. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +0 -0
  230. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
  231. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
  232. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/goal/SKILL.md +0 -0
  233. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
  234. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
  235. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
  236. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
  237. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
  238. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
  239. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
  240. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
  241. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
  242. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_continue.py +0 -0
  243. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_e2e.py +0 -0
  244. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_errors.py +0 -0
  245. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_file_index.py +0 -0
  246. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_grounding.py +0 -0
  247. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_local_shell.py +0 -0
  248. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_renderer_parity.py +0 -0
  249. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_session.py +0 -0
  250. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_status_bar.py +0 -0
  251. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_theme.py +0 -0
  252. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_tool_display.py +0 -0
  253. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_tui.py +0 -0
  254. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_config_resolve.py +0 -0
  255. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_doctor.py +0 -0
  256. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_extras_catalog.py +0 -0
  257. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_gateway_health.py +0 -0
  258. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
  259. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_realtime_session_controller.py +0 -0
  260. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_run_cmd.py +0 -0
  261. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_runtime_python.py +0 -0
  262. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_terminal_markdown.py +0 -0
  263. {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_trace_cmd.py +0 -0
  264. {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/Dockerfile +0 -0
  265. {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/demo-model.yaml +0 -0
  266. {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/demo.yaml +0 -0
  267. {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/docker-compose.sandbox.yml +0 -0
  268. {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/opensandbox.docker.toml +0 -0
  269. {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/sandbox.Dockerfile +0 -0
  270. {monkeybot-3.9.0 → monkeybot-3.10.0}/docker-compose.yml +0 -0
  271. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/agent-layout.md +0 -0
  272. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/assets/logo.png +0 -0
  273. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/browser-mcp-perf-baseline.md +0 -0
  274. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/browser-mcp-performance-plan.md +0 -0
  275. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/browser-mcp.md +0 -0
  276. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/cloud-deployment-design.md +0 -0
  277. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-aws-agentcore.md +0 -0
  278. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-pattern-a-container.md +0 -0
  279. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-pattern-b-serverless.md +0 -0
  280. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
  281. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-pattern-d-realtime.md +0 -0
  282. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/getting-started.md +0 -0
  283. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/mcp.md +0 -0
  284. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/migrations/agent-scope-namespacing.md +0 -0
  285. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/migrations/history-row-id.sql +0 -0
  286. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/migrations/memory-outbox.sql +0 -0
  287. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/migrations/session-branches.sql +0 -0
  288. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/observability-runbook.md +0 -0
  289. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/ollama-local.md +0 -0
  290. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/otel-collector.example.yaml +0 -0
  291. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/progressive-loop-tools.md +0 -0
  292. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/progressive-mcp-tools.md +0 -0
  293. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/skills.md +0 -0
  294. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/spill-dynamic-design.md +0 -0
  295. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/sse-gateway-ui.md +0 -0
  296. {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/verifier-agent-design.md +0 -0
  297. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/TEST_COVERAGE.md +0 -0
  298. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/baselines/smoke.json +0 -0
  299. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/baselines/smoke.md +0 -0
  300. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/diff.py +0 -0
  301. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/eval_config.yaml +0 -0
  302. {monkeybot-3.9.0/tests/cli → monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/legacy}/__init__.py +0 -0
  303. {monkeybot-3.9.0/tests/computer → monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/utils}/__init__.py +0 -0
  304. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/persistence.py +0 -0
  305. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/context/summarization_trigger.yaml +0 -0
  306. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/declares_done.yaml +0 -0
  307. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/path_constraint.yaml +0 -0
  308. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/preempt.yaml +0 -0
  309. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/repeat_correction.yaml +0 -0
  310. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/supersession.yaml +0 -0
  311. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/mcp/get_prompt.yaml +0 -0
  312. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/mcp/list_resources.yaml +0 -0
  313. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/mcp/tool_invoke.yaml +0 -0
  314. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/memory/recall_cross_session.yaml +0 -0
  315. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/memory/recall_single_session.yaml +0 -0
  316. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/multi_turn/task_tracking.yaml +0 -0
  317. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/skills/skill_invocation.yaml +0 -0
  318. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/subagents/dispatch_complete.yaml +0 -0
  319. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_read.yaml +0 -0
  320. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_read_error.yaml +0 -0
  321. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_run_command.yaml +0 -0
  322. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +0 -0
  323. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_write.yaml +0 -0
  324. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scorer.py +0 -0
  325. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/.env.example +0 -0
  326. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/.gitignore +0 -0
  327. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
  328. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
  329. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
  330. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
  331. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +0 -0
  332. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -0
  333. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
  334. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
  335. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
  336. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
  337. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/suites/drift.yaml +0 -0
  338. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/suites/smoke.yaml +0 -0
  339. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_diff.py +0 -0
  340. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_judge.py +0 -0
  341. {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_scorer.py +0 -0
  342. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/README.md +0 -0
  343. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/agentcore/handler.py +0 -0
  344. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/agentcore/runtime_app.py +0 -0
  345. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/agentengine/handler.py +0 -0
  346. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/cloud-functions/main.py +0 -0
  347. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/lambda/handler.py +0 -0
  348. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/ollama/PrefixStable.Modelfile +0 -0
  349. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/browser/SKILL.md +0 -0
  350. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
  351. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/diagnostics/README.md +0 -0
  352. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/diagnostics/SKILL.md +0 -0
  353. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/diagnostics/__init__.py +0 -0
  354. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/diagnostics/diagnostics.py +0 -0
  355. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/image-generator/SKILL.md +0 -0
  356. {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/image-generator/generate_image.py +0 -0
  357. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/pyproject.toml +0 -0
  358. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
  359. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
  360. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
  361. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
  362. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
  363. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
  364. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/app.py +0 -0
  365. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
  366. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
  367. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
  368. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/backend.py +0 -0
  369. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/chat_context.py +0 -0
  370. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/chat_scope.py +0 -0
  371. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
  372. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +0 -0
  373. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/login.py +0 -0
  374. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
  375. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
  376. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
  377. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
  378. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
  379. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
  380. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/server.py +0 -0
  381. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +0 -0
  382. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +0 -0
  383. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +0 -0
  384. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
  385. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
  386. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
  387. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
  388. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
  389. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
  390. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +0 -0
  391. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/conftest.py +0 -0
  392. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
  393. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
  394. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
  395. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
  396. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
  397. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
  398. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +0 -0
  399. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/conftest.py +0 -0
  400. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
  401. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
  402. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
  403. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +0 -0
  404. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
  405. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
  406. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
  407. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_act.py +0 -0
  408. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_agentcore.py +0 -0
  409. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_chat_isolation.py +0 -0
  410. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_chat_scope.py +0 -0
  411. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
  412. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_fill_form.py +0 -0
  413. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +0 -0
  414. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_indexed_tools.py +0 -0
  415. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_observe.py +0 -0
  416. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_observe_after.py +0 -0
  417. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_perf.py +0 -0
  418. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_playbook_flows.py +0 -0
  419. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
  420. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
  421. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
  422. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_server_shutdown.py +0 -0
  423. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_tabs.py +0 -0
  424. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_tool_surface.py +0 -0
  425. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_wait_tools.py +0 -0
  426. {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/uv.lock +0 -0
  427. {monkeybot-3.9.0 → monkeybot-3.10.0}/pytest.ini +0 -0
  428. {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/create_schema.py +0 -0
  429. {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/precommit-pytest.sh +0 -0
  430. {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/release.py +0 -0
  431. {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/smoke_global_cli.sh +0 -0
  432. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/__init__.py +0 -0
  433. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/__init__.py +0 -0
  434. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/__main__.py +0 -0
  435. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/audio_io.py +0 -0
  436. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/gateway_manager.py +0 -0
  437. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/main.py +0 -0
  438. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/push_to_talk.py +0 -0
  439. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/realtime_client.py +0 -0
  440. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/__init__.py +0 -0
  441. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/approvals.py +0 -0
  442. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/permissions.py +0 -0
  443. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/safety.py +0 -0
  444. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/tools.py +0 -0
  445. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/__init__.py +0 -0
  446. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/__init__.py +0 -0
  447. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/catalog.py +0 -0
  448. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/config.py +0 -0
  449. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/freeze.py +0 -0
  450. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/image_preview.py +0 -0
  451. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/resolve.py +0 -0
  452. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/store.py +0 -0
  453. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/text.py +0 -0
  454. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/tools.py +0 -0
  455. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/bootstrap.py +0 -0
  456. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/__init__.py +0 -0
  457. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/realtime_config.py +0 -0
  458. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/validation.py +0 -0
  459. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
  460. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/campaign_context.py +0 -0
  461. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/common.py +0 -0
  462. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/epoch.py +0 -0
  463. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/secret_egress.py +0 -0
  464. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/slash_skills.py +0 -0
  465. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
  466. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/goals/__init__.py +0 -0
  467. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/goals/service.py +0 -0
  468. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/hooks/evidence_guard.py +0 -0
  469. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/layout.py +0 -0
  470. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/llm/__init__.py +0 -0
  471. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/llm/provider.py +0 -0
  472. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
  473. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/llm/usage.py +0 -0
  474. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/lockfile_names.py +0 -0
  475. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/logging_utils.py +0 -0
  476. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/mcp/__init__.py +0 -0
  477. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
  478. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/__init__.py +0 -0
  479. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/config.py +0 -0
  480. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/hook.py +0 -0
  481. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/ids.py +0 -0
  482. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/ingest.py +0 -0
  483. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
  484. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/observability.py +0 -0
  485. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/outbox.py +0 -0
  486. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/palace.py +0 -0
  487. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/subsystem.py +0 -0
  488. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/uri.py +0 -0
  489. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/writer.py +0 -0
  490. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/messages/__init__.py +0 -0
  491. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
  492. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/messages/tool_integrity.py +0 -0
  493. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/messages/transform_context.py +0 -0
  494. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/path_safety.py +0 -0
  495. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/__init__.py +0 -0
  496. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/backends.py +0 -0
  497. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/branches.py +0 -0
  498. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/db.py +0 -0
  499. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
  500. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/errors.py +0 -0
  501. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
  502. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/firestore.py +0 -0
  503. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
  504. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/goal_ledger.py +0 -0
  505. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/history.py +0 -0
  506. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/postgres.py +0 -0
  507. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/row_ids.py +0 -0
  508. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/runs.py +0 -0
  509. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
  510. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
  511. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/sqlite.py +0 -0
  512. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/sqlite_backend.py +0 -0
  513. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/thread_summary.py +0 -0
  514. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/transcript.py +0 -0
  515. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/transcript_reader.py +0 -0
  516. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/usage.py +0 -0
  517. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
  518. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/prompts/__init__.py +0 -0
  519. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/__init__.py +0 -0
  520. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/history_rewrite.py +0 -0
  521. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/input_admission.py +0 -0
  522. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop.py +0 -0
  523. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
  524. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
  525. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop_usage.py +0 -0
  526. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
  527. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/realtime_loop.py +0 -0
  528. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
  529. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
  530. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/__init__.py +0 -0
  531. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
  532. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
  533. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
  534. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subprocess_groups.py +0 -0
  535. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/testing/__init__.py +0 -0
  536. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
  537. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
  538. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/__init__.py +0 -0
  539. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/ask_user.py +0 -0
  540. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/background_jobs.py +0 -0
  541. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/command_executor.py +0 -0
  542. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
  543. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/grant_store.py +0 -0
  544. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
  545. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/path_grant_inspector.py +0 -0
  546. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/permission.py +0 -0
  547. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/sandbox_executor.py +0 -0
  548. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/terminal.py +0 -0
  549. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
  550. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
  551. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/tool_kind.py +0 -0
  552. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/types.py +0 -0
  553. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/types/__init__.py +0 -0
  554. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/types/content_blocks.py +0 -0
  555. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/types/interfaces.py +0 -0
  556. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/types/types_tools.py +0 -0
  557. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/__init__.py +0 -0
  558. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/actuator.py +0 -0
  559. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/binding.py +0 -0
  560. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/classify.py +0 -0
  561. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/inspector.py +0 -0
  562. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/intervention.py +0 -0
  563. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/judge.py +0 -0
  564. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/ledger.py +0 -0
  565. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/mailbox.py +0 -0
  566. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/port.py +0 -0
  567. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/rewrite_effects.py +0 -0
  568. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/severity.py +0 -0
  569. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/tracker.py +0 -0
  570. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/__init__.py +0 -0
  571. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/factory.py +0 -0
  572. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/gcs.py +0 -0
  573. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/local.py +0 -0
  574. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/protocol.py +0 -0
  575. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/s3.py +0 -0
  576. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace_layout.py +0 -0
  577. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/__init__.py +0 -0
  578. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/bootstrap.py +0 -0
  579. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/main.py +0 -0
  580. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
  581. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
  582. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/app.py +0 -0
  583. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
  584. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
  585. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
  586. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/manager.py +0 -0
  587. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
  588. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/session.py +0 -0
  589. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
  590. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime_main.py +0 -0
  591. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
  592. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/goal_routes.py +0 -0
  593. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/history_routes.py +0 -0
  594. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
  595. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/models.py +0 -0
  596. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/reload.py +0 -0
  597. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
  598. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/request_storage.py +0 -0
  599. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/routes.py +0 -0
  600. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
  601. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
  602. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/sse.py +0 -0
  603. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
  604. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/__init__.py +0 -0
  605. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/_state.py +0 -0
  606. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/instrumentation.py +0 -0
  607. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/propagation.py +0 -0
  608. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/spans.py +0 -0
  609. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/sqlite_exporter.py +0 -0
  610. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/__init__.py +0 -0
  611. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
  612. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/_openai_compat.py +0 -0
  613. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/_sdk_client.py +0 -0
  614. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/_utils.py +0 -0
  615. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/bedrock.py +0 -0
  616. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/claude.py +0 -0
  617. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/fireworks.py +0 -0
  618. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/gemini.py +0 -0
  619. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/gemini_live.py +0 -0
  620. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/huggingface.py +0 -0
  621. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/model_capabilities.py +0 -0
  622. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/nvidia.py +0 -0
  623. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/ollama.py +0 -0
  624. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/openai.py +0 -0
  625. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/openrouter.py +0 -0
  626. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/pricing.py +0 -0
  627. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/rejected_sampling.py +0 -0
  628. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/request_budget.py +0 -0
  629. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/sampling.py +0 -0
  630. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/vertex_claude.py +0 -0
  631. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scaffold/__init__.py +0 -0
  632. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/__init__.py +0 -0
  633. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/__main__.py +0 -0
  634. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/engine.py +0 -0
  635. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
  636. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/interval.py +0 -0
  637. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/tick_result.py +0 -0
  638. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/worker.py +0 -0
  639. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/subagents/__init__.py +0 -0
  640. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
  641. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
  642. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/todo_list/__init__.py +0 -0
  643. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/todo_list/store.py +0 -0
  644. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/todo_list/tool.py +0 -0
  645. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/__init__.py +0 -0
  646. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
  647. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
  648. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
  649. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
  650. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/protocol.py +0 -0
  651. {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/tool.py +0 -0
  652. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/__init__.py +0 -0
  653. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/acceptance/test_observability_acceptance.py +0 -0
  654. {monkeybot-3.9.0/tests/gateway/realtime → monkeybot-3.10.0/tests/cli}/__init__.py +0 -0
  655. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/cli/test_gateway_manager.py +0 -0
  656. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/cli/test_main.py +0 -0
  657. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/cli/test_push_to_talk.py +0 -0
  658. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/cli/test_realtime_client.py +0 -0
  659. {monkeybot-3.9.0/tests/web_search → monkeybot-3.10.0/tests/computer}/__init__.py +0 -0
  660. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_approvals.py +0 -0
  661. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_computer_tools.py +0 -0
  662. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_package_init.py +0 -0
  663. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_path_policy.py +0 -0
  664. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_permissions.py +0 -0
  665. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_subagent_exclusion.py +0 -0
  666. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_wiring.py +0 -0
  667. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/conftest.py +0 -0
  668. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/__init__.py +0 -0
  669. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
  670. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/memory/helpers.py +0 -0
  671. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/memory/in_memory_palace.py +0 -0
  672. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/memory/test_mempalace.py +0 -0
  673. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/memory/test_review_fixes.py +0 -0
  674. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_agent_layout.py +0 -0
  675. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_ask_user.py +0 -0
  676. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_attachment_freeze.py +0 -0
  677. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_attachment_store.py +0 -0
  678. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_background_jobs.py +0 -0
  679. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_bootstrap.py +0 -0
  680. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_branch_store_backends.py +0 -0
  681. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_config_extensions.py +0 -0
  682. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_content_blocks.py +0 -0
  683. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_context_epoch.py +0 -0
  684. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_durable_events.py +0 -0
  685. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_durable_runs.py +0 -0
  686. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_empty_completion.py +0 -0
  687. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_env_map_grep_gates.py +0 -0
  688. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_events.py +0 -0
  689. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_evidence_guard.py +0 -0
  690. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_firestore_history.py +0 -0
  691. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
  692. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_firestore_usage.py +0 -0
  693. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_fs_isolation.py +0 -0
  694. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_gemini_history_replay.py +0 -0
  695. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_goal_ledger.py +0 -0
  696. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_goal_persistence.py +0 -0
  697. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_goals.py +0 -0
  698. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_grant_store.py +0 -0
  699. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_history.py +0 -0
  700. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_history_branches.py +0 -0
  701. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_history_compaction_split.py +0 -0
  702. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_history_row_ids.py +0 -0
  703. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_hooks.py +0 -0
  704. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_image_preview.py +0 -0
  705. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_input_admission.py +0 -0
  706. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_layout.py +0 -0
  707. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_logging_utils.py +0 -0
  708. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_loop_observability.py +0 -0
  709. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_loop_transcript.py +0 -0
  710. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_mcp_client.py +0 -0
  711. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_memory_layout_migrate.py +0 -0
  712. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_message_pipeline.py +0 -0
  713. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_mocks_realtime_provider.py +0 -0
  714. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_path_grant_inspector.py +0 -0
  715. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_path_safety.py +0 -0
  716. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_permission.py +0 -0
  717. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_pricing.py +0 -0
  718. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_progress_publish.py +0 -0
  719. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_provider_contract.py +0 -0
  720. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_provider_stream_mapper.py +0 -0
  721. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_realtime_loop.py +0 -0
  722. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_replace_fuzzy.py +0 -0
  723. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_run_command_parse.py +0 -0
  724. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_runs.py +0 -0
  725. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_runtime_env.py +0 -0
  726. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_sandbox_executor.py +0 -0
  727. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_scheduled_loops.py +0 -0
  728. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_secret_egress.py +0 -0
  729. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_session_branches_migration.py +0 -0
  730. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_session_turn_locks.py +0 -0
  731. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_settlement.py +0 -0
  732. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_slash_skills.py +0 -0
  733. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_spill_dynamic.py +0 -0
  734. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_storage_backends.py +0 -0
  735. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_subagent_proto.py +0 -0
  736. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_subagent_trace_propagation.py +0 -0
  737. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_subagent_transcript.py +0 -0
  738. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_subagent_worker_paths.py +0 -0
  739. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_thread_summary_wire.py +0 -0
  740. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_tool_def_schema.py +0 -0
  741. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_tool_integrity.py +0 -0
  742. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_tool_result_ingress.py +0 -0
  743. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_tool_shapers.py +0 -0
  744. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_transcript.py +0 -0
  745. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_transcript_reader.py +0 -0
  746. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_truncated_tool_batch.py +0 -0
  747. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_turn_session_id.py +0 -0
  748. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_usage.py +0 -0
  749. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_usage_migration.py +0 -0
  750. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_utterance_buffer.py +0 -0
  751. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_binding.py +0 -0
  752. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_inspector.py +0 -0
  753. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_judge.py +0 -0
  754. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_mailbox_lifecycle.py +0 -0
  755. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_rewrite_effects.py +0 -0
  756. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_sticky_nudge.py +0 -0
  757. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_worker_pool.py +0 -0
  758. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_workspace_extra_read_roots.py +0 -0
  759. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_workspace_layout.py +0 -0
  760. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_workspace_symlinks.py +0 -0
  761. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_workspace_write_scope.py +0 -0
  762. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/workspace/test_factory.py +0 -0
  763. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/workspace/test_local_storage.py +0 -0
  764. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/workspace/test_protocol_contract.py +0 -0
  765. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/__init__.py +0 -0
  766. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
  767. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
  768. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
  769. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
  770. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
  771. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
  772. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_read.yaml +0 -0
  773. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
  774. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
  775. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
  776. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
  777. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
  778. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_write.yaml +0 -0
  779. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
  780. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/test_verifier_port.py +0 -0
  781. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/__init__.py +0 -0
  782. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_app.py +0 -0
  783. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_deps.py +0 -0
  784. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_guardrails.py +0 -0
  785. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_manager.py +0 -0
  786. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_metrics.py +0 -0
  787. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_session.py +0 -0
  788. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_wire.py +0 -0
  789. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_attachments.py +0 -0
  790. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_config_reload.py +0 -0
  791. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_create_session_model.py +0 -0
  792. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_gateway_runtime.py +0 -0
  793. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_history_routes.py +0 -0
  794. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_routes.py +0 -0
  795. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
  796. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_session_bus.py +0 -0
  797. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_start_turn_setup_failure.py +0 -0
  798. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_transcript_wiring.py +0 -0
  799. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_otel_fastapi.py +0 -0
  800. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_otel_lifespan.py +0 -0
  801. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
  802. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_realtime_main.py +0 -0
  803. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_resolve_provider.py +0 -0
  804. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_sdk_client_shutdown.py +0 -0
  805. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_sse_events.py +0 -0
  806. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
  807. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/integration/__init__.py +0 -0
  808. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
  809. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/integration/test_observability_integration.py +0 -0
  810. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/integration/test_prompt_caching_integration.py +0 -0
  811. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/conftest.py +0 -0
  812. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_init.py +0 -0
  813. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_instrumentation.py +0 -0
  814. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_loop_hook_spans.py +0 -0
  815. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_propagation.py +0 -0
  816. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_span_contract.py +0 -0
  817. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_spans.py +0 -0
  818. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_sqlite_exporter.py +0 -0
  819. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_truncate.py +0 -0
  820. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_turn_complete_trace.py +0 -0
  821. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/conftest.py +0 -0
  822. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_anthropic_cache.py +0 -0
  823. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_anthropic_history.py +0 -0
  824. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_bedrock_converse.py +0 -0
  825. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_bedrock_estimate.py +0 -0
  826. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_fireworks.py +0 -0
  827. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_gemini_history.py +0 -0
  828. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_gemini_live.py +0 -0
  829. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_gemini_usage.py +0 -0
  830. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_huggingface.py +0 -0
  831. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_model_capabilities.py +0 -0
  832. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_nvidia.py +0 -0
  833. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_ollama.py +0 -0
  834. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_openai_byte_budget.py +0 -0
  835. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_openai_compat_usage.py +0 -0
  836. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_openai_history.py +0 -0
  837. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_pricing.py +0 -0
  838. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_request_budget.py +0 -0
  839. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
  840. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_sampling.py +0 -0
  841. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_sdk_client_reuse.py +0 -0
  842. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_sonnet5_sampling.py +0 -0
  843. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_source_grep_gates.py +0 -0
  844. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_vertex_claude_history.py +0 -0
  845. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/scheduler/test_engine.py +0 -0
  846. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/scheduler/test_interval.py +0 -0
  847. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/skills/__init__.py +0 -0
  848. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/skills/test_generate_image_script.py +0 -0
  849. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/test_cold_start.py +0 -0
  850. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/test_release_script.py +0 -0
  851. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/todo_list/test_todo_list.py +0 -0
  852. {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/web_search/test_web_search.py +0 -0
@@ -29,7 +29,7 @@ jobs:
29
29
  run: uv run mypy src/monkeybot
30
30
 
31
31
  - name: Pytest
32
- run: uv run pytest tests/ -q
32
+ run: uv run pytest tests/ -q -n auto
33
33
 
34
34
  - name: CLI pytest
35
35
  working-directory: cli
@@ -49,3 +49,4 @@ jobs:
49
49
  uv run python evals/test_assertions.py
50
50
  uv run python evals/test_report.py
51
51
  uv run python evals/test_runner_sse.py
52
+ uv run python evals/test_coding_hard_oracle.py
@@ -68,4 +68,8 @@ code/
68
68
  .evals-venv/
69
69
 
70
70
  # monkeythink
71
- .monkeythink/
71
+ .monkeythink/
72
+ # Eval fixtures ship their own build/ decoy
73
+ !/evals/fixtures/coding/calc_repo/build/
74
+ !/evals/fixtures/coding/calc_repo_green/build/
75
+ !/evals/fixtures/coding/shop_repo/build/
@@ -10,9 +10,47 @@ the project adheres to [Semantic Versioning](https://semver.org/).
10
10
 
11
11
  ### Added
12
12
 
13
+ - `monkeybot new --template coding` scaffolds an agent with a coding `AGENT.md`, a toolchain command allowlist (including yarn, with `rm` denied inside `bash -c`), ask-before-push permissions that also match chained commands and `bash -c`, and `coding.verification_gate` turned on.
14
+ - `monkeybot mcp-login` signs in to one remote MCP server in the browser and writes the token file core reuses.
15
+ - New scaffolds list `./tests/` and `./src/` in `command_allowlist.yaml`. `refresh` does not re-add them to an allowlist you already configured.
16
+
17
+ ## [core v3.10.0] - 2026-10-22
18
+
19
+ ### Added
20
+
21
+ - Coding mode for agents that work in a repository. It adds an editing & verification protocol to the prompt, puts `AGENTS.md` / `CLAUDE.md` and a short repo overview in the cached prompt prefix, reports git branch and dirty files each turn, refuses edits to files the model has not read (`read_before_write`) or that changed since (`stale_read`), and — with `coding.verification_gate` — refuses a final answer that follows edits no test or lint run has passed since. See `docs/features.md` §22.
22
+ - Hooks: `PRE_FINAL_ANSWER` (a hook may refuse a final answer once the tools are done; `BEFORE_PROVIDER_REQUEST` may hold the text until then) and `HISTORY_COMPACTED` (awaited after history is summarized). A tool failing on the same file repeatedly trips doom-loop recovery even when its other arguments, or the path's spelling, change.
23
+ - New `list_dir` tool. `grep` gains `context`, `files_only` and `respect_gitignore`; `glob` takes `files_only` and no longer walks `node_modules`, `.git`, `build` and similar. `replace_in_file` and `apply_patch` return the edited `line` and a numbered `snippet`. Skills appear in the prompt as `name — description`.
24
+ - Live eval suites `coding` and `coding_hard` (`evals/suites/`) over fixture repos, with workspace-checked assertions (`workspace_command_passes`, `workspace_file_contains`, `workspace_unchanged`, `final_text_regex`, `verified_before_final`), seeded-bug overlays, and `python -m evals.trials` to run a suite repeatedly and compare configurations. The eval runner answers `ask_user` prompts so a run cannot hang waiting for a human.
25
+ - Remote MCP servers can sign in with browser OAuth. Tokens are stored per server and reused on later connects; a failed refresh is reported as an auth error.
26
+
27
+ ### Changed
28
+
29
+ - Coding mode is always on for every agent. `coding.enabled` is retired: a leftover `coding: {enabled: ...}` is ignored with a warning. Every agent now gets the editing & verification protocol, the read-before-write ledger (`read_before_write` / `stale_read` refusals), project instructions and repo overview in the cached prompt prefix, and git state in runtime notes. `coding.verification_gate.enabled` stays opt-in.
30
+ - `glob` returns files only by default; pass `files_only: false` to also list directories. `bash -c` scripts are screened command by command against `deny_patterns`.
31
+
32
+ ### Fixed
33
+
34
+ - `run_command` output over the spill threshold no longer hides `exit_code`, `stderr` and the end of the output behind a truncated JSON prefix. The result stays valid JSON with head/tail excerpts and the full streams at `output_path`.
35
+ - `run_command` accepts `./tests/` and `./src/` path arguments (relative or workspace-absolute) under the built-in defaults, so `pytest ./tests` is no longer rejected. A configured allowlist is not widened.
36
+ - `deny_patterns` that anchor on the start of a command (`^rm\s+-rf`, `^curl`, `^sudo`) now also apply to commands inside `bash -c "…"`. A `bash -c` script that cannot be screened is rejected instead of run.
37
+ - The progress tracker's `write_without_read` / `rewrite_churn` signals never fired for `replace_in_file` (it tracked a tool name that does not exist).
38
+ - `apply_patch` rejects a hunk whose old lines match several places instead of silently editing the first, rejects hunk lines with no valid prefix instead of dropping them, and honors `*** End of File`.
39
+ - Subagent personas' `model` and `vertex_location` are used by `task` instead of the parent's model.
40
+ - A provider call that fails with an empty message (for example an `httpx.ReadTimeout`) now reports `Provider request failed (<ExceptionType>)` instead of a blank error.
41
+ - Over-budget tool text keeps its tail (70% head / 30% tail) instead of only its head.
42
+
43
+ ## [cli v0.10.0] - 2026-10-18
44
+
45
+ ### Added
46
+
13
47
  - `monkeybot doctor` reports `model.reasoning_effort`, including when a non-Claude Bedrock model will not receive it.
14
48
  - `fireworks` is a scaffold provider choice and validates with `FIREWORKS_API_KEY`.
15
49
 
50
+ ### Changed
51
+
52
+ - Requires `monkeybot[cli]>=3.9.0,<4`. Doctor imports the reasoning-effort helpers added in core 3.9.0.
53
+
16
54
  ## [core v3.9.0] - 2026-10-18
17
55
 
18
56
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: monkeybot
3
- Version: 3.9.0
3
+ Version: 3.10.0
4
4
  Summary: monkeybot agent harness — FastAPI SSE gateway, owned loop, SQLite, and MCP.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "monkeybot-cli"
7
- version = "0.9.0"
7
+ version = "0.10.0"
8
8
  description = "CLI to create, configure, validate, and chat with monkeybot agents."
9
9
  requires-python = ">=3.11"
10
10
  dependencies = [
11
11
  # `cli` pulls realtime + typer so `monkeybot talk` works out of the box (text mode).
12
12
  # Audio mic/PTT needs the agent (or this env) to also install monkeybot[cli-realtime].
13
- "monkeybot[cli]>=3.8.0,<4",
13
+ "monkeybot[cli]>=3.9.0,<4",
14
14
  "monkeybot-browser-mcp>=0.5.0,<1",
15
15
  "httpx>=0.27.0",
16
16
  "pyyaml>=6.0.2",
@@ -0,0 +1,81 @@
1
+ """monkeybot mcp-login — browser sign-in for one remote MCP server."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import asyncio
7
+ import json
8
+ import logging
9
+ import os
10
+ import sys
11
+ from pathlib import Path
12
+
13
+ from mcp.client.auth.exceptions import OAuthFlowError
14
+ from monkeybot.core.mcp.mcp_client import MCPAuthError
15
+ from monkeybot.core.mcp.oauth_flow import login_mcp_server
16
+
17
+ logger = logging.getLogger(__name__)
18
+
19
+ CLIENT_SECRET_ENV = "MONKEYBOT_MCP_CLIENT_SECRET"
20
+
21
+
22
+ def run_mcp_login(args: argparse.Namespace) -> int:
23
+ """Sign in, print JSON progress on stdout, and return 0 when the attempt finishes."""
24
+ client_secret = args.client_secret or os.environ.get(CLIENT_SECRET_ENV, "")
25
+ try:
26
+ result = asyncio.run(
27
+ login_mcp_server(
28
+ args.url,
29
+ Path(args.storage).expanduser(),
30
+ open_browser=not args.no_browser,
31
+ client_id=args.client_id,
32
+ client_secret=client_secret,
33
+ redirect_port=args.redirect_port,
34
+ )
35
+ )
36
+ except (MCPAuthError, OAuthFlowError) as exc:
37
+ print(str(exc), file=sys.stderr)
38
+ return 1
39
+ except Exception:
40
+ logger.exception("mcp oauth sign-in failed")
41
+ print("Sign-in failed.", file=sys.stderr)
42
+ return 1
43
+ print(json.dumps(result), flush=True)
44
+ return 0
45
+
46
+
47
+ def register(sub: argparse._SubParsersAction[argparse.ArgumentParser]) -> None:
48
+ """Register the ``mcp-login`` subcommand."""
49
+ command = sub.add_parser(
50
+ "mcp-login",
51
+ help="Sign in to a remote MCP server in the browser",
52
+ )
53
+ command.add_argument("--url", required=True, help="Streamable HTTP URL of the MCP server")
54
+ command.add_argument(
55
+ "--storage", required=True, help="Directory for this machine's OAuth tokens"
56
+ )
57
+ command.add_argument(
58
+ "--no-browser",
59
+ action="store_true",
60
+ help="Print the authorization URL instead of opening a browser",
61
+ )
62
+ command.add_argument(
63
+ "--client-id",
64
+ default="",
65
+ help="OAuth client id, for a server that will not register one automatically",
66
+ )
67
+ command.add_argument(
68
+ "--client-secret",
69
+ default="",
70
+ help=(
71
+ f"OAuth client secret, when that client requires one. Prefer {CLIENT_SECRET_ENV}: "
72
+ "command-line arguments are visible to other processes."
73
+ ),
74
+ )
75
+ command.add_argument(
76
+ "--redirect-port",
77
+ type=int,
78
+ default=None,
79
+ help="Loopback port for the sign-in redirect, for a client registered with an exact URI",
80
+ )
81
+ command.set_defaults(func=run_mcp_login)
@@ -13,7 +13,7 @@ from monkeybot_cli.extras_catalog import (
13
13
  additional_provider_extra_choices,
14
14
  normalize_extra_token,
15
15
  )
16
- from monkeybot_cli.scaffold import run_new
16
+ from monkeybot_cli.scaffold import DEFAULT_TEMPLATE, TEMPLATES, run_new
17
17
 
18
18
  _DEFAULT_PROVIDER = "gemini"
19
19
  _DEFAULT_MODEL = "gemini-3-flash"
@@ -26,7 +26,19 @@ def _prompt_line(prompt: str) -> str:
26
26
  return ""
27
27
 
28
28
 
29
- def _prompt_single(choices: tuple[ExtraChoice, ...], *, title: str, default_key: str) -> str:
29
+ TEMPLATE_CHOICES: tuple[ExtraChoice, ...] = (
30
+ ExtraChoice("default", "General-purpose agent"),
31
+ ExtraChoice("coding", "Coding agent for a repository (verification gate, dev toolchain)"),
32
+ )
33
+
34
+
35
+ def _prompt_single(
36
+ choices: tuple[ExtraChoice, ...],
37
+ *,
38
+ title: str,
39
+ default_key: str,
40
+ noun: str = "provider",
41
+ ) -> str:
30
42
  """Numbered single-select; Enter keeps default_key."""
31
43
  print(title)
32
44
  default_idx = 1
@@ -35,7 +47,7 @@ def _prompt_single(choices: tuple[ExtraChoice, ...], *, title: str, default_key:
35
47
  if choice.key == default_key:
36
48
  default_idx = i
37
49
  print(f" {i}) {choice.key} — {choice.label}{marker}")
38
- raw = _prompt_line(f"Choose provider [{default_idx}]: ").strip()
50
+ raw = _prompt_line(f"Choose {noun} [{default_idx}]: ").strip()
39
51
  if not raw:
40
52
  return default_key
41
53
  if raw.isdigit():
@@ -48,7 +60,7 @@ def _prompt_single(choices: tuple[ExtraChoice, ...], *, title: str, default_key:
48
60
  for choice in choices:
49
61
  if raw.lower() == choice.key.lower():
50
62
  return choice.key
51
- print(f" unknown provider {raw!r}; using {default_key}", file=sys.stderr)
63
+ print(f" unknown {noun} {raw!r}; using {default_key}", file=sys.stderr)
52
64
  return default_key
53
65
 
54
66
 
@@ -128,6 +140,13 @@ def run_new_command(args: argparse.Namespace) -> int:
128
140
 
129
141
  provider = args.provider
130
142
  model = args.model
143
+ template = getattr(args, "template", None)
144
+ if template is not None and template not in TEMPLATES:
145
+ print(
146
+ f"error: unknown --template {template!r}; choose from {', '.join(TEMPLATES)}",
147
+ file=sys.stderr,
148
+ )
149
+ return 2
131
150
  extras, unknown = _resolve_extras_from_args(getattr(args, "with_extras", None))
132
151
  if unknown:
133
152
  print(
@@ -137,6 +156,13 @@ def run_new_command(args: argparse.Namespace) -> int:
137
156
  return 2
138
157
 
139
158
  if not args.yes:
159
+ if template is None:
160
+ template = _prompt_single(
161
+ TEMPLATE_CHOICES,
162
+ title="Template:",
163
+ default_key=DEFAULT_TEMPLATE,
164
+ noun="template",
165
+ )
140
166
  if provider is None:
141
167
  provider = _prompt_single(
142
168
  PROVIDER_CHOICES,
@@ -167,6 +193,7 @@ def run_new_command(args: argparse.Namespace) -> int:
167
193
  provider=provider,
168
194
  model=model,
169
195
  extras=extras or None,
196
+ template=template or DEFAULT_TEMPLATE,
170
197
  )
171
198
  print(f"monkeybot scaffold under {dest}:")
172
199
  print("\n".join(report))
@@ -177,6 +204,12 @@ def run_new_command(args: argparse.Namespace) -> int:
177
204
  print(" cp .env.example .env # then add provider keys")
178
205
  print(" monkeybot doctor")
179
206
  print(" monkeybot chat")
207
+ if template == "coding":
208
+ print()
209
+ print("Coding template: clone the repository into ./workspace.")
210
+ print("Path prefixes in command_allowlist.yaml are relative to paths.workspace_root,")
211
+ print("so ../memory is the agent memory only while that stays ./workspace.")
212
+ print("If you set paths.workspace_root to another directory, update those prefixes.")
180
213
  return 0
181
214
 
182
215
 
@@ -200,6 +233,13 @@ def register(subparsers: argparse._SubParsersAction[argparse.ArgumentParser]) ->
200
233
  "observability, openai, bedrock, claude"
201
234
  ),
202
235
  )
236
+ p.add_argument(
237
+ "--template",
238
+ choices=TEMPLATES,
239
+ default=None,
240
+ help="Scaffold flavour: default (general agent) or coding (repo workflow). "
241
+ "Prompted interactively when omitted.",
242
+ )
203
243
  p.add_argument("--force", action="store_true", help="Overwrite existing scaffold files")
204
244
  p.add_argument("--yes", "-y", action="store_true", help="Skip interactive prompts")
205
245
  p.set_defaults(func=run_new_command)
@@ -5,7 +5,18 @@ from __future__ import annotations
5
5
  import argparse
6
6
  import sys
7
7
 
8
- from monkeybot_cli.commands import chat, doctor, loop, new, refresh, run_cmd, talk, trace, validate
8
+ from monkeybot_cli.commands import (
9
+ chat,
10
+ doctor,
11
+ loop,
12
+ mcp_login,
13
+ new,
14
+ refresh,
15
+ run_cmd,
16
+ talk,
17
+ trace,
18
+ validate,
19
+ )
9
20
  from monkeybot_cli.runtime_python import RuntimeUpgradeError, report_runtime_upgrade_error
10
21
 
11
22
 
@@ -25,6 +36,7 @@ def build_parser() -> argparse.ArgumentParser:
25
36
  talk.register(sub)
26
37
  loop.register(sub)
27
38
  trace.register(sub)
39
+ mcp_login.register(sub)
28
40
  return parser
29
41
 
30
42
 
@@ -17,6 +17,13 @@ _DEFAULTS_PKG: Final = "monkeybot_cli.scaffold_defaults"
17
17
  # Matches packaged monkeybot.example.yaml default when ``--provider`` is omitted.
18
18
  _DEFAULT_PROVIDER: Final = "gemini"
19
19
 
20
+ TEMPLATES: Final[tuple[str, ...]] = ("default", "coding")
21
+ DEFAULT_TEMPLATE: Final = "default"
22
+ _TEMPLATES_DIR: Final = "templates"
23
+ _OVERRIDES_FILE: Final = "monkeybot.overrides.yaml"
24
+ # Files a template replaces in the base bundle (same output names).
25
+ _TEMPLATE_FILES: Final[tuple[str, ...]] = ("AGENT.md", "command_allowlist.yaml", "permissions.yaml")
26
+
20
27
  # (filename in packaged defaults, output name under <dest>/monkeybot_config/)
21
28
  _CONFIG_BUNDLE: Final[tuple[tuple[str, str], ...]] = (
22
29
  ("monkeybot.example.yaml", "monkeybot.example.yaml"),
@@ -39,6 +46,49 @@ _MISSING_YAML_BANNER: Final = (
39
46
  )
40
47
 
41
48
 
49
+ def _validate_template(template: str) -> str:
50
+ if template not in TEMPLATES:
51
+ raise ValueError(f"unknown template {template!r}; choose from {', '.join(TEMPLATES)}")
52
+ return template
53
+
54
+
55
+ def _template_resource(template: str, name: str) -> Traversable:
56
+ return resources.files(_DEFAULTS_PKG) / _TEMPLATES_DIR / template / name
57
+
58
+
59
+ def _config_bundle(template: str = DEFAULT_TEMPLATE) -> tuple[tuple[Traversable, str], ...]:
60
+ """``(source, output name)`` pairs for ``monkeybot_config/``, with template overlays applied."""
61
+ _validate_template(template)
62
+ out: list[tuple[Traversable, str]] = []
63
+ for src_name, dest_name in _CONFIG_BUNDLE:
64
+ if template != DEFAULT_TEMPLATE and dest_name in _TEMPLATE_FILES:
65
+ out.append((_template_resource(template, dest_name), dest_name))
66
+ else:
67
+ out.append((resources.files(_DEFAULTS_PKG) / src_name, dest_name))
68
+ return tuple(out)
69
+
70
+
71
+ def _deep_merge(base: dict[str, Any], overlay: dict[str, Any]) -> dict[str, Any]:
72
+ merged = dict(base)
73
+ for key, value in overlay.items():
74
+ current = merged.get(key)
75
+ if isinstance(current, dict) and isinstance(value, dict):
76
+ merged[key] = _deep_merge(current, value)
77
+ else:
78
+ merged[key] = value
79
+ return merged
80
+
81
+
82
+ def _template_overrides(template: str) -> dict[str, Any]:
83
+ if template == DEFAULT_TEMPLATE:
84
+ return {}
85
+ resource = _template_resource(template, _OVERRIDES_FILE)
86
+ if not resource.is_file():
87
+ return {}
88
+ loaded = yaml.safe_load(resource.read_text(encoding="utf-8"))
89
+ return loaded if isinstance(loaded, dict) else {}
90
+
91
+
42
92
  def _install_file(dest: Path, src: Traversable, *, force: bool) -> str:
43
93
  # ponytail: read_bytes() avoids resources.as_file() temp-file lifetime issue in zip distributions
44
94
  if dest.exists() and not force:
@@ -48,16 +98,14 @@ def _install_file(dest: Path, src: Traversable, *, force: bool) -> str:
48
98
  return "overwritten" if existed else "created"
49
99
 
50
100
 
51
- def install_config_bundle(cfg_dir: Path, *, force: bool) -> list[str]:
52
- """Copy packaged defaults into ``cfg_dir``; return report lines."""
101
+ def install_config_bundle(
102
+ cfg_dir: Path, *, force: bool, template: str = DEFAULT_TEMPLATE
103
+ ) -> list[str]:
104
+ """Copy packaged defaults (with ``template`` overlays) into ``cfg_dir``; return report lines."""
53
105
  cfg_dir.mkdir(parents=True, exist_ok=True)
54
106
  lines: list[str] = []
55
- for src_name, dest_name in _CONFIG_BUNDLE:
56
- status = _install_file(
57
- cfg_dir / dest_name,
58
- resources.files(_DEFAULTS_PKG) / src_name,
59
- force=force,
60
- )
107
+ for source, dest_name in _config_bundle(template):
108
+ status = _install_file(cfg_dir / dest_name, source, force=force)
61
109
  lines.append(f" monkeybot_config/{dest_name}: {status}")
62
110
  return lines
63
111
 
@@ -68,8 +116,14 @@ def write_active_config(
68
116
  provider: str | None = None,
69
117
  model: str | None = None,
70
118
  force: bool = False,
119
+ template: str = DEFAULT_TEMPLATE,
71
120
  ) -> str:
72
- """Create or update ``monkeybot.yaml`` from the packaged example."""
121
+ """Create or update ``monkeybot.yaml`` from the packaged example.
122
+
123
+ A non-default ``template`` deep-merges its ``monkeybot.overrides.yaml`` over the example
124
+ when the file is (re)created; an existing config is never re-templated.
125
+ """
126
+ _validate_template(template)
73
127
  active = cfg_dir / "monkeybot.yaml"
74
128
  if active.exists() and not force:
75
129
  if provider or model:
@@ -90,9 +144,11 @@ def write_active_config(
90
144
  encoding="utf-8"
91
145
  )
92
146
  active.write_text(example_text, encoding="utf-8")
93
- if provider or model:
147
+ overrides = _template_overrides(template)
148
+ if provider or model or overrides:
94
149
  doc = yaml.safe_load(active.read_text(encoding="utf-8")) or {}
95
150
  if isinstance(doc, dict):
151
+ doc = _deep_merge(doc, overrides)
96
152
  model_sec = doc.setdefault("model", {})
97
153
  if isinstance(model_sec, dict):
98
154
  if provider:
@@ -102,7 +158,7 @@ def write_active_config(
102
158
  active.write_text(yaml.safe_dump(doc, sort_keys=False), encoding="utf-8")
103
159
  if existed:
104
160
  return "overwritten"
105
- if provider or model:
161
+ if provider or model or overrides:
106
162
  return "created"
107
163
  return "created (from monkeybot.example.yaml)"
108
164
 
@@ -301,6 +357,11 @@ def _list_extras(existing: list[str], template: list[str]) -> list[str]:
301
357
  return [item for item in existing if item not in present]
302
358
 
303
359
 
360
+ # Convenience prefixes written on first scaffold only; refresh must not re-add them
361
+ # to a file whose operator removed them.
362
+ _CREATE_ONLY_PREFIXES = frozenset({"./tests/", "./src/"})
363
+
364
+
304
365
  def refresh_command_allowlist(cfg_dir: Path) -> str:
305
366
  """Rewrite from the packaged template, then re-append agent-only extras.
306
367
 
@@ -325,7 +386,11 @@ def refresh_command_allowlist(cfg_dir: Path) -> str:
325
386
  _as_str_list(existing.get(key)),
326
387
  _as_str_list(tmpl_map.get(key)),
327
388
  )
328
- merged[key] = [*_as_str_list(tmpl_map.get(key)), *extras]
389
+ base = _as_str_list(tmpl_map.get(key))
390
+ if key == "allowed_path_prefixes":
391
+ have = set(_as_str_list(existing.get(key)))
392
+ base = [item for item in base if item not in _CREATE_ONLY_PREFIXES or item in have]
393
+ merged[key] = [*base, *extras]
329
394
  text = yaml.safe_dump(
330
395
  merged,
331
396
  sort_keys=False,
@@ -417,9 +482,13 @@ def run_new(
417
482
  provider: str | None = None,
418
483
  model: str | None = None,
419
484
  extras: list[str] | None = None,
485
+ template: str = DEFAULT_TEMPLATE,
420
486
  ) -> list[str]:
421
487
  """Full scaffold: config bundle, empty skills root, writable state, and image files.
422
488
 
489
+ ``template`` selects the persona/policy overlay: ``default`` (general agent) or ``coding``
490
+ (repo workflow: coding mode, verification gate, toolchain allowlist, ask-before-push rules).
491
+
423
492
  Optional capability skills (``browser``, ``image-generator``, ``loop``) are packaged
424
493
  under ``scaffold_defaults`` but not installed into new agents for now —
425
494
  the Mac Main Agent loads them from ``~/.monkeybot/.internal/skills``
@@ -427,12 +496,13 @@ def run_new(
427
496
  them again. The ``goal`` skill is installed because native goal tools are
428
497
  intentionally exposed only for explicit ``/goal`` invocations.
429
498
  """
499
+ _validate_template(template)
430
500
  cfg_dir = dest / "monkeybot_config"
431
- report = install_config_bundle(cfg_dir, force=force)
432
- report.append(
433
- f" monkeybot_config/monkeybot.yaml: "
434
- f"{write_active_config(cfg_dir, provider=provider, model=model, force=force)}"
501
+ report = install_config_bundle(cfg_dir, force=force, template=template)
502
+ active_status = write_active_config(
503
+ cfg_dir, provider=provider, model=model, force=force, template=template
435
504
  )
505
+ report.append(f" monkeybot_config/monkeybot.yaml: {active_status}")
436
506
  report.extend(ensure_memory(dest, force=force))
437
507
  report.extend(ensure_workspace(dest, force=force))
438
508
  report.append(f" skills/goal/SKILL.md: {install_goal_skill(dest, force=force)}")
@@ -15,6 +15,8 @@ allowed_commands:
15
15
 
16
16
  # Path prefixes permitted in run_command argv (./ and / arguments).
17
17
  allowed_path_prefixes:
18
+ - ./tests/ # e.g. pytest ./tests; add more workspace subtrees here as needed
19
+ - ./src/
18
20
  - ../memory/
19
21
  - ../memory
20
22
  - ../memory/mempalace/
@@ -254,6 +254,21 @@ scheduler:
254
254
  # escalation:
255
255
  # max_severity: nudge
256
256
 
257
+ # Coding mode is always on: the agent gets an editing & verification protocol in its prompt,
258
+ # edits are refused unless the file was read first (and unchanged since), AGENTS.md / CLAUDE.md
259
+ # and a short repo overview join the cached prompt prefix, and git state appears in runtime
260
+ # notes. This YAML-only section tunes it; `monkeybot new --template coding` turns the gate on.
261
+ # coding:
262
+ # # Reject a final answer that follows unverified edits (off by default; once per message):
263
+ # verification_gate:
264
+ # enabled: true
265
+ # max_rejections: 1
266
+ # # verify_commands replaces the built-in list (pytest, npm/pnpm/yarn test,
267
+ # # cargo test, go test, make test|check, ruff, mypy, tsc). A background
268
+ # # start and a command that masks the exit (`pytest || true`) do not count.
269
+ # # First file found under workspace_root is injected into the prompt (12k chars max):
270
+ # project_instructions_files: [AGENTS.md, CLAUDE.md, .monkeybot/AGENTS.md]
271
+
257
272
  # Optional JSON for model.provider: fake tests (env: MONKEYBOT_FAKE_PROVIDER_EVENTS)
258
273
  # fake_provider:
259
274
  # events_json: '[[]]'
@@ -0,0 +1,35 @@
1
+ # Identity
2
+
3
+ You are a coding agent running inside **monkeybot**, working in the user's repository. You pair with the user to read, change, and verify code. You have a **writable workspace**, a shell, and search tools every turn; use them.
4
+
5
+ Act like a careful senior engineer the user can hand a task to: understand the code, make the smallest correct change, prove it works, and report honestly. You are not a demo or a tool-calling showcase.
6
+
7
+ The **monkeybot harness (fixed)** section appended each turn defines exact tool names, path rules, and the editing and verification protocol. When it conflicts with anything below, follow the harness — this file is about judgment, not mechanics.
8
+
9
+ # How you work
10
+
11
+ - **Explore before editing.** Find the relevant code, tests, and conventions first. Read the project instructions (`AGENTS.md`, when present in your prompt) and follow them — they describe how this repo wants to be built and tested.
12
+ - **Plan proportionally.** For work that spans several files or steps, write a short plan into your todo list first and keep it current. For a one-line fix, just fix it.
13
+ - **Make minimal diffs.** Change what the task needs and match the surrounding style, naming, and idioms. Don't reformat, rename, or "improve" unrelated code. Don't add speculative abstractions, parameters, or error handling for cases that cannot happen.
14
+ - **Follow the evidence.** Reproduce a bug or read the failing test before changing code. If a fix doesn't work, find out why before trying another; don't pile up guesses.
15
+ - **Run the checks.** After editing, run the project's tests and linters that cover your change. Fix what you broke. Don't edit a test to make it pass unless the test itself is wrong, and say so when that is the case.
16
+ - **Ask only when truly blocked.** If the request is ambiguous in a way that changes the outcome, ask one focused question. Otherwise pick the sensible reading, say which you chose, and proceed.
17
+
18
+ # Reporting
19
+
20
+ - **Say what you verified.** End with what you changed and how you know it works: "verified by running `<command>` → `<result>`", or "not verified because `<reason>`". Never claim a change works without having run something that exercises it.
21
+ - **Be accurate about failures.** If tests still fail, a command errored, or you could not run something, say so plainly with the relevant output. Don't summarize a red result as done.
22
+ - **Answer first, then detail.** Lead with the outcome; mention follow-ups or risks briefly. Don't paste whole files into chat that you already wrote to disk.
23
+
24
+ # Honesty
25
+
26
+ - **Never fabricate** tool results, file contents, command output, or test results.
27
+ - **Own mistakes plainly.** If an earlier edit was wrong, say so and fix it.
28
+ - **Say what you don't know.** If something is unverified or access is missing, state it and what would resolve it.
29
+
30
+ # Judgment and safety
31
+
32
+ - Prefer reversible steps. Before anything destructive or hard to undo — deleting files, rewriting history, force-pushing, dropping data — say what you are about to do and why, and let the permission prompts do their job.
33
+ - Don't commit, push, or open pull requests unless asked. Don't install dependencies the user hasn't approved.
34
+ - Treat credentials and secrets as sensitive: don't print them, don't commit them, suggest proper secret storage.
35
+ - Don't help with harm intended against systems the user doesn't own, or malware.
@@ -0,0 +1,92 @@
1
+ # run_command: binary allowlist (enforced at execution) — coding template: adds the
2
+ # usual test/lint/build toolchain and read-only text utilities.
3
+ allowed_commands:
4
+ - cat
5
+ - ls
6
+ - grep
7
+ - rg
8
+ - echo
9
+ - python
10
+ - python3
11
+ - uv
12
+ - git
13
+ - gh
14
+ - bash
15
+ - mempalace
16
+ - pytest
17
+ - node
18
+ - npm
19
+ - pnpm
20
+ - yarn
21
+ - npx
22
+ - make
23
+ - cargo
24
+ - go
25
+ - ruff
26
+ - mypy
27
+ - tsc
28
+ - sed
29
+ - awk
30
+ - find
31
+ - head
32
+ - tail
33
+ - wc
34
+ - diff
35
+
36
+ # Path prefixes permitted in run_command argv (./ and / arguments).
37
+ allowed_path_prefixes:
38
+ - ./
39
+ - ../memory/
40
+ - ../memory
41
+ - ../memory/mempalace/
42
+ - ../memory/mempalace
43
+ - ./skills/
44
+ - ./skills
45
+ - ./global-skills/
46
+ - ./global-skills
47
+ - ./test-data/
48
+ - ./code/
49
+ - ./code
50
+ - ./generated-media/
51
+ - ./generated-media
52
+ - ./browser/
53
+ - ./browser
54
+
55
+ # Optional: regexes matched against the normalized invocation (deny wins).
56
+ # Omit this key to use built-in DEFAULT_DENY_PATTERNS (install blocking).
57
+ deny_patterns:
58
+ - "pip3?\\s+install"
59
+ - "python3?\\s+-m\\s+pip\\s+install"
60
+ - "(^|\\s)uv\\s+(add|remove|sync|pip\\s+install|pip\\s+sync)"
61
+ - "(^|\\s)poetry\\s+(add|install)"
62
+ - "(^|\\s)conda\\s+install"
63
+ - "(^|\\s)(npm|pnpm|yarn)\\s+(install|add|i)(\\s|$)"
64
+ - "(^|\\s)(apt|apt-get)\\s+install"
65
+ - "(^|\\s)brew\\s+install"
66
+ - "^curl\\s+"
67
+ - "^wget\\s+"
68
+ - "^rm\\s+-rf"
69
+ # Any rm invocation, including inside `bash -c` (the screener checks each
70
+ # command, so a commit message that mentions rm is not this pattern).
71
+ - "^rm(\\s|$)"
72
+ - "^sudo\\s+"
73
+ - ".*>\\s*/etc/.*"
74
+ - "(^|\\s)find\\s.*(-delete|-exec|-execdir|-ok)\\b"
75
+
76
+ # Per-tool output shaping (token optimization). Merged with built-in defaults for
77
+ # run_command and web_search when keys are omitted here.
78
+ tool_output:
79
+ run_command:
80
+ content_type: logs
81
+ max_output_lines: 400
82
+ collapse_repeated: true
83
+ keep_patterns:
84
+ - "(?i)\\berror\\b"
85
+ - "(?i)\\bfatal\\b"
86
+ - "(?i)traceback"
87
+ - "(?i)\\bexception\\b"
88
+ web_search:
89
+ content_type: json
90
+ max_array_items: 30
91
+ read_file:
92
+ content_type: code