monkeybot 3.5.0__tar.gz → 3.6.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 (760) hide show
  1. {monkeybot-3.5.0 → monkeybot-3.6.0}/CHANGELOG.md +12 -0
  2. {monkeybot-3.5.0 → monkeybot-3.6.0}/PKG-INFO +1 -1
  3. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_session.py +36 -1
  4. {monkeybot-3.5.0 → monkeybot-3.6.0}/pyproject.toml +1 -1
  5. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/__init__.py +26 -0
  6. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/events.py +32 -0
  7. monkeybot-3.6.0/src/monkeybot/core/tools/ask_user.py +75 -0
  8. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/core_tool_executor.py +27 -0
  9. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/models.py +6 -0
  10. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/routes.py +39 -0
  11. monkeybot-3.6.0/tests/core/test_ask_user.py +61 -0
  12. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_context.py +1 -0
  13. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_events.py +11 -0
  14. {monkeybot-3.5.0 → monkeybot-3.6.0}/.dockerignore +0 -0
  15. {monkeybot-3.5.0 → monkeybot-3.6.0}/.github/workflows/ci.yml +0 -0
  16. {monkeybot-3.5.0 → monkeybot-3.6.0}/.github/workflows/live-eval-smoke.yml +0 -0
  17. {monkeybot-3.5.0 → monkeybot-3.6.0}/.github/workflows/prepare-release.yml +0 -0
  18. {monkeybot-3.5.0 → monkeybot-3.6.0}/.github/workflows/publish-release.yml +0 -0
  19. {monkeybot-3.5.0 → monkeybot-3.6.0}/.gitignore +0 -0
  20. {monkeybot-3.5.0 → monkeybot-3.6.0}/.pre-commit-config.yaml +0 -0
  21. {monkeybot-3.5.0 → monkeybot-3.6.0}/BACKLOG.md +0 -0
  22. {monkeybot-3.5.0 → monkeybot-3.6.0}/CONTRIBUTING.md +0 -0
  23. {monkeybot-3.5.0 → monkeybot-3.6.0}/LICENSE +0 -0
  24. {monkeybot-3.5.0 → monkeybot-3.6.0}/README.md +0 -0
  25. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/pyproject.toml +0 -0
  26. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/skills/monkeybot/SKILL.md +0 -0
  27. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
  28. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/__init__.py +0 -0
  29. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
  30. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
  31. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
  32. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
  33. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
  34. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_tool_display.py +0 -0
  35. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_tui.py +0 -0
  36. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
  37. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
  38. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
  39. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
  40. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
  41. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
  42. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
  43. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
  44. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
  45. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
  46. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/compat.py +0 -0
  47. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
  48. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
  49. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
  50. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
  51. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/main.py +0 -0
  52. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
  53. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/output.py +0 -0
  54. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
  55. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/providers.py +0 -0
  56. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
  57. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
  58. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
  59. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
  60. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
  61. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
  62. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
  63. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
  64. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
  65. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
  66. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold.py +0 -0
  67. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
  68. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
  69. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
  70. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +0 -0
  71. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -0
  72. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
  73. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
  74. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/goal/SKILL.md +0 -0
  75. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
  76. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
  77. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
  78. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
  79. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +0 -0
  80. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
  81. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
  82. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
  83. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
  84. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
  85. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_continue.py +0 -0
  86. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_e2e.py +0 -0
  87. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_errors.py +0 -0
  88. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_file_index.py +0 -0
  89. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_grounding.py +0 -0
  90. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_local_shell.py +0 -0
  91. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_renderer_parity.py +0 -0
  92. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_session.py +0 -0
  93. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_status_bar.py +0 -0
  94. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_theme.py +0 -0
  95. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_tool_display.py +0 -0
  96. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_chat_tui.py +0 -0
  97. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_cli.py +0 -0
  98. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_config_resolve.py +0 -0
  99. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_doctor.py +0 -0
  100. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_extras_catalog.py +0 -0
  101. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_gateway_health.py +0 -0
  102. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
  103. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_realtime_session_controller.py +0 -0
  104. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_run_cmd.py +0 -0
  105. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_runtime_python.py +0 -0
  106. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_scaffold.py +0 -0
  107. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/tests/test_terminal_markdown.py +0 -0
  108. {monkeybot-3.5.0 → monkeybot-3.6.0}/cli/uv.lock +0 -0
  109. {monkeybot-3.5.0 → monkeybot-3.6.0}/docker/Dockerfile +0 -0
  110. {monkeybot-3.5.0 → monkeybot-3.6.0}/docker/demo-model.yaml +0 -0
  111. {monkeybot-3.5.0 → monkeybot-3.6.0}/docker/demo.yaml +0 -0
  112. {monkeybot-3.5.0 → monkeybot-3.6.0}/docker/docker-compose.sandbox.yml +0 -0
  113. {monkeybot-3.5.0 → monkeybot-3.6.0}/docker/opensandbox.docker.toml +0 -0
  114. {monkeybot-3.5.0 → monkeybot-3.6.0}/docker/sandbox.Dockerfile +0 -0
  115. {monkeybot-3.5.0 → monkeybot-3.6.0}/docker-compose.yml +0 -0
  116. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/agent-layout.md +0 -0
  117. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/assets/logo.png +0 -0
  118. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/browser-mcp-perf-baseline.md +0 -0
  119. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/browser-mcp-performance-plan.md +0 -0
  120. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/browser-mcp.md +0 -0
  121. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/cloud-deployment-design.md +0 -0
  122. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/deploy-aws-agentcore.md +0 -0
  123. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/deploy-pattern-a-container.md +0 -0
  124. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/deploy-pattern-b-serverless.md +0 -0
  125. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
  126. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/deploy-pattern-d-realtime.md +0 -0
  127. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/features.md +0 -0
  128. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/getting-started.md +0 -0
  129. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/knowledge-layer-fixes.md +0 -0
  130. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/live-evals.md +0 -0
  131. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/mcp.md +0 -0
  132. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/memory-graph-split-plan.md +0 -0
  133. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/migrations/agent-scope-namespacing.md +0 -0
  134. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/migrations/memory-outbox.sql +0 -0
  135. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/observability-runbook.md +0 -0
  136. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/ollama-local.md +0 -0
  137. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/otel-collector.example.yaml +0 -0
  138. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/progressive-loop-tools.md +0 -0
  139. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/progressive-mcp-tools.md +0 -0
  140. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/skills.md +0 -0
  141. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/spill-dynamic-design.md +0 -0
  142. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/sse-gateway-ui.md +0 -0
  143. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/verifier-agent-design.md +0 -0
  144. {monkeybot-3.5.0 → monkeybot-3.6.0}/docs/workspace-index-design.md +0 -0
  145. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/TEST_COVERAGE.md +0 -0
  146. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/assertions.py +0 -0
  147. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/baselines/smoke.json +0 -0
  148. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/baselines/smoke.md +0 -0
  149. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/diff.py +0 -0
  150. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/eval_config.yaml +0 -0
  151. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/models.py +0 -0
  152. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/persistence.py +0 -0
  153. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/report.py +0 -0
  154. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/runner.py +0 -0
  155. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenario_loader.py +0 -0
  156. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/context/summarization_trigger.yaml +0 -0
  157. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/drift/declares_done.yaml +0 -0
  158. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/drift/path_constraint.yaml +0 -0
  159. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/drift/preempt.yaml +0 -0
  160. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/drift/repeat_correction.yaml +0 -0
  161. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/drift/supersession.yaml +0 -0
  162. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/mcp/get_prompt.yaml +0 -0
  163. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/mcp/list_resources.yaml +0 -0
  164. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/mcp/tool_invoke.yaml +0 -0
  165. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/memory/recall_cross_session.yaml +0 -0
  166. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/memory/recall_single_session.yaml +0 -0
  167. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/multi_turn/task_tracking.yaml +0 -0
  168. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/skills/skill_invocation.yaml +0 -0
  169. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/subagents/dispatch_complete.yaml +0 -0
  170. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/tools/core_read.yaml +0 -0
  171. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/tools/core_read_error.yaml +0 -0
  172. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/tools/core_run_command.yaml +0 -0
  173. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +0 -0
  174. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scenarios/tools/core_write.yaml +0 -0
  175. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/scorer.py +0 -0
  176. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/.env.example +0 -0
  177. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/.gitignore +0 -0
  178. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
  179. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
  180. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
  181. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
  182. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +0 -0
  183. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -0
  184. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
  185. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/pyproject.toml +0 -0
  186. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
  187. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/uv.lock +0 -0
  188. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
  189. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
  190. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/suites/drift.yaml +0 -0
  191. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/suites/smoke.yaml +0 -0
  192. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/test_assertions.py +0 -0
  193. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/test_diff.py +0 -0
  194. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/test_judge.py +0 -0
  195. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/test_report.py +0 -0
  196. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/test_runner_sse.py +0 -0
  197. {monkeybot-3.5.0 → monkeybot-3.6.0}/evals/test_scorer.py +0 -0
  198. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/README.md +0 -0
  199. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/agentcore/handler.py +0 -0
  200. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/agentcore/runtime_app.py +0 -0
  201. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/agentengine/handler.py +0 -0
  202. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/cloud-functions/main.py +0 -0
  203. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/lambda/handler.py +0 -0
  204. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/ollama/PrefixStable.Modelfile +0 -0
  205. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/skills/browser/SKILL.md +0 -0
  206. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
  207. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/skills/diagnostics/README.md +0 -0
  208. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/skills/diagnostics/SKILL.md +0 -0
  209. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/skills/diagnostics/__init__.py +0 -0
  210. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/skills/diagnostics/diagnostics.py +0 -0
  211. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/skills/image-generator/SKILL.md +0 -0
  212. {monkeybot-3.5.0 → monkeybot-3.6.0}/examples/skills/image-generator/generate_image.py +0 -0
  213. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/pyproject.toml +0 -0
  214. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
  215. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
  216. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
  217. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
  218. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
  219. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
  220. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/app.py +0 -0
  221. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
  222. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
  223. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
  224. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/backend.py +0 -0
  225. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/chat_scope.py +0 -0
  226. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
  227. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +0 -0
  228. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/login.py +0 -0
  229. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
  230. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
  231. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
  232. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
  233. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
  234. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
  235. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/server.py +0 -0
  236. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +0 -0
  237. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +0 -0
  238. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +0 -0
  239. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
  240. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
  241. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
  242. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
  243. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
  244. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
  245. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +0 -0
  246. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
  247. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
  248. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
  249. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
  250. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
  251. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
  252. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +0 -0
  253. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/integration/conftest.py +0 -0
  254. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
  255. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
  256. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
  257. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +0 -0
  258. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
  259. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
  260. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
  261. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_act.py +0 -0
  262. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_agentcore.py +0 -0
  263. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_chat_scope.py +0 -0
  264. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
  265. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_fill_form.py +0 -0
  266. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +0 -0
  267. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_indexed_tools.py +0 -0
  268. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_observe.py +0 -0
  269. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_observe_after.py +0 -0
  270. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_perf.py +0 -0
  271. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_playbook_flows.py +0 -0
  272. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
  273. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
  274. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
  275. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_server_shutdown.py +0 -0
  276. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_tabs.py +0 -0
  277. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_tool_surface.py +0 -0
  278. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/tests/test_wait_tools.py +0 -0
  279. {monkeybot-3.5.0 → monkeybot-3.6.0}/integrations/browser-mcp/uv.lock +0 -0
  280. {monkeybot-3.5.0 → monkeybot-3.6.0}/pytest.ini +0 -0
  281. {monkeybot-3.5.0 → monkeybot-3.6.0}/scripts/create_schema.py +0 -0
  282. {monkeybot-3.5.0 → monkeybot-3.6.0}/scripts/precommit-pytest.sh +0 -0
  283. {monkeybot-3.5.0 → monkeybot-3.6.0}/scripts/release.py +0 -0
  284. {monkeybot-3.5.0 → monkeybot-3.6.0}/scripts/smoke_global_cli.sh +0 -0
  285. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/__init__.py +0 -0
  286. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/cli/__init__.py +0 -0
  287. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/cli/__main__.py +0 -0
  288. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/cli/audio_io.py +0 -0
  289. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/cli/gateway_manager.py +0 -0
  290. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/cli/main.py +0 -0
  291. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/cli/push_to_talk.py +0 -0
  292. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/cli/realtime_client.py +0 -0
  293. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/computer/__init__.py +0 -0
  294. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/computer/approvals.py +0 -0
  295. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/computer/permissions.py +0 -0
  296. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/computer/safety.py +0 -0
  297. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/computer/tools.py +0 -0
  298. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/__init__.py +0 -0
  299. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/__init__.py +0 -0
  300. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/catalog.py +0 -0
  301. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/config.py +0 -0
  302. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/freeze.py +0 -0
  303. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/image_preview.py +0 -0
  304. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/resolve.py +0 -0
  305. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/store.py +0 -0
  306. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/text.py +0 -0
  307. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/attachments/tools.py +0 -0
  308. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/bootstrap.py +0 -0
  309. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/config/__init__.py +0 -0
  310. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/config/realtime_config.py +0 -0
  311. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/config/runtime_env.py +0 -0
  312. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/config/settings.py +0 -0
  313. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/config/snapshot.py +0 -0
  314. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/config/validation.py +0 -0
  315. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
  316. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/campaign_context.py +0 -0
  317. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/common.py +0 -0
  318. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/epoch.py +0 -0
  319. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/secret_egress.py +0 -0
  320. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/slash_skills.py +0 -0
  321. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
  322. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/tool_result_ingress.py +0 -0
  323. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/context/tool_shapers.py +0 -0
  324. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/goals/__init__.py +0 -0
  325. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/goals/service.py +0 -0
  326. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/hooks/__init__.py +0 -0
  327. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/__init__.py +0 -0
  328. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/captions.py +0 -0
  329. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/chunking.py +0 -0
  330. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/config.py +0 -0
  331. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/embeddings/__init__.py +0 -0
  332. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/embeddings/base.py +0 -0
  333. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/embeddings/factory.py +0 -0
  334. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/embeddings/gemini.py +0 -0
  335. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/embeddings/nvidia.py +0 -0
  336. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/embeddings/openai_compat.py +0 -0
  337. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/embeddings/sanitize.py +0 -0
  338. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/evidence_guard.py +0 -0
  339. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/extractors.py +0 -0
  340. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/fusion.py +0 -0
  341. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/hook.py +0 -0
  342. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/indexer.py +0 -0
  343. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/links.py +0 -0
  344. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/salience.py +0 -0
  345. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/sqlite_index.py +0 -0
  346. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/subsystem.py +0 -0
  347. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/tool.py +0 -0
  348. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/knowledge/types.py +0 -0
  349. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/layout.py +0 -0
  350. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/llm/__init__.py +0 -0
  351. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/llm/provider.py +0 -0
  352. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
  353. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/llm/usage.py +0 -0
  354. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/lockfile_names.py +0 -0
  355. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/logging_utils.py +0 -0
  356. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/mcp/__init__.py +0 -0
  357. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/mcp/mcp_client.py +0 -0
  358. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
  359. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/__init__.py +0 -0
  360. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/config.py +0 -0
  361. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/hook.py +0 -0
  362. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/ids.py +0 -0
  363. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/ingest.py +0 -0
  364. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
  365. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/observability.py +0 -0
  366. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/outbox.py +0 -0
  367. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/palace.py +0 -0
  368. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/subsystem.py +0 -0
  369. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/uri.py +0 -0
  370. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/memory/writer.py +0 -0
  371. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/messages/__init__.py +0 -0
  372. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
  373. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/messages/tool_integrity.py +0 -0
  374. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/messages/transform_context.py +0 -0
  375. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/path_safety.py +0 -0
  376. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/__init__.py +0 -0
  377. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/backends.py +0 -0
  378. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/db.py +0 -0
  379. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
  380. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/errors.py +0 -0
  381. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
  382. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/firestore.py +0 -0
  383. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
  384. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/goal_ledger.py +0 -0
  385. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/history.py +0 -0
  386. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/postgres.py +0 -0
  387. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/runs.py +0 -0
  388. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
  389. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
  390. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/sqlite.py +0 -0
  391. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/sqlite_backend.py +0 -0
  392. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/sqlite_vector.py +0 -0
  393. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/thread_summary.py +0 -0
  394. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/transcript.py +0 -0
  395. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/usage.py +0 -0
  396. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
  397. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/prompts/__init__.py +0 -0
  398. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/prompts/harness_prompt.py +0 -0
  399. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/prompts/headings.py +0 -0
  400. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/prompts/prompt.py +0 -0
  401. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/__init__.py +0 -0
  402. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/context_budget.py +0 -0
  403. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/doom_loop.py +0 -0
  404. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/history_compaction.py +0 -0
  405. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/input_admission.py +0 -0
  406. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/loop.py +0 -0
  407. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/loop_hooks.py +0 -0
  408. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
  409. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
  410. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/loop_usage.py +0 -0
  411. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
  412. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/realtime_loop.py +0 -0
  413. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
  414. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/tool_dispatch.py +0 -0
  415. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/turn_loop.py +0 -0
  416. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
  417. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/subagents/__init__.py +0 -0
  418. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
  419. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
  420. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/subagents/subagent_worker.py +0 -0
  421. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
  422. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/subprocess_groups.py +0 -0
  423. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/testing/__init__.py +0 -0
  424. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
  425. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
  426. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/__init__.py +0 -0
  427. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
  428. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/grant_store.py +0 -0
  429. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/inspector.py +0 -0
  430. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
  431. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/patch.py +0 -0
  432. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/path_grant_inspector.py +0 -0
  433. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/permission.py +0 -0
  434. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/sandbox_executor.py +0 -0
  435. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/spill_inventory.py +0 -0
  436. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/terminal.py +0 -0
  437. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
  438. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
  439. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/tool_kind.py +0 -0
  440. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/types.py +0 -0
  441. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/tools/workspace_service.py +0 -0
  442. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/types/__init__.py +0 -0
  443. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/types/content_blocks.py +0 -0
  444. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/types/interfaces.py +0 -0
  445. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/types/types_tools.py +0 -0
  446. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/__init__.py +0 -0
  447. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/actuator.py +0 -0
  448. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/binding.py +0 -0
  449. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/classify.py +0 -0
  450. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/inspector.py +0 -0
  451. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/intervention.py +0 -0
  452. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/judge.py +0 -0
  453. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/ledger.py +0 -0
  454. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/mailbox.py +0 -0
  455. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/match.py +0 -0
  456. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/port.py +0 -0
  457. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/severity.py +0 -0
  458. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/verifier/tracker.py +0 -0
  459. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/workspace/__init__.py +0 -0
  460. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/workspace/factory.py +0 -0
  461. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/workspace/gcs.py +0 -0
  462. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/workspace/local.py +0 -0
  463. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/workspace/protocol.py +0 -0
  464. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/workspace/s3.py +0 -0
  465. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/core/workspace_layout.py +0 -0
  466. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/__init__.py +0 -0
  467. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/bootstrap.py +0 -0
  468. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/main.py +0 -0
  469. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
  470. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
  471. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/app.py +0 -0
  472. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
  473. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
  474. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
  475. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/manager.py +0 -0
  476. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
  477. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/routes.py +0 -0
  478. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/session.py +0 -0
  479. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
  480. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/realtime_main.py +0 -0
  481. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
  482. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/app.py +0 -0
  483. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/goal_routes.py +0 -0
  484. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
  485. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/reload.py +0 -0
  486. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
  487. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/request_storage.py +0 -0
  488. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
  489. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
  490. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/session_bus.py +0 -0
  491. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/sse.py +0 -0
  492. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
  493. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/observability/__init__.py +0 -0
  494. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/observability/_state.py +0 -0
  495. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/observability/instrumentation.py +0 -0
  496. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/observability/propagation.py +0 -0
  497. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/observability/spans.py +0 -0
  498. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/observability/sqlite_exporter.py +0 -0
  499. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/__init__.py +0 -0
  500. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
  501. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/_openai_compat.py +0 -0
  502. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/_utils.py +0 -0
  503. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/bedrock.py +0 -0
  504. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/claude.py +0 -0
  505. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/gemini.py +0 -0
  506. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/gemini_live.py +0 -0
  507. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/huggingface.py +0 -0
  508. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/model_capabilities.py +0 -0
  509. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/nvidia.py +0 -0
  510. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/ollama.py +0 -0
  511. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/openai.py +0 -0
  512. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/openrouter.py +0 -0
  513. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/pricing.py +0 -0
  514. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/request_budget.py +0 -0
  515. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/sampling.py +0 -0
  516. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/providers/vertex_claude.py +0 -0
  517. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/scaffold/__init__.py +0 -0
  518. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/scheduler/__init__.py +0 -0
  519. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/scheduler/__main__.py +0 -0
  520. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/scheduler/engine.py +0 -0
  521. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
  522. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/scheduler/interval.py +0 -0
  523. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/scheduler/tick_result.py +0 -0
  524. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/scheduler/worker.py +0 -0
  525. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/subagents/__init__.py +0 -0
  526. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
  527. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
  528. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/todo_list/__init__.py +0 -0
  529. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/todo_list/store.py +0 -0
  530. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/todo_list/tool.py +0 -0
  531. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/web_search/__init__.py +0 -0
  532. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
  533. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
  534. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
  535. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
  536. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/web_search/protocol.py +0 -0
  537. {monkeybot-3.5.0 → monkeybot-3.6.0}/src/monkeybot/web_search/tool.py +0 -0
  538. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/__init__.py +0 -0
  539. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/acceptance/test_observability_acceptance.py +0 -0
  540. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/cli/__init__.py +0 -0
  541. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/cli/test_gateway_manager.py +0 -0
  542. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/cli/test_main.py +0 -0
  543. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/cli/test_push_to_talk.py +0 -0
  544. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/cli/test_realtime_client.py +0 -0
  545. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/computer/__init__.py +0 -0
  546. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/computer/test_approvals.py +0 -0
  547. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/computer/test_computer_tools.py +0 -0
  548. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/computer/test_package_init.py +0 -0
  549. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/computer/test_path_policy.py +0 -0
  550. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/computer/test_permissions.py +0 -0
  551. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/computer/test_subagent_exclusion.py +0 -0
  552. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/computer/test_wiring.py +0 -0
  553. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/conftest.py +0 -0
  554. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/__init__.py +0 -0
  555. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
  556. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/memory/helpers.py +0 -0
  557. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/memory/in_memory_palace.py +0 -0
  558. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/memory/test_mempalace.py +0 -0
  559. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/memory/test_review_fixes.py +0 -0
  560. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_agent_layout.py +0 -0
  561. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_attachment_freeze.py +0 -0
  562. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_attachment_store.py +0 -0
  563. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_bootstrap.py +0 -0
  564. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_config_extensions.py +0 -0
  565. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_content_blocks.py +0 -0
  566. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_context_budget.py +0 -0
  567. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_context_epoch.py +0 -0
  568. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_core_tool_executor.py +0 -0
  569. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_doom_loop.py +0 -0
  570. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_durable_events.py +0 -0
  571. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_durable_runs.py +0 -0
  572. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_empty_completion.py +0 -0
  573. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_env_map_grep_gates.py +0 -0
  574. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_evidence_guard.py +0 -0
  575. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_firestore_history.py +0 -0
  576. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
  577. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_firestore_usage.py +0 -0
  578. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_fs_isolation.py +0 -0
  579. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_gemini_history_replay.py +0 -0
  580. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_goal_ledger.py +0 -0
  581. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_goal_persistence.py +0 -0
  582. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_goals.py +0 -0
  583. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_grant_store.py +0 -0
  584. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_harness_prompt.py +0 -0
  585. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_history.py +0 -0
  586. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_history_compaction_split.py +0 -0
  587. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_hooks.py +0 -0
  588. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_image_preview.py +0 -0
  589. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_input_admission.py +0 -0
  590. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_inspector.py +0 -0
  591. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_chunking.py +0 -0
  592. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_chunking_rank.py +0 -0
  593. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_config.py +0 -0
  594. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_embeddings.py +0 -0
  595. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_fts.py +0 -0
  596. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_fusion.py +0 -0
  597. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_fusion_ann.py +0 -0
  598. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_hook.py +0 -0
  599. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_indexer.py +0 -0
  600. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_links.py +0 -0
  601. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_media.py +0 -0
  602. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_salience.py +0 -0
  603. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_single_writer.py +0 -0
  604. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_subsystem.py +0 -0
  605. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_knowledge_vectors.py +0 -0
  606. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_layout.py +0 -0
  607. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_logging_utils.py +0 -0
  608. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_loop.py +0 -0
  609. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_loop_hooks.py +0 -0
  610. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_loop_observability.py +0 -0
  611. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_loop_transcript.py +0 -0
  612. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_mcp_client.py +0 -0
  613. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_memory_layout_migrate.py +0 -0
  614. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_message_pipeline.py +0 -0
  615. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_mocks_realtime_provider.py +0 -0
  616. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_patch.py +0 -0
  617. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_path_grant_inspector.py +0 -0
  618. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_path_safety.py +0 -0
  619. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_permission.py +0 -0
  620. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_pricing.py +0 -0
  621. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_progress_publish.py +0 -0
  622. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_progress_tracker.py +0 -0
  623. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_prompt.py +0 -0
  624. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_provider_contract.py +0 -0
  625. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_provider_stream_mapper.py +0 -0
  626. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_realtime_loop.py +0 -0
  627. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_replace_fuzzy.py +0 -0
  628. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_run_command_parse.py +0 -0
  629. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_runs.py +0 -0
  630. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_runtime_config_snapshot.py +0 -0
  631. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_runtime_env.py +0 -0
  632. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_sandbox_executor.py +0 -0
  633. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_scheduled_loops.py +0 -0
  634. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_secret_egress.py +0 -0
  635. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_session_turn_locks.py +0 -0
  636. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_settlement.py +0 -0
  637. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_slash_skills.py +0 -0
  638. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_spill_dynamic.py +0 -0
  639. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_spill_inventory.py +0 -0
  640. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_storage_backends.py +0 -0
  641. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_subagent_proto.py +0 -0
  642. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_subagent_trace_propagation.py +0 -0
  643. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_subagent_worker_paths.py +0 -0
  644. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_terminal.py +0 -0
  645. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_thread_summary_wire.py +0 -0
  646. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_tool_def_schema.py +0 -0
  647. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_tool_integrity.py +0 -0
  648. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_tool_result_ingress.py +0 -0
  649. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_tool_shapers.py +0 -0
  650. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_transcript.py +0 -0
  651. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_truncated_tool_batch.py +0 -0
  652. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_usage.py +0 -0
  653. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_usage_migration.py +0 -0
  654. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_utterance_buffer.py +0 -0
  655. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_verifier_binding.py +0 -0
  656. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_verifier_inspector.py +0 -0
  657. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_verifier_judge.py +0 -0
  658. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_verifier_mailbox_lifecycle.py +0 -0
  659. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_verifier_sticky_nudge.py +0 -0
  660. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_worker_pool.py +0 -0
  661. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_workspace_extra_read_roots.py +0 -0
  662. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_workspace_layout.py +0 -0
  663. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_workspace_symlinks.py +0 -0
  664. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/test_workspace_write_scope.py +0 -0
  665. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/workspace/test_factory.py +0 -0
  666. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/workspace/test_local_storage.py +0 -0
  667. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/core/workspace/test_protocol_contract.py +0 -0
  668. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/__init__.py +0 -0
  669. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/eval_hook.py +0 -0
  670. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenario_runner.py +0 -0
  671. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
  672. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
  673. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
  674. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
  675. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
  676. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
  677. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_read.yaml +0 -0
  678. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
  679. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
  680. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_search_knowledge.yaml +0 -0
  681. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
  682. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
  683. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
  684. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/tool_write.yaml +0 -0
  685. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
  686. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/test_agent_behavior.py +0 -0
  687. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/test_memory_knowledge_routing.py +0 -0
  688. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/evals/test_verifier_port.py +0 -0
  689. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/__init__.py +0 -0
  690. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/__init__.py +0 -0
  691. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/test_app.py +0 -0
  692. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/test_deps.py +0 -0
  693. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/test_guardrails.py +0 -0
  694. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/test_manager.py +0 -0
  695. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/test_metrics.py +0 -0
  696. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/test_routes_client_text.py +0 -0
  697. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/test_session.py +0 -0
  698. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/realtime/test_wire.py +0 -0
  699. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/sse/test_attachments.py +0 -0
  700. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/sse/test_config_reload.py +0 -0
  701. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/sse/test_create_session_model.py +0 -0
  702. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/sse/test_gateway_runtime.py +0 -0
  703. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/sse/test_routes.py +0 -0
  704. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
  705. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/sse/test_session_bus.py +0 -0
  706. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/sse/test_transcript_wiring.py +0 -0
  707. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/test_otel_fastapi.py +0 -0
  708. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/test_otel_lifespan.py +0 -0
  709. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
  710. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/test_realtime_main.py +0 -0
  711. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/test_resolve_provider.py +0 -0
  712. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/test_sse_events.py +0 -0
  713. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
  714. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/integration/__init__.py +0 -0
  715. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
  716. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/integration/test_observability_integration.py +0 -0
  717. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/integration/test_prompt_caching_integration.py +0 -0
  718. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/conftest.py +0 -0
  719. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_init.py +0 -0
  720. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_instrumentation.py +0 -0
  721. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_loop_hook_spans.py +0 -0
  722. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_propagation.py +0 -0
  723. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_span_contract.py +0 -0
  724. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_spans.py +0 -0
  725. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_sqlite_exporter.py +0 -0
  726. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_truncate.py +0 -0
  727. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/observability/test_turn_complete_trace.py +0 -0
  728. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/conftest.py +0 -0
  729. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_anthropic_cache.py +0 -0
  730. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_anthropic_history.py +0 -0
  731. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_bedrock_converse.py +0 -0
  732. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_bedrock_estimate.py +0 -0
  733. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_gemini_history.py +0 -0
  734. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_gemini_live.py +0 -0
  735. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_gemini_usage.py +0 -0
  736. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_huggingface.py +0 -0
  737. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_model_capabilities.py +0 -0
  738. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_nvidia.py +0 -0
  739. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_ollama.py +0 -0
  740. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_openai_byte_budget.py +0 -0
  741. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_openai_compat_usage.py +0 -0
  742. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_openai_history.py +0 -0
  743. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_pricing.py +0 -0
  744. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_request_budget.py +0 -0
  745. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
  746. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_sampling.py +0 -0
  747. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_sonnet5_sampling.py +0 -0
  748. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_source_grep_gates.py +0 -0
  749. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/providers/test_vertex_claude_history.py +0 -0
  750. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/scheduler/test_engine.py +0 -0
  751. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/scheduler/test_interval.py +0 -0
  752. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/skills/__init__.py +0 -0
  753. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/skills/test_generate_image_script.py +0 -0
  754. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/test_cold_start.py +0 -0
  755. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/test_packaging_config.py +0 -0
  756. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/test_release_script.py +0 -0
  757. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/todo_list/test_todo_list.py +0 -0
  758. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/web_search/__init__.py +0 -0
  759. {monkeybot-3.5.0 → monkeybot-3.6.0}/tests/web_search/test_web_search.py +0 -0
  760. {monkeybot-3.5.0 → monkeybot-3.6.0}/uv.lock +0 -0
@@ -6,6 +6,18 @@ the project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ### CLI
10
+
11
+ #### Added
12
+
13
+ - `monkeybot chat` prompts for an `ask_user` question and posts the reply to the gateway.
14
+
15
+ ## [core v3.6.0] - 2026-09-21
16
+
17
+ #### Added
18
+
19
+ - `ask_user` asks the user a question, with an optional list of two to six choices, and waits for the posted answer before the tool returns.
20
+
9
21
  ## [core v3.5.0] - 2026-09-20
10
22
 
11
23
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: monkeybot
3
- Version: 3.5.0
3
+ Version: 3.6.0
4
4
  Summary: monkeybot agent harness — FastAPI SSE gateway, owned loop, SQLite, and MCP.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -16,6 +16,7 @@ from typing import Any, Literal
16
16
  import httpx
17
17
  from monkeybot.core.runtime.events import (
18
18
  ActionRequiredEvent,
19
+ AskUserRequestEvent,
19
20
  AssistantDelta,
20
21
  ContextSummarized,
21
22
  ContextSummarizing,
@@ -41,7 +42,12 @@ HitlReaderFn = Callable[["HitlRequest"], Any] # async (HitlRequest) -> HitlAnsw
41
42
 
42
43
  HitlKind = Literal["confirm", "elicit", "frontend_unsupported"]
43
44
 
44
- _HITL_TYPES = (ToolConfirmationRequestEvent, ActionRequiredEvent, FrontendToolRequestEvent)
45
+ _HITL_TYPES = (
46
+ ToolConfirmationRequestEvent,
47
+ AskUserRequestEvent,
48
+ ActionRequiredEvent,
49
+ FrontendToolRequestEvent,
50
+ )
45
51
 
46
52
  _RECONNECT_INITIAL_DELAY = 0.5
47
53
  _RECONNECT_MAX_DELAY = 15.0
@@ -717,6 +723,9 @@ class ChatSessionController:
717
723
  if isinstance(evt, ToolConfirmationRequestEvent):
718
724
  await self._handle_tool_confirm(evt)
719
725
  return
726
+ if isinstance(evt, AskUserRequestEvent):
727
+ await self._handle_ask_user(evt)
728
+ return
720
729
  if isinstance(evt, ActionRequiredEvent):
721
730
  await self._handle_elicit(evt)
722
731
 
@@ -753,6 +762,32 @@ class ChatSessionController:
753
762
  if answer.cancelled or not ok:
754
763
  self._turn_abort.set()
755
764
 
765
+ async def _handle_ask_user(self, evt: AskUserRequestEvent) -> None:
766
+ assert self.session_id is not None
767
+ choices = "\n".join(f"- {choice}" for choice in evt.choices)
768
+ prompt = evt.question or "The agent asked a question."
769
+ if choices:
770
+ prompt = f"{prompt}\n{choices}"
771
+ answer = await self._await_hitl(
772
+ HitlRequest(
773
+ kind="elicit",
774
+ prompt=prompt,
775
+ tool_call_id=evt.tool_call_id,
776
+ tool_name="ask_user",
777
+ )
778
+ )
779
+ text = "" if answer.cancelled else answer.text.strip()
780
+ if not text:
781
+ self.abort_turn()
782
+ return
783
+ ok = await self._post_hitl(
784
+ f"{self.base}/sessions/{self.session_id}/ask-user/{evt.tool_call_id}",
785
+ {"answer": text},
786
+ label="Ask user",
787
+ )
788
+ if not ok:
789
+ self.abort_turn()
790
+
756
791
  async def _handle_elicit(self, evt: ActionRequiredEvent) -> None:
757
792
  assert self.session_id is not None
758
793
  payload = dict(evt.payload) if evt.payload else {}
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "monkeybot"
7
- version = "3.5.0"
7
+ version = "3.6.0"
8
8
  description = "monkeybot agent harness — FastAPI SSE gateway, owned loop, SQLite, and MCP."
9
9
  requires-python = ">=3.11"
10
10
  readme = "README.md"
@@ -691,6 +691,32 @@ def _core_tool_defs(
691
691
  "required": ["task"],
692
692
  }
693
693
  tools: list[ToolDef] = [
694
+ ToolDef(
695
+ "ask_user",
696
+ (
697
+ "Ask the user a question and wait for their answer. Call this when you "
698
+ "need a decision before you can continue. Pass choices when a short list "
699
+ "of answers would help. Call it once, then wait. Do not invent the answer."
700
+ ),
701
+ {
702
+ "type": "object",
703
+ "properties": {
704
+ "question": {
705
+ "type": "string",
706
+ "minLength": 1,
707
+ "description": "The question to show the user.",
708
+ },
709
+ "choices": {
710
+ "type": "array",
711
+ "minItems": 2,
712
+ "maxItems": 6,
713
+ "items": {"type": "string", "minLength": 1},
714
+ "description": "Optional distinct answers the user can pick.",
715
+ },
716
+ },
717
+ "required": ["question"],
718
+ },
719
+ ),
694
720
  ToolDef(
695
721
  "run_command",
696
722
  (
@@ -190,6 +190,15 @@ class ToolConfirmationRequestEvent:
190
190
  prompt: str | None = None
191
191
 
192
192
 
193
+ @dataclass(frozen=True)
194
+ class AskUserRequestEvent:
195
+ kind: Literal["AskUserRequest"] = "AskUserRequest"
196
+ request_id: str = ""
197
+ tool_call_id: str = ""
198
+ question: str = ""
199
+ choices: tuple[str, ...] = ()
200
+
201
+
193
202
  @dataclass(frozen=True)
194
203
  class ActionRequiredEvent:
195
204
  kind: Literal["ActionRequiredEvent"] = "ActionRequiredEvent"
@@ -469,6 +478,7 @@ AgentEvent: TypeAlias = (
469
478
  | ThinkingBlockComplete
470
479
  | RedactedThinkingBlock
471
480
  | ToolConfirmationRequestEvent
481
+ | AskUserRequestEvent
472
482
  | ActionRequiredEvent
473
483
  | FrontendToolRequestEvent
474
484
  | SystemNotificationEvent
@@ -697,6 +707,13 @@ def _story5_event_dict(event: AgentEvent) -> dict[str, object]:
697
707
  "arguments": dict(event.arguments),
698
708
  "prompt": event.prompt,
699
709
  }
710
+ if isinstance(event, AskUserRequestEvent):
711
+ return {
712
+ **base,
713
+ "tool_call_id": event.tool_call_id,
714
+ "question": event.question,
715
+ "choices": list(event.choices),
716
+ }
700
717
  if isinstance(event, ActionRequiredEvent):
701
718
  return {
702
719
  **base,
@@ -877,6 +894,7 @@ def event_to_json(event: AgentEvent) -> str:
877
894
  ThinkingBlockComplete,
878
895
  RedactedThinkingBlock,
879
896
  ToolConfirmationRequestEvent,
897
+ AskUserRequestEvent,
880
898
  ActionRequiredEvent,
881
899
  FrontendToolRequestEvent,
882
900
  SystemNotificationEvent,
@@ -1097,6 +1115,20 @@ def _event_from_dict(payload: dict[str, Any]) -> AgentEvent:
1097
1115
  arguments=arguments,
1098
1116
  prompt=prompt,
1099
1117
  )
1118
+ if t == "AskUserRequest":
1119
+ call_raw = payload.get("tool_call_id", "")
1120
+ question_raw = payload.get("question", "")
1121
+ choices_raw = payload.get("choices", [])
1122
+ if not isinstance(call_raw, str) or not isinstance(question_raw, str):
1123
+ raise EventDecodeError("AskUserRequest fields must be strings")
1124
+ if not isinstance(choices_raw, list) or any(not isinstance(item, str) for item in choices_raw):
1125
+ raise EventDecodeError("AskUserRequest choices must be a list of strings")
1126
+ return AskUserRequestEvent(
1127
+ request_id=rid,
1128
+ tool_call_id=call_raw,
1129
+ question=question_raw,
1130
+ choices=tuple(choices_raw),
1131
+ )
1100
1132
  if t == "ActionRequiredEvent":
1101
1133
  at_raw = payload.get("action_type", "elicitation")
1102
1134
  if at_raw not in ("elicitation", "toolConfirmation", "elicitationResponse"):
@@ -0,0 +1,75 @@
1
+ """ask_user: a structured question the host answers before the tool returns."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from typing import Any
6
+
7
+ from monkeybot.core.runtime.events import AskUserRequestEvent, event_to_json
8
+
9
+ _MAX_QUESTION = 2_000
10
+ _MAX_CHOICE = 160
11
+ _MIN_CHOICES = 2
12
+ _MAX_CHOICES = 6
13
+
14
+
15
+ def parse_ask_user_args(args: dict[str, Any]) -> tuple[str, tuple[str, ...]] | str:
16
+ """Return ``(question, choices)`` or an error string."""
17
+ raw_question = args.get("question")
18
+ question = raw_question.strip() if isinstance(raw_question, str) else ""
19
+ if not question:
20
+ return "ask_user requires a non-empty question"
21
+ if len(question) > _MAX_QUESTION:
22
+ question = question[:_MAX_QUESTION]
23
+ raw_choices = args.get("choices")
24
+ if raw_choices is None:
25
+ return question, ()
26
+ if not isinstance(raw_choices, list):
27
+ return "ask_user choices must be a list of strings"
28
+ choices: list[str] = []
29
+ for item in raw_choices:
30
+ if not isinstance(item, str) or not item.strip():
31
+ return "ask_user choices must be non-empty strings"
32
+ text = item.strip()
33
+ if len(text) > _MAX_CHOICE:
34
+ return "ask_user choices must be short"
35
+ if text in choices:
36
+ return "ask_user choices must be unique"
37
+ choices.append(text)
38
+ if len(choices) < _MIN_CHOICES or len(choices) > _MAX_CHOICES:
39
+ return f"ask_user choices must include {_MIN_CHOICES} to {_MAX_CHOICES} options"
40
+ return question, tuple(choices)
41
+
42
+
43
+ async def await_ask_user_answer(
44
+ bus: Any,
45
+ *,
46
+ call_id: str,
47
+ request_id: str,
48
+ question: str,
49
+ choices: tuple[str, ...],
50
+ ) -> str | None:
51
+ """Publish the question and wait until the host posts an answer.
52
+
53
+ Returns the answer, or ``None`` when this session cannot ask.
54
+ ``asyncio.CancelledError`` propagates when the turn is stopped.
55
+ """
56
+ publish = getattr(bus, "publish_data", None)
57
+ register = getattr(bus, "register_pending", None)
58
+ if publish is None or register is None or not call_id:
59
+ return None
60
+ fut = register(call_id)
61
+ await publish(
62
+ event_to_json(
63
+ AskUserRequestEvent(
64
+ request_id=request_id,
65
+ tool_call_id=call_id,
66
+ question=question,
67
+ choices=choices,
68
+ )
69
+ )
70
+ )
71
+ payload = await fut
72
+ if not isinstance(payload, dict):
73
+ return ""
74
+ answer = payload.get("answer")
75
+ return answer.strip() if isinstance(answer, str) else ""
@@ -96,6 +96,7 @@ from monkeybot.core.subprocess_groups import (
96
96
  process_group_id,
97
97
  stop_subagent_process,
98
98
  )
99
+ from monkeybot.core.tools.ask_user import await_ask_user_answer, parse_ask_user_args
99
100
  from monkeybot.core.tools.fs_isolation import JailRoots, memory_hidden_paths
100
101
  from monkeybot.core.tools.grant_store import PATH_GRANT_TOOLS, GrantStoreCache
101
102
  from monkeybot.core.tools.inspector import parse_run_command
@@ -159,6 +160,7 @@ _CORE_TOOL_NAMES = frozenset(
159
160
  "stop_loop",
160
161
  "create_goal",
161
162
  "update_goal",
163
+ "ask_user",
162
164
  }
163
165
  )
164
166
 
@@ -1173,6 +1175,8 @@ class CoreToolExecutor(ToolExecutorPort):
1173
1175
  result_text, err_text = await self._tool_create_goal(args, ctx)
1174
1176
  elif name == "update_goal":
1175
1177
  result_text, err_text = await self._tool_update_goal(args, ctx)
1178
+ elif name == "ask_user":
1179
+ result_text, err_text = await self._tool_ask_user(args, call, ctx)
1176
1180
  elif name in self._extra_tools:
1177
1181
  try:
1178
1182
  raw = await self._extra_tools[name].execute(args)
@@ -2508,3 +2512,26 @@ class CoreToolExecutor(ToolExecutorPort):
2508
2512
  ),
2509
2513
  None,
2510
2514
  )
2515
+
2516
+ async def _tool_ask_user(
2517
+ self, args: dict[str, Any], call: ToolCall, ctx: TurnContext
2518
+ ) -> tuple[str | None, str | None]:
2519
+ parsed = parse_ask_user_args(args)
2520
+ if isinstance(parsed, str):
2521
+ return (None, parsed)
2522
+ question, choices = parsed
2523
+ bus = ctx.sse_bus
2524
+ if bus is None:
2525
+ return (None, "ask_user is only available in an interactive chat")
2526
+ answer = await await_ask_user_answer(
2527
+ bus,
2528
+ call_id=call.call_id,
2529
+ request_id=ctx.request_id,
2530
+ question=question,
2531
+ choices=choices,
2532
+ )
2533
+ if answer is None:
2534
+ return (None, "ask_user is only available in an interactive chat")
2535
+ if not answer:
2536
+ return (None, "ask_user received an empty answer")
2537
+ return (_j({"answer": answer}), None)
@@ -144,6 +144,12 @@ class ToolConfirmationPOST(BaseModel):
144
144
  """When true with approved, remember this tool+resource for the rest of the session."""
145
145
 
146
146
 
147
+ class AskUserPOST(BaseModel):
148
+ """POST /sessions/{id}/ask-user/{tool_call_id} body."""
149
+
150
+ answer: str
151
+
152
+
147
153
  class ElicitationPOST(BaseModel):
148
154
  """POST /sessions/{id}/elicitations/{id} body."""
149
155
 
@@ -48,6 +48,7 @@ from .models import (
48
48
  AdmissionAcceptedResponse,
49
49
  AgentUsageResponse,
50
50
  APIError,
51
+ AskUserPOST,
51
52
  AttachmentUploadResponse,
52
53
  CancelRequest,
53
54
  CreateSessionRequest,
@@ -1065,6 +1066,44 @@ def create_app(
1065
1066
  )
1066
1067
  return {"ok": True}
1067
1068
 
1069
+ @api.post("/sessions/{session_id}/ask-user/{tool_call_id}", status_code=202)
1070
+ async def post_ask_user(
1071
+ session_id: str,
1072
+ tool_call_id: str,
1073
+ body: AskUserPOST,
1074
+ reg_dep: SessionRegistry = Depends(get_registry),
1075
+ ) -> dict[str, bool]:
1076
+ rid = uuid.uuid4().hex
1077
+ answer = body.answer.strip()
1078
+ if not answer:
1079
+ raise APIError(400, "EMPTY_ANSWER", "ask_user requires a non-empty answer", rid)
1080
+ bus = reg_dep.get(session_id)
1081
+ if bus is None:
1082
+ raise APIError(404, "SESSION_NOT_FOUND", "Unknown session", rid)
1083
+ state = bus.is_pending_or_terminal(tool_call_id)
1084
+ if state == "unknown":
1085
+ raise APIError(
1086
+ 404,
1087
+ "PENDING_UNKNOWN",
1088
+ "Pending response id is not registered for this session",
1089
+ rid,
1090
+ )
1091
+ if state == "terminated":
1092
+ raise APIError(
1093
+ 409,
1094
+ "STALE_PENDING_RESPONSE",
1095
+ "This pending response was already resolved, cancelled, or timed out",
1096
+ rid,
1097
+ )
1098
+ if not bus.resolve_pending(tool_call_id, {"answer": answer}):
1099
+ raise APIError(
1100
+ 409,
1101
+ "STALE_PENDING_RESPONSE",
1102
+ "This pending response was already resolved, cancelled, or timed out",
1103
+ rid,
1104
+ )
1105
+ return {"ok": True}
1106
+
1068
1107
  @api.post("/sessions/{session_id}/elicitations/{elicitation_id}", status_code=202)
1069
1108
  async def post_elicitation(
1070
1109
  session_id: str,
@@ -0,0 +1,61 @@
1
+ """ask_user argument checks and the pending-answer wait."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import asyncio
6
+ import json
7
+
8
+ from monkeybot.core.tools.ask_user import await_ask_user_answer, parse_ask_user_args
9
+
10
+
11
+ def test_parse_ask_user_requires_a_question() -> None:
12
+ assert parse_ask_user_args({}) == "ask_user requires a non-empty question"
13
+ assert parse_ask_user_args({"question": " "}) == "ask_user requires a non-empty question"
14
+
15
+
16
+ def test_parse_ask_user_choices() -> None:
17
+ assert parse_ask_user_args({"question": " When? "}) == ("When?", ())
18
+ assert parse_ask_user_args({"question": "When?", "choices": ["Friday", "Monday"]}) == (
19
+ "When?",
20
+ ("Friday", "Monday"),
21
+ )
22
+ assert parse_ask_user_args({"question": "When?", "choices": ["Friday"]}) == (
23
+ "ask_user choices must include 2 to 6 options"
24
+ )
25
+ assert parse_ask_user_args({"question": "When?", "choices": ["Friday", "Friday"]}) == (
26
+ "ask_user choices must be unique"
27
+ )
28
+
29
+
30
+ def test_await_ask_user_answer_publishes_then_waits() -> None:
31
+ class Bus:
32
+ def __init__(self) -> None:
33
+ self.published: list[str] = []
34
+ self.fut: asyncio.Future[object] | None = None
35
+
36
+ def register_pending(self, key: str) -> asyncio.Future[object]:
37
+ assert key == "call-1"
38
+ self.fut = asyncio.get_running_loop().create_future()
39
+ return self.fut
40
+
41
+ async def publish_data(self, raw: str) -> None:
42
+ self.published.append(raw)
43
+ assert self.fut is not None
44
+ self.fut.set_result({"answer": " Friday "})
45
+
46
+ async def _run() -> None:
47
+ bus = Bus()
48
+ answer = await await_ask_user_answer(
49
+ bus,
50
+ call_id="call-1",
51
+ request_id="req",
52
+ question="Which date?",
53
+ choices=("Friday", "Monday"),
54
+ )
55
+ assert answer == "Friday"
56
+ event = json.loads(bus.published[0])
57
+ assert event["type"] == "AskUserRequest"
58
+ assert event["question"] == "Which date?"
59
+ assert event["choices"] == ["Friday", "Monday"]
60
+
61
+ asyncio.run(_run())
@@ -336,6 +336,7 @@ async def test_build_context_merges_core_and_mcp_tools(tmp_path: Path) -> None:
336
336
  "list_mcp_prompts",
337
337
  "get_mcp_prompt",
338
338
  "load_file",
339
+ "ask_user",
339
340
  }
340
341
  assert core_names.issubset(set(names))
341
342
  assert "start_loop" not in names
@@ -10,6 +10,7 @@ import pytest
10
10
  from monkeybot.core.runtime.events import (
11
11
  ActionRequiredEvent,
12
12
  AgentEvent,
13
+ AskUserRequestEvent,
13
14
  AssistantDelta,
14
15
  AssistantTextEnded,
15
16
  AssistantTextStarted,
@@ -358,6 +359,16 @@ def test_sse_tool_confirmation_request_event_roundtrip(prompt: str | None) -> No
358
359
  assert event_from_json(event_to_json(ev)) == ev
359
360
 
360
361
 
362
+ def test_sse_ask_user_request_event_roundtrip() -> None:
363
+ ev = AskUserRequestEvent(
364
+ request_id="r",
365
+ tool_call_id="tc",
366
+ question="Which date?",
367
+ choices=("Friday", "Monday"),
368
+ )
369
+ assert event_from_json(event_to_json(ev)) == ev
370
+
371
+
361
372
  @pytest.mark.parametrize(
362
373
  "action_type",
363
374
  ("elicitation", "toolConfirmation", "elicitationResponse"),
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes