monkeybot 3.6.1__tar.gz → 3.8.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 (787) hide show
  1. monkeybot-3.8.0/.cursor/skills/mb-retro/SKILL.md +85 -0
  2. {monkeybot-3.6.1 → monkeybot-3.8.0}/BACKLOG.md +0 -1
  3. {monkeybot-3.6.1 → monkeybot-3.8.0}/CHANGELOG.md +48 -0
  4. {monkeybot-3.6.1 → monkeybot-3.8.0}/PKG-INFO +1 -7
  5. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_tool_display.py +1 -1
  6. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_tui.py +3 -3
  7. monkeybot-3.8.0/cli/src/monkeybot_cli/commands/trace.py +174 -0
  8. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/main.py +2 -1
  9. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/providers.py +0 -2
  10. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +3 -2
  11. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +8 -27
  12. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_tui.py +12 -3
  13. monkeybot-3.8.0/cli/tests/test_trace_cmd.py +85 -0
  14. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/uv.lock +8 -91
  15. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/browser-mcp.md +9 -4
  16. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/features.md +2 -4
  17. monkeybot-3.8.0/docs/migrations/history-row-id.sql +10 -0
  18. monkeybot-3.8.0/docs/migrations/session-branches.sql +23 -0
  19. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/verifier-agent-design.md +2 -2
  20. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/TEST_COVERAGE.md +2 -3
  21. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/browser/SKILL.md +1 -1
  22. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/pyproject.toml +1 -1
  23. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/app.py +42 -12
  24. monkeybot-3.8.0/integrations/browser-mcp/src/browser_mcp/backend.py +257 -0
  25. monkeybot-3.8.0/integrations/browser-mcp/src/browser_mcp/chat_context.py +375 -0
  26. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/chat_scope.py +27 -41
  27. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +59 -9
  28. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/login.py +3 -3
  29. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/server.py +21 -1
  30. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +45 -0
  31. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +8 -7
  32. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +3 -2
  33. monkeybot-3.8.0/integrations/browser-mcp/tests/conftest.py +16 -0
  34. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +1 -1
  35. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/conftest.py +5 -5
  36. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +5 -5
  37. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_act.py +7 -7
  38. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_agentcore.py +37 -30
  39. monkeybot-3.8.0/integrations/browser-mcp/tests/test_chat_isolation.py +369 -0
  40. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_chat_scope.py +41 -24
  41. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_fill_form.py +7 -7
  42. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +18 -19
  43. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_indexed_tools.py +7 -7
  44. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_observe.py +7 -7
  45. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_observe_after.py +7 -7
  46. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_perf.py +8 -8
  47. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playbook_flows.py +7 -7
  48. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_server_shutdown.py +15 -15
  49. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_tabs.py +9 -9
  50. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_wait_tools.py +5 -5
  51. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/uv.lock +1 -1
  52. {monkeybot-3.6.1 → monkeybot-3.8.0}/pyproject.toml +4 -13
  53. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/catalog.py +15 -1
  54. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/freeze.py +5 -10
  55. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/resolve.py +2 -1
  56. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/store.py +19 -0
  57. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/bootstrap.py +9 -27
  58. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/runtime_env.py +33 -11
  59. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/snapshot.py +12 -2
  60. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/validation.py +2 -2
  61. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/__init__.py +87 -43
  62. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_result_ingress.py +0 -5
  63. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_shapers.py +2 -1
  64. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/hooks/__init__.py +2 -0
  65. {monkeybot-3.6.1/src/monkeybot/core/knowledge → monkeybot-3.8.0/src/monkeybot/core/hooks}/evidence_guard.py +9 -13
  66. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/llm/provider.py +5 -1
  67. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/messages/tool_integrity.py +4 -3
  68. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/messages/transform_context.py +4 -3
  69. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/__init__.py +0 -8
  70. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/backends.py +11 -0
  71. monkeybot-3.8.0/src/monkeybot/core/persistence/branches.py +265 -0
  72. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore.py +282 -27
  73. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/goal_ledger.py +111 -3
  74. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/history.py +118 -42
  75. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/postgres.py +291 -17
  76. monkeybot-3.8.0/src/monkeybot/core/persistence/row_ids.py +44 -0
  77. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/sqlite.py +159 -38
  78. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/sqlite_backend.py +11 -0
  79. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/thread_summary.py +152 -61
  80. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/transcript.py +75 -9
  81. monkeybot-3.8.0/src/monkeybot/core/persistence/transcript_reader.py +955 -0
  82. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/prompts/harness_prompt.py +2 -2
  83. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/events.py +73 -0
  84. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/history_compaction.py +5 -4
  85. monkeybot-3.8.0/src/monkeybot/core/runtime/history_rewrite.py +686 -0
  86. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_hooks.py +2 -0
  87. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_usage.py +2 -2
  88. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/realtime_loop.py +6 -1
  89. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/tool_dispatch.py +17 -0
  90. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/turn_loop.py +225 -19
  91. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/subagent_worker.py +52 -33
  92. monkeybot-3.8.0/src/monkeybot/core/tools/background_jobs.py +285 -0
  93. monkeybot-3.8.0/src/monkeybot/core/tools/command_executor.py +73 -0
  94. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/core_tool_executor.py +246 -87
  95. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/sandbox_executor.py +407 -31
  96. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/terminal.py +288 -36
  97. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/tool_kind.py +2 -1
  98. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/ledger.py +149 -1
  99. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/match.py +1 -1
  100. monkeybot-3.8.0/src/monkeybot/core/verifier/rewrite_effects.py +38 -0
  101. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/tracker.py +37 -0
  102. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/manager.py +35 -0
  103. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/routes.py +31 -8
  104. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/app.py +37 -86
  105. monkeybot-3.8.0/src/monkeybot/gateway/sse/history_routes.py +294 -0
  106. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/models.py +45 -0
  107. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/routes.py +75 -13
  108. monkeybot-3.8.0/tests/core/test_background_jobs.py +591 -0
  109. monkeybot-3.8.0/tests/core/test_branch_store_backends.py +185 -0
  110. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_config_extensions.py +18 -4
  111. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_context.py +2 -1
  112. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_core_tool_executor.py +38 -81
  113. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_doom_loop.py +20 -1
  114. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_empty_completion.py +13 -1
  115. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_events.py +30 -0
  116. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_evidence_guard.py +2 -2
  117. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_goals.py +30 -0
  118. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_history.py +2 -0
  119. monkeybot-3.8.0/tests/core/test_history_branches.py +652 -0
  120. monkeybot-3.8.0/tests/core/test_history_row_ids.py +409 -0
  121. monkeybot-3.8.0/tests/core/test_session_branches_migration.py +230 -0
  122. monkeybot-3.8.0/tests/core/test_subagent_transcript.py +81 -0
  123. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_thread_summary_wire.py +51 -1
  124. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_transcript.py +30 -0
  125. monkeybot-3.8.0/tests/core/test_transcript_reader.py +463 -0
  126. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_truncated_tool_batch.py +14 -1
  127. monkeybot-3.8.0/tests/core/test_turn_session_id.py +150 -0
  128. monkeybot-3.8.0/tests/core/test_verifier_rewrite_effects.py +358 -0
  129. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenario_runner.py +0 -2
  130. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/test_agent_behavior.py +0 -1
  131. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_routes_client_text.py +3 -1
  132. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_create_session_model.py +57 -0
  133. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_gateway_runtime.py +42 -1
  134. monkeybot-3.8.0/tests/gateway/sse/test_history_routes.py +359 -0
  135. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_routes.py +11 -1
  136. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_transcript_wiring.py +53 -2
  137. {monkeybot-3.6.1 → monkeybot-3.8.0}/uv.lock +7 -89
  138. monkeybot-3.6.1/docs/knowledge-layer-fixes.md +0 -274
  139. monkeybot-3.6.1/docs/memory-graph-split-plan.md +0 -231
  140. monkeybot-3.6.1/docs/workspace-index-design.md +0 -996
  141. monkeybot-3.6.1/integrations/browser-mcp/src/browser_mcp/backend.py +0 -189
  142. monkeybot-3.6.1/src/monkeybot/core/knowledge/__init__.py +0 -18
  143. monkeybot-3.6.1/src/monkeybot/core/knowledge/captions.py +0 -202
  144. monkeybot-3.6.1/src/monkeybot/core/knowledge/chunking.py +0 -880
  145. monkeybot-3.6.1/src/monkeybot/core/knowledge/config.py +0 -274
  146. monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/__init__.py +0 -25
  147. monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/base.py +0 -248
  148. monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/factory.py +0 -206
  149. monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/gemini.py +0 -149
  150. monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/nvidia.py +0 -69
  151. monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/openai_compat.py +0 -116
  152. monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/sanitize.py +0 -27
  153. monkeybot-3.6.1/src/monkeybot/core/knowledge/extractors.py +0 -364
  154. monkeybot-3.6.1/src/monkeybot/core/knowledge/fusion.py +0 -419
  155. monkeybot-3.6.1/src/monkeybot/core/knowledge/hook.py +0 -417
  156. monkeybot-3.6.1/src/monkeybot/core/knowledge/indexer.py +0 -680
  157. monkeybot-3.6.1/src/monkeybot/core/knowledge/links.py +0 -175
  158. monkeybot-3.6.1/src/monkeybot/core/knowledge/salience.py +0 -207
  159. monkeybot-3.6.1/src/monkeybot/core/knowledge/sqlite_index.py +0 -767
  160. monkeybot-3.6.1/src/monkeybot/core/knowledge/subsystem.py +0 -298
  161. monkeybot-3.6.1/src/monkeybot/core/knowledge/tool.py +0 -29
  162. monkeybot-3.6.1/src/monkeybot/core/knowledge/types.py +0 -127
  163. monkeybot-3.6.1/src/monkeybot/core/persistence/sqlite_vector.py +0 -481
  164. monkeybot-3.6.1/tests/core/test_knowledge_chunking.py +0 -283
  165. monkeybot-3.6.1/tests/core/test_knowledge_chunking_rank.py +0 -86
  166. monkeybot-3.6.1/tests/core/test_knowledge_config.py +0 -189
  167. monkeybot-3.6.1/tests/core/test_knowledge_embeddings.py +0 -332
  168. monkeybot-3.6.1/tests/core/test_knowledge_fts.py +0 -218
  169. monkeybot-3.6.1/tests/core/test_knowledge_fusion.py +0 -475
  170. monkeybot-3.6.1/tests/core/test_knowledge_fusion_ann.py +0 -166
  171. monkeybot-3.6.1/tests/core/test_knowledge_hook.py +0 -71
  172. monkeybot-3.6.1/tests/core/test_knowledge_indexer.py +0 -955
  173. monkeybot-3.6.1/tests/core/test_knowledge_links.py +0 -106
  174. monkeybot-3.6.1/tests/core/test_knowledge_media.py +0 -375
  175. monkeybot-3.6.1/tests/core/test_knowledge_salience.py +0 -211
  176. monkeybot-3.6.1/tests/core/test_knowledge_single_writer.py +0 -291
  177. monkeybot-3.6.1/tests/core/test_knowledge_subsystem.py +0 -102
  178. monkeybot-3.6.1/tests/core/test_knowledge_vectors.py +0 -283
  179. monkeybot-3.6.1/tests/evals/scenarios/tool_search_knowledge.yaml +0 -17
  180. monkeybot-3.6.1/tests/evals/test_memory_knowledge_routing.py +0 -70
  181. {monkeybot-3.6.1 → monkeybot-3.8.0}/.dockerignore +0 -0
  182. {monkeybot-3.6.1 → monkeybot-3.8.0}/.github/workflows/ci.yml +0 -0
  183. {monkeybot-3.6.1 → monkeybot-3.8.0}/.github/workflows/live-eval-smoke.yml +0 -0
  184. {monkeybot-3.6.1 → monkeybot-3.8.0}/.github/workflows/prepare-release.yml +0 -0
  185. {monkeybot-3.6.1 → monkeybot-3.8.0}/.github/workflows/publish-release.yml +0 -0
  186. {monkeybot-3.6.1 → monkeybot-3.8.0}/.gitignore +0 -0
  187. {monkeybot-3.6.1 → monkeybot-3.8.0}/.pre-commit-config.yaml +0 -0
  188. {monkeybot-3.6.1 → monkeybot-3.8.0}/CONTRIBUTING.md +0 -0
  189. {monkeybot-3.6.1 → monkeybot-3.8.0}/LICENSE +0 -0
  190. {monkeybot-3.6.1 → monkeybot-3.8.0}/README.md +0 -0
  191. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/pyproject.toml +0 -0
  192. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/skills/monkeybot/SKILL.md +0 -0
  193. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
  194. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/__init__.py +0 -0
  195. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
  196. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
  197. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
  198. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_session.py +0 -0
  199. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
  200. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
  201. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
  202. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
  203. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
  204. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
  205. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
  206. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
  207. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
  208. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
  209. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
  210. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
  211. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/compat.py +0 -0
  212. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
  213. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
  214. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
  215. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
  216. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
  217. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/output.py +0 -0
  218. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
  219. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
  220. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
  221. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
  222. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
  223. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
  224. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
  225. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
  226. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
  227. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
  228. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
  229. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold.py +0 -0
  230. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
  231. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
  232. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
  233. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -0
  234. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
  235. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
  236. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/goal/SKILL.md +0 -0
  237. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
  238. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
  239. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
  240. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
  241. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
  242. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
  243. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
  244. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
  245. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
  246. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_continue.py +0 -0
  247. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_e2e.py +0 -0
  248. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_errors.py +0 -0
  249. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_file_index.py +0 -0
  250. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_grounding.py +0 -0
  251. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_local_shell.py +0 -0
  252. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_renderer_parity.py +0 -0
  253. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_session.py +0 -0
  254. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_status_bar.py +0 -0
  255. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_theme.py +0 -0
  256. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_tool_display.py +0 -0
  257. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_cli.py +0 -0
  258. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_config_resolve.py +0 -0
  259. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_doctor.py +0 -0
  260. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_extras_catalog.py +0 -0
  261. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_gateway_health.py +0 -0
  262. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
  263. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_realtime_session_controller.py +0 -0
  264. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_run_cmd.py +0 -0
  265. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_runtime_python.py +0 -0
  266. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_scaffold.py +0 -0
  267. {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_terminal_markdown.py +0 -0
  268. {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/Dockerfile +0 -0
  269. {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/demo-model.yaml +0 -0
  270. {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/demo.yaml +0 -0
  271. {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/docker-compose.sandbox.yml +0 -0
  272. {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/opensandbox.docker.toml +0 -0
  273. {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/sandbox.Dockerfile +0 -0
  274. {monkeybot-3.6.1 → monkeybot-3.8.0}/docker-compose.yml +0 -0
  275. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/agent-layout.md +0 -0
  276. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/assets/logo.png +0 -0
  277. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/browser-mcp-perf-baseline.md +0 -0
  278. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/browser-mcp-performance-plan.md +0 -0
  279. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/cloud-deployment-design.md +0 -0
  280. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-aws-agentcore.md +0 -0
  281. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-pattern-a-container.md +0 -0
  282. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-pattern-b-serverless.md +0 -0
  283. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
  284. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-pattern-d-realtime.md +0 -0
  285. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/getting-started.md +0 -0
  286. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/live-evals.md +0 -0
  287. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/mcp.md +0 -0
  288. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/migrations/agent-scope-namespacing.md +0 -0
  289. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/migrations/memory-outbox.sql +0 -0
  290. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/observability-runbook.md +0 -0
  291. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/ollama-local.md +0 -0
  292. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/otel-collector.example.yaml +0 -0
  293. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/progressive-loop-tools.md +0 -0
  294. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/progressive-mcp-tools.md +0 -0
  295. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/skills.md +0 -0
  296. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/spill-dynamic-design.md +0 -0
  297. {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/sse-gateway-ui.md +0 -0
  298. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/assertions.py +0 -0
  299. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/baselines/smoke.json +0 -0
  300. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/baselines/smoke.md +0 -0
  301. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/diff.py +0 -0
  302. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/eval_config.yaml +0 -0
  303. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/models.py +0 -0
  304. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/persistence.py +0 -0
  305. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/report.py +0 -0
  306. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/runner.py +0 -0
  307. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenario_loader.py +0 -0
  308. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/context/summarization_trigger.yaml +0 -0
  309. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/declares_done.yaml +0 -0
  310. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/path_constraint.yaml +0 -0
  311. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/preempt.yaml +0 -0
  312. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/repeat_correction.yaml +0 -0
  313. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/supersession.yaml +0 -0
  314. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/mcp/get_prompt.yaml +0 -0
  315. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/mcp/list_resources.yaml +0 -0
  316. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/mcp/tool_invoke.yaml +0 -0
  317. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/memory/recall_cross_session.yaml +0 -0
  318. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/memory/recall_single_session.yaml +0 -0
  319. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/multi_turn/task_tracking.yaml +0 -0
  320. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/skills/skill_invocation.yaml +0 -0
  321. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/subagents/dispatch_complete.yaml +0 -0
  322. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_read.yaml +0 -0
  323. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_read_error.yaml +0 -0
  324. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_run_command.yaml +0 -0
  325. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +0 -0
  326. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_write.yaml +0 -0
  327. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scorer.py +0 -0
  328. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/.env.example +0 -0
  329. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/.gitignore +0 -0
  330. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
  331. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
  332. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
  333. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
  334. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +0 -0
  335. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -0
  336. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
  337. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/pyproject.toml +0 -0
  338. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
  339. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/uv.lock +0 -0
  340. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
  341. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
  342. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/suites/drift.yaml +0 -0
  343. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/suites/smoke.yaml +0 -0
  344. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_assertions.py +0 -0
  345. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_diff.py +0 -0
  346. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_judge.py +0 -0
  347. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_report.py +0 -0
  348. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_runner_sse.py +0 -0
  349. {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_scorer.py +0 -0
  350. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/README.md +0 -0
  351. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/agentcore/handler.py +0 -0
  352. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/agentcore/runtime_app.py +0 -0
  353. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/agentengine/handler.py +0 -0
  354. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/cloud-functions/main.py +0 -0
  355. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/lambda/handler.py +0 -0
  356. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/ollama/PrefixStable.Modelfile +0 -0
  357. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
  358. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/diagnostics/README.md +0 -0
  359. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/diagnostics/SKILL.md +0 -0
  360. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/diagnostics/__init__.py +0 -0
  361. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/diagnostics/diagnostics.py +0 -0
  362. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/image-generator/SKILL.md +0 -0
  363. {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/image-generator/generate_image.py +0 -0
  364. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
  365. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
  366. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
  367. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
  368. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
  369. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
  370. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
  371. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
  372. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
  373. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
  374. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
  375. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
  376. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
  377. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
  378. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
  379. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
  380. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +0 -0
  381. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
  382. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
  383. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
  384. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
  385. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
  386. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
  387. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
  388. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
  389. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
  390. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
  391. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
  392. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
  393. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
  394. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
  395. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
  396. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
  397. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
  398. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
  399. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
  400. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
  401. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
  402. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
  403. {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_tool_surface.py +0 -0
  404. {monkeybot-3.6.1 → monkeybot-3.8.0}/pytest.ini +0 -0
  405. {monkeybot-3.6.1 → monkeybot-3.8.0}/scripts/create_schema.py +0 -0
  406. {monkeybot-3.6.1 → monkeybot-3.8.0}/scripts/precommit-pytest.sh +0 -0
  407. {monkeybot-3.6.1 → monkeybot-3.8.0}/scripts/release.py +0 -0
  408. {monkeybot-3.6.1 → monkeybot-3.8.0}/scripts/smoke_global_cli.sh +0 -0
  409. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/__init__.py +0 -0
  410. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/__init__.py +0 -0
  411. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/__main__.py +0 -0
  412. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/audio_io.py +0 -0
  413. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/gateway_manager.py +0 -0
  414. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/main.py +0 -0
  415. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/push_to_talk.py +0 -0
  416. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/realtime_client.py +0 -0
  417. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/__init__.py +0 -0
  418. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/approvals.py +0 -0
  419. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/permissions.py +0 -0
  420. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/safety.py +0 -0
  421. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/tools.py +0 -0
  422. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/__init__.py +0 -0
  423. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/__init__.py +0 -0
  424. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/config.py +0 -0
  425. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/image_preview.py +0 -0
  426. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/text.py +0 -0
  427. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/tools.py +0 -0
  428. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/__init__.py +0 -0
  429. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/realtime_config.py +0 -0
  430. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/settings.py +0 -0
  431. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
  432. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/campaign_context.py +0 -0
  433. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/common.py +0 -0
  434. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/epoch.py +0 -0
  435. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/secret_egress.py +0 -0
  436. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/slash_skills.py +0 -0
  437. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
  438. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/goals/__init__.py +0 -0
  439. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/goals/service.py +0 -0
  440. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/layout.py +0 -0
  441. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/llm/__init__.py +0 -0
  442. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
  443. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/llm/usage.py +0 -0
  444. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/lockfile_names.py +0 -0
  445. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/logging_utils.py +0 -0
  446. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/mcp/__init__.py +0 -0
  447. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/mcp/mcp_client.py +0 -0
  448. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
  449. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/__init__.py +0 -0
  450. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/config.py +0 -0
  451. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/hook.py +0 -0
  452. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/ids.py +0 -0
  453. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/ingest.py +0 -0
  454. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
  455. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/observability.py +0 -0
  456. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/outbox.py +0 -0
  457. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/palace.py +0 -0
  458. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/subsystem.py +0 -0
  459. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/uri.py +0 -0
  460. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/writer.py +0 -0
  461. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/messages/__init__.py +0 -0
  462. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
  463. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/path_safety.py +0 -0
  464. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/db.py +0 -0
  465. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
  466. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/errors.py +0 -0
  467. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
  468. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
  469. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/runs.py +0 -0
  470. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
  471. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
  472. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/usage.py +0 -0
  473. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
  474. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/prompts/__init__.py +0 -0
  475. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/prompts/headings.py +0 -0
  476. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/prompts/prompt.py +0 -0
  477. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/__init__.py +0 -0
  478. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/context_budget.py +0 -0
  479. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/doom_loop.py +0 -0
  480. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/input_admission.py +0 -0
  481. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop.py +0 -0
  482. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
  483. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
  484. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
  485. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
  486. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
  487. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/__init__.py +0 -0
  488. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
  489. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
  490. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
  491. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subprocess_groups.py +0 -0
  492. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/testing/__init__.py +0 -0
  493. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
  494. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
  495. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/__init__.py +0 -0
  496. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/ask_user.py +0 -0
  497. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
  498. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/grant_store.py +0 -0
  499. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/inspector.py +0 -0
  500. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
  501. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/patch.py +0 -0
  502. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/path_grant_inspector.py +0 -0
  503. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/permission.py +0 -0
  504. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/spill_inventory.py +0 -0
  505. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
  506. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
  507. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/types.py +0 -0
  508. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/workspace_service.py +0 -0
  509. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/types/__init__.py +0 -0
  510. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/types/content_blocks.py +0 -0
  511. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/types/interfaces.py +0 -0
  512. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/types/types_tools.py +0 -0
  513. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/__init__.py +0 -0
  514. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/actuator.py +0 -0
  515. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/binding.py +0 -0
  516. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/classify.py +0 -0
  517. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/inspector.py +0 -0
  518. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/intervention.py +0 -0
  519. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/judge.py +0 -0
  520. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/mailbox.py +0 -0
  521. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/port.py +0 -0
  522. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/severity.py +0 -0
  523. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/__init__.py +0 -0
  524. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/factory.py +0 -0
  525. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/gcs.py +0 -0
  526. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/local.py +0 -0
  527. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/protocol.py +0 -0
  528. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/s3.py +0 -0
  529. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace_layout.py +0 -0
  530. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/__init__.py +0 -0
  531. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/bootstrap.py +0 -0
  532. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/main.py +0 -0
  533. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
  534. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
  535. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/app.py +0 -0
  536. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
  537. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
  538. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
  539. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
  540. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/session.py +0 -0
  541. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
  542. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime_main.py +0 -0
  543. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
  544. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/goal_routes.py +0 -0
  545. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
  546. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/reload.py +0 -0
  547. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
  548. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/request_storage.py +0 -0
  549. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
  550. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
  551. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/session_bus.py +0 -0
  552. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/sse.py +0 -0
  553. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
  554. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/__init__.py +0 -0
  555. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/_state.py +0 -0
  556. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/instrumentation.py +0 -0
  557. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/propagation.py +0 -0
  558. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/spans.py +0 -0
  559. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/sqlite_exporter.py +0 -0
  560. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/__init__.py +0 -0
  561. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
  562. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/_openai_compat.py +0 -0
  563. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/_utils.py +0 -0
  564. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/bedrock.py +0 -0
  565. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/claude.py +0 -0
  566. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/gemini.py +0 -0
  567. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/gemini_live.py +0 -0
  568. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/huggingface.py +0 -0
  569. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/model_capabilities.py +0 -0
  570. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/nvidia.py +0 -0
  571. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/ollama.py +0 -0
  572. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/openai.py +0 -0
  573. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/openrouter.py +0 -0
  574. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/pricing.py +0 -0
  575. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/request_budget.py +0 -0
  576. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/sampling.py +0 -0
  577. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/vertex_claude.py +0 -0
  578. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scaffold/__init__.py +0 -0
  579. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/__init__.py +0 -0
  580. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/__main__.py +0 -0
  581. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/engine.py +0 -0
  582. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
  583. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/interval.py +0 -0
  584. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/tick_result.py +0 -0
  585. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/worker.py +0 -0
  586. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/subagents/__init__.py +0 -0
  587. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
  588. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
  589. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/todo_list/__init__.py +0 -0
  590. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/todo_list/store.py +0 -0
  591. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/todo_list/tool.py +0 -0
  592. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/__init__.py +0 -0
  593. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
  594. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
  595. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
  596. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
  597. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/protocol.py +0 -0
  598. {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/tool.py +0 -0
  599. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/__init__.py +0 -0
  600. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/acceptance/test_observability_acceptance.py +0 -0
  601. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/__init__.py +0 -0
  602. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/test_gateway_manager.py +0 -0
  603. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/test_main.py +0 -0
  604. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/test_push_to_talk.py +0 -0
  605. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/test_realtime_client.py +0 -0
  606. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/__init__.py +0 -0
  607. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_approvals.py +0 -0
  608. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_computer_tools.py +0 -0
  609. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_package_init.py +0 -0
  610. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_path_policy.py +0 -0
  611. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_permissions.py +0 -0
  612. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_subagent_exclusion.py +0 -0
  613. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_wiring.py +0 -0
  614. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/conftest.py +0 -0
  615. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/__init__.py +0 -0
  616. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
  617. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/memory/helpers.py +0 -0
  618. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/memory/in_memory_palace.py +0 -0
  619. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/memory/test_mempalace.py +0 -0
  620. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/memory/test_review_fixes.py +0 -0
  621. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_agent_layout.py +0 -0
  622. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_ask_user.py +0 -0
  623. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_attachment_freeze.py +0 -0
  624. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_attachment_store.py +0 -0
  625. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_bootstrap.py +0 -0
  626. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_content_blocks.py +0 -0
  627. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_context_budget.py +0 -0
  628. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_context_epoch.py +0 -0
  629. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_durable_events.py +0 -0
  630. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_durable_runs.py +0 -0
  631. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_env_map_grep_gates.py +0 -0
  632. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_firestore_history.py +0 -0
  633. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
  634. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_firestore_usage.py +0 -0
  635. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_fs_isolation.py +0 -0
  636. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_gemini_history_replay.py +0 -0
  637. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_goal_ledger.py +0 -0
  638. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_goal_persistence.py +0 -0
  639. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_grant_store.py +0 -0
  640. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_harness_prompt.py +0 -0
  641. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_history_compaction_split.py +0 -0
  642. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_hooks.py +0 -0
  643. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_image_preview.py +0 -0
  644. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_input_admission.py +0 -0
  645. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_inspector.py +0 -0
  646. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_layout.py +0 -0
  647. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_logging_utils.py +0 -0
  648. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_loop.py +0 -0
  649. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_loop_hooks.py +0 -0
  650. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_loop_observability.py +0 -0
  651. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_loop_transcript.py +0 -0
  652. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_mcp_client.py +0 -0
  653. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_memory_layout_migrate.py +0 -0
  654. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_message_pipeline.py +0 -0
  655. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_mocks_realtime_provider.py +0 -0
  656. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_patch.py +0 -0
  657. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_path_grant_inspector.py +0 -0
  658. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_path_safety.py +0 -0
  659. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_permission.py +0 -0
  660. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_pricing.py +0 -0
  661. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_progress_publish.py +0 -0
  662. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_progress_tracker.py +0 -0
  663. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_prompt.py +0 -0
  664. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_provider_contract.py +0 -0
  665. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_provider_stream_mapper.py +0 -0
  666. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_realtime_loop.py +0 -0
  667. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_replace_fuzzy.py +0 -0
  668. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_run_command_parse.py +0 -0
  669. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_runs.py +0 -0
  670. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_runtime_config_snapshot.py +0 -0
  671. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_runtime_env.py +0 -0
  672. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_sandbox_executor.py +0 -0
  673. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_scheduled_loops.py +0 -0
  674. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_secret_egress.py +0 -0
  675. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_session_turn_locks.py +0 -0
  676. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_settlement.py +0 -0
  677. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_slash_skills.py +0 -0
  678. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_spill_dynamic.py +0 -0
  679. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_spill_inventory.py +0 -0
  680. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_storage_backends.py +0 -0
  681. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_subagent_proto.py +0 -0
  682. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_subagent_trace_propagation.py +0 -0
  683. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_subagent_worker_paths.py +0 -0
  684. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_terminal.py +0 -0
  685. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_tool_def_schema.py +0 -0
  686. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_tool_integrity.py +0 -0
  687. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_tool_result_ingress.py +0 -0
  688. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_tool_shapers.py +0 -0
  689. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_usage.py +0 -0
  690. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_usage_migration.py +0 -0
  691. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_utterance_buffer.py +0 -0
  692. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_binding.py +0 -0
  693. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_inspector.py +0 -0
  694. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_judge.py +0 -0
  695. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_mailbox_lifecycle.py +0 -0
  696. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_sticky_nudge.py +0 -0
  697. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_worker_pool.py +0 -0
  698. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_workspace_extra_read_roots.py +0 -0
  699. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_workspace_layout.py +0 -0
  700. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_workspace_symlinks.py +0 -0
  701. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_workspace_write_scope.py +0 -0
  702. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/workspace/test_factory.py +0 -0
  703. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/workspace/test_local_storage.py +0 -0
  704. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/workspace/test_protocol_contract.py +0 -0
  705. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/__init__.py +0 -0
  706. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/eval_hook.py +0 -0
  707. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
  708. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
  709. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
  710. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
  711. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
  712. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
  713. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_read.yaml +0 -0
  714. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
  715. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
  716. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
  717. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
  718. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
  719. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_write.yaml +0 -0
  720. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
  721. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/test_verifier_port.py +0 -0
  722. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/__init__.py +0 -0
  723. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/__init__.py +0 -0
  724. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_app.py +0 -0
  725. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_deps.py +0 -0
  726. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_guardrails.py +0 -0
  727. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_manager.py +0 -0
  728. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_metrics.py +0 -0
  729. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_session.py +0 -0
  730. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_wire.py +0 -0
  731. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_attachments.py +0 -0
  732. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_config_reload.py +0 -0
  733. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
  734. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_session_bus.py +0 -0
  735. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_otel_fastapi.py +0 -0
  736. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_otel_lifespan.py +0 -0
  737. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
  738. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_realtime_main.py +0 -0
  739. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_resolve_provider.py +0 -0
  740. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_sse_events.py +0 -0
  741. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
  742. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/integration/__init__.py +0 -0
  743. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
  744. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/integration/test_observability_integration.py +0 -0
  745. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/integration/test_prompt_caching_integration.py +0 -0
  746. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/conftest.py +0 -0
  747. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_init.py +0 -0
  748. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_instrumentation.py +0 -0
  749. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_loop_hook_spans.py +0 -0
  750. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_propagation.py +0 -0
  751. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_span_contract.py +0 -0
  752. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_spans.py +0 -0
  753. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_sqlite_exporter.py +0 -0
  754. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_truncate.py +0 -0
  755. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_turn_complete_trace.py +0 -0
  756. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/conftest.py +0 -0
  757. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_anthropic_cache.py +0 -0
  758. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_anthropic_history.py +0 -0
  759. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_bedrock_converse.py +0 -0
  760. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_bedrock_estimate.py +0 -0
  761. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_gemini_history.py +0 -0
  762. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_gemini_live.py +0 -0
  763. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_gemini_usage.py +0 -0
  764. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_huggingface.py +0 -0
  765. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_model_capabilities.py +0 -0
  766. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_nvidia.py +0 -0
  767. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_ollama.py +0 -0
  768. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_openai_byte_budget.py +0 -0
  769. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_openai_compat_usage.py +0 -0
  770. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_openai_history.py +0 -0
  771. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_pricing.py +0 -0
  772. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_request_budget.py +0 -0
  773. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
  774. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_sampling.py +0 -0
  775. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_sonnet5_sampling.py +0 -0
  776. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_source_grep_gates.py +0 -0
  777. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_vertex_claude_history.py +0 -0
  778. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/scheduler/test_engine.py +0 -0
  779. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/scheduler/test_interval.py +0 -0
  780. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/skills/__init__.py +0 -0
  781. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/skills/test_generate_image_script.py +0 -0
  782. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/test_cold_start.py +0 -0
  783. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/test_packaging_config.py +0 -0
  784. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/test_release_script.py +0 -0
  785. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/todo_list/test_todo_list.py +0 -0
  786. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/web_search/__init__.py +0 -0
  787. {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/web_search/test_web_search.py +0 -0
@@ -0,0 +1,85 @@
1
+ ---
2
+ name: mb-retro
3
+ description: >-
4
+ Review one MonkeyBot session transcript and propose environment fixes
5
+ (checks, verifier criteria, AGENT.md pointers, tool access). Use ONLY when
6
+ the user explicitly asks for /mb-retro, a MonkeyBot retro, or to review a
7
+ MonkeyBot transcript for why the agent struggled. Do not run during ordinary
8
+ coding, and do not edit anything until the user picks a candidate.
9
+ disable-model-invocation: true
10
+ ---
11
+
12
+ # mb-retro
13
+
14
+ Look at one MonkeyBot session and propose changes to the agent's environment so the next run goes better. Propose only. Edit nothing until the user picks a candidate.
15
+
16
+ This is the MonkeyBot form of a session retro. It does not review the code the session produced. If the user wants a verdict on a diff, that is a code review, not this skill.
17
+
18
+ ## Input
19
+
20
+ A session id, a session directory, or a `transcript.ndjson` path. Transcripts live under `{workspace}/.monkeybot/transcripts/` and exist only when `runtime.transcript_enabled` is true in `monkeybot.yaml`.
21
+
22
+ From the monkeybot repo:
23
+
24
+ ```bash
25
+ uv run monkeybot trace list --cwd <agent-root>
26
+ uv run monkeybot trace digest <session-id-or-path> --cwd <agent-root>
27
+ ```
28
+
29
+ If the user does not name a session, run `trace list` and suggest the session with the highest `score`. Say which one you are using. Do not retro every session.
30
+
31
+ ## Read
32
+
33
+ 1. Run `uv run monkeybot trace digest <id>`. That output is already resolved. Do not hand-expand `text_seq`, `result_seq`, `schema_seq`, `content_seq`, or `base_seq` diffs.
34
+ 2. Open one record only when the digest line is not enough: `uv run monkeybot trace digest <id> --seq N`. Repeat `--seq` for a few records, not the whole file.
35
+ 3. Subagent work is inlined under the `task` call that started it, from `{session}/subagents/`. Runs the digest cannot tie to a call appear under `Unlinked subagent runs`. If a line says `no child transcript`, say so and do not invent what the child did.
36
+ 4. A `--seq` record with `text_error: diff_mismatch` was written by an older harness whose prompt diff cannot be rebuilt. Do not quote its text.
37
+
38
+ A smooth digest (score 0, short timeline, no interventions) has little to teach. Say that and stop.
39
+
40
+ ## Find struggle moments
41
+
42
+ Every candidate must cite one or more `@seq` lines from this digest. Discard any candidate you cannot point at a specific moment. Do not fill categories with generic advice.
43
+
44
+ Look for:
45
+
46
+ - Tool errors, especially the same `error_kind` more than once
47
+ - `HarnessIntervention` (`doom_loop`, `truncated_batch`, `empty_completion`, `post_tool_empty`, `background_jobs_nudge`, `compaction_fallback`, `max_turns`, `verifier_replan`)
48
+ - Steers, verifier verdicts, empty assistant replies, context summaries
49
+ - Slow tools and repeated identical calls
50
+ - A long search before a fact that a pointer would have named
51
+ - A subagent that struggled while the parent looked fine
52
+
53
+ ## Classify
54
+
55
+ Put each moment in one category. The category decides where the fix goes.
56
+
57
+ | What went wrong | Propose |
58
+ | --- | --- |
59
+ | Slow to find a fact | A navigation pointer in the agent's `AGENT.md`, a skill description, or a memory entry |
60
+ | A mechanical mistake | An inspector or `PRE_TOOL` hook, tighter tool-schema validation, `permissions.yaml` or a path grant, or a guard threshold |
61
+ | A judgement-call miss | A verifier criterion. The verifier is the reviewer. |
62
+ | Bloated `AGENT.md` or harness prompt (`src/monkeybot/core/prompts/harness_prompt.py`) | Move the steering into an on-demand skill, or delete the no-op lines |
63
+ | An expensive tool call | Trim tool output, spill it to a file, or load tools progressively |
64
+ | Missing information or access | An MCP server, a tool, or wider permissions |
65
+ | The agent behaved reasonably and the harness misbehaved | A code fix plus a regression test in `tests/`, or an eval scenario in `evals/scenarios/` |
66
+
67
+ ## Rules
68
+
69
+ - A mechanical problem gets a check that can fail, never a sentence in a steering file.
70
+ - `AGENT.md` gets navigation pointers only. Do not add new standing rules there, and do not add them to a root `AGENTS.md` or `CLAUDE.md`.
71
+ - If a check already exists but is not wired up, the fix is to wire it, not to write a second one.
72
+ - A missing guardrail (no test or eval covers this failure) is its own finding.
73
+ - Rank by severity for the next session, not by how loud the log line was. A quiet expensive miss can outrank a noisy cheap one. Say that the order is a draft.
74
+ - Do not propose deleting lint rules, hooks, or CI jobs from other sessions. This skill sees one transcript.
75
+
76
+ ## Output
77
+
78
+ Ranked candidates, most severe first. For each one:
79
+
80
+ 1. **Moment** — quote the digest lines and their `@seq` numbers.
81
+ 2. **Category** — one row from the table.
82
+ 3. **Target** — the exact file or config key.
83
+ 4. **Change** — the proposed check, pointer, criterion, or deletion, in a few lines. Not a patch yet.
84
+
85
+ Then stop and ask which candidates to apply. Do not edit files, install hooks, or change `monkeybot.yaml` before that.
@@ -35,7 +35,6 @@
35
35
  ### Infra
36
36
  - **Postgres as production default** — backend exists; gateway still defaults to SQLite; decide when/if this becomes the default.
37
37
  - **Firestore usage aggregation doesn't scale** — `FirestoreUsageStore.summary()`/`breakdown()` (agent-wide, no `thread_id`) stream the entire `turn_usage` collection into memory and aggregate in Python. Fine at small scale; revisit with a Firestore aggregation query or a scheduled rollup doc if `/usage` traffic or data volume grows.
38
- - **Knowledge ANN index (sqlite-vec)** — deliberately deferred. The numpy matrix cache in `sqlite_vector.py` holds through ~50–100k chunks and query cost is embed-API bound, not local ANN. Revisit only if measured ANN p95 exceeds ~20–50 ms or the resident matrix causes RAM pressure; the true scale escape hatch is `store.type: pgvector`, not `sqlite-vec` packaging.
39
38
 
40
39
  ### MCP
41
40
  - **MCP distro linkage** — confirm scaffolded `monkeybot.yaml` paths (`paths.mcp_config`, `paths.skills_path`) match deployment; smoke-test against real MCP servers beyond the bundled examples.
@@ -6,6 +6,54 @@ the project adheres to [Semantic Versioning](https://semver.org/).
6
6
 
7
7
  ## [Unreleased]
8
8
 
9
+ ### CLI
10
+
11
+ ### Added
12
+
13
+ - `monkeybot trace list` and `monkeybot trace digest` turn a session transcript into a resolved timeline, with each subagent run shown under the `task` call that started it. In chat, `/export-trace` copies the whole session directory. The `mb-retro` skill proposes environment fixes from one hard session and does not edit anything until you pick a candidate.
14
+
15
+ ## [core v3.8.0] - 2026-10-07
16
+
17
+ ### Added
18
+
19
+ - Stored chat history can branch. Rows keep a stable `row_id`. `POST /sessions/{id}/branches` edits, regenerates, rewinds, or restores from an anchor; truncate shortens the active thread in place; fork copies a prefix into a new session. A summarized prefix stays read-only unless the cut keeps that summary. Queued follow-ups drain onto the branch that becomes active. Goal ledger and tracker state carry across a rewrite. Older databases rebuild `session_branches` on startup, including Postgres.
20
+ - Session transcripts record harness guard hits as `HarnessIntervention` (not sent on SSE) and write each subagent run under the parent session's `subagents/` directory when `runtime.transcript_enabled` is on.
21
+
22
+ ### Fixed
23
+
24
+ - Transcript prompt diffs no longer drop changed lines that start with `--` or `++`, such as a removed `---` rule. Diffs already written that way are flagged as `text_error: diff_mismatch` when read instead of being rebuilt wrong.
25
+ - A background `run_command` in the sandbox keeps running after launch returns.
26
+
27
+ ### Removed
28
+
29
+ - The workspace knowledge index and the `search` tool. Agents explore the workspace with `grep` and `glob`, then `read_file`. Memory search, web search, and browser DOM indexing are unchanged.
30
+ - The `knowledge-ast` and `knowledge-media` extras. Installs that still request them get an unknown-extra warning; drop them from agent deps.
31
+ - `numpy` is no longer a core dependency.
32
+
33
+ ### Changed
34
+
35
+ - A leftover `knowledge:` section in `monkeybot.yaml` is warned once and ignored. Old index files (`index.sqlite`, `.monkeybot/knowledge/`) are no longer read and can be deleted.
36
+ - The `Evidence:` path guard moved to `core/hooks/evidence_guard.py` and is always registered by the gateway. Before, it ran only when `knowledge.enabled` was on.
37
+
38
+ ## [core v3.7.0] - 2026-09-30
39
+
40
+ ### Added
41
+
42
+ - `run_command` can start a long command in the background and return `job_id` and `log_path` immediately. `await_command` pages its output until it exits, and `kill_command` stops it, on the local terminal and in the OpenSandbox executor. A turn cannot finish while a job is still running; leftover jobs are killed when the turn ends. The sandbox renews its lease while a job runs, up to the job time ceiling.
43
+
44
+ ## [browser v0.8.1] - 2026-09-28
45
+
46
+ ### Fixed
47
+
48
+ - The per-chat browser IPC router honors browser-harness 0.1.13's response timeout, so browser tools can drive the page again.
49
+
50
+ ## [browser v0.8.0] - 2026-09-27
51
+
52
+ ### Added
53
+
54
+ - Each Spaces chat gets its own browser daemon, tab registry, and lock, so simultaneous chats no longer restart each other or drop tab aliases. Local Chrome and AgentCore stay on one shared browser. An idle daemon stops after 15 minutes and keeps that chat's tab aliases for the next call.
55
+ - The per-chat tab cap is 10. When Spaces refuses a tab because the app-wide live-tab cap is full, the tool returns `tab_limit_reached` with `"scope": "app"` instead of this chat's limit.
56
+
9
57
  ## [core v3.6.1] - 2026-09-26
10
58
 
11
59
  ### Fixed
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: monkeybot
3
- Version: 3.6.1
3
+ Version: 3.8.0
4
4
  Summary: monkeybot agent harness — FastAPI SSE gateway, owned loop, SQLite, and MCP.
5
5
  License: MIT
6
6
  License-File: LICENSE
@@ -10,7 +10,6 @@ Requires-Dist: fastapi>=0.115.0
10
10
  Requires-Dist: google-genai>=1.0.0
11
11
  Requires-Dist: httpx>=0.27.0
12
12
  Requires-Dist: mcp<2,>=1.27.1
13
- Requires-Dist: numpy<2.5,>=1.26.0
14
13
  Requires-Dist: pillow>=10.0.0
15
14
  Requires-Dist: pydantic>=2.10.0
16
15
  Requires-Dist: python-dotenv>=1.0.0
@@ -48,11 +47,6 @@ Provides-Extra: huggingface
48
47
  Requires-Dist: openai>=1.0; extra == 'huggingface'
49
48
  Requires-Dist: pypdf>=6.14.2; extra == 'huggingface'
50
49
  Requires-Dist: tiktoken>=0.7.0; extra == 'huggingface'
51
- Provides-Extra: knowledge-ast
52
- Requires-Dist: tree-sitter-language-pack>=1.6; extra == 'knowledge-ast'
53
- Provides-Extra: knowledge-media
54
- Requires-Dist: pypdf>=6.14.2; extra == 'knowledge-media'
55
- Requires-Dist: python-docx>=1.1.0; extra == 'knowledge-media'
56
50
  Provides-Extra: memory
57
51
  Requires-Dist: mempalace<4,>=3.7.0; extra == 'memory'
58
52
  Provides-Extra: nvidia
@@ -41,7 +41,7 @@ _EDIT_TOOLS = frozenset(
41
41
  {"write_file", "write", "edit_file", "apply_patch", "str_replace"}
42
42
  )
43
43
  _PATH_TOOLS = _READ_TOOLS | _EDIT_TOOLS
44
- _SEARCH_TOOLS = frozenset({"grep", "search", "web_search"})
44
+ _SEARCH_TOOLS = frozenset({"grep", "web_search"})
45
45
  _HINT_KEYS = frozenset(
46
46
  {
47
47
  "argv",
@@ -105,7 +105,7 @@ _SLASH_SPECS: tuple[tuple[str, str], ...] = (
105
105
  ("/timestamps", "Toggle turn timestamps"),
106
106
  ("/copy", "Copy last assistant reply"),
107
107
  ("/export", "Export transcript to a markdown file"),
108
- ("/export-trace", "Export full debug trace (ndjson) for evals"),
108
+ ("/export-trace", "Export the debug trace directory (ndjson + subagents)"),
109
109
  ("/bye", "Exit chat"),
110
110
  )
111
111
 
@@ -1686,10 +1686,10 @@ class ChatApp(App[int]):
1686
1686
  )
1687
1687
  return
1688
1688
  ts = datetime.now().strftime("%Y%m%d_%H%M%S")
1689
- dest = self.agent_root / "data" / f"trace_export_{ts}.ndjson"
1689
+ dest = self.agent_root / "data" / f"trace_export_{ts}"
1690
1690
  try:
1691
1691
  dest.parent.mkdir(parents=True, exist_ok=True)
1692
- shutil.copyfile(src, dest)
1692
+ shutil.copytree(session_dir, dest)
1693
1693
  except OSError as exc:
1694
1694
  self._mount_system(f"Trace export failed: {exc}", error=True)
1695
1695
  return
@@ -0,0 +1,174 @@
1
+ """monkeybot trace — list and digest session transcripts."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import argparse
6
+ import json
7
+ import sys
8
+ from pathlib import Path
9
+
10
+ from monkeybot.core.layout import resolve_workspace_root
11
+ from monkeybot.core.persistence.transcript import (
12
+ TRANSCRIPT_FILENAME,
13
+ resolve_session_artifact_dir,
14
+ )
15
+ from monkeybot.core.persistence.transcript_reader import (
16
+ build_digest,
17
+ digest_to_json,
18
+ iter_session_dirs,
19
+ records_by_seq,
20
+ render_digest_markdown,
21
+ scan_session_signals,
22
+ )
23
+
24
+ from monkeybot_cli.config_resolve import resolve_agent_root, resolve_config
25
+
26
+
27
+ def _workspace(args: argparse.Namespace) -> Path:
28
+ cwd = Path(args.cwd).expanduser().resolve() if args.cwd else None
29
+ config_path = resolve_config(args.config, cwd=cwd)
30
+ agent_root = resolve_agent_root(cwd=cwd, config_path=config_path)
31
+ return resolve_workspace_root(agent_root=agent_root, config_path=config_path)
32
+
33
+
34
+ def _transcripts_root(workspace: Path) -> Path:
35
+ return workspace / ".monkeybot" / "transcripts"
36
+
37
+
38
+ def _resolve_target(raw: str | None, workspace: Path) -> Path | None:
39
+ """Session directory from an id, a directory, or a transcript.ndjson path."""
40
+ if raw:
41
+ candidate = Path(raw).expanduser()
42
+ if candidate.is_file() and candidate.name == TRANSCRIPT_FILENAME:
43
+ return candidate.parent
44
+ if candidate.is_dir() and (candidate / TRANSCRIPT_FILENAME).is_file():
45
+ return candidate
46
+ session_dir = resolve_session_artifact_dir(workspace, raw)
47
+ if (session_dir / TRANSCRIPT_FILENAME).is_file():
48
+ return session_dir
49
+ return None
50
+ sessions = iter_session_dirs(_transcripts_root(workspace))
51
+ return sessions[0] if sessions else None
52
+
53
+
54
+ def _print_list(workspace: Path, *, as_json: bool) -> int:
55
+ sessions = iter_session_dirs(_transcripts_root(workspace))
56
+ rows = []
57
+ for session_dir in sessions:
58
+ signals = scan_session_signals(session_dir)
59
+ rows.append(
60
+ {
61
+ "dir": session_dir.name,
62
+ "path": str(session_dir),
63
+ "score": signals.score(),
64
+ "errors": sum(signals.tool_errors.values()),
65
+ "interventions": sum(signals.interventions.values()),
66
+ "steers": signals.steers,
67
+ "verdicts": signals.verdicts,
68
+ "empty": signals.empty_assistant,
69
+ "summaries": signals.summaries,
70
+ "slow": len(signals.slow_tools),
71
+ "repeated": len(signals.repeated_calls),
72
+ }
73
+ )
74
+ if as_json:
75
+ print(json.dumps(rows, indent=2))
76
+ return 0
77
+ if not rows:
78
+ print(f"No transcripts under {_transcripts_root(workspace)}")
79
+ return 0
80
+ for row in rows:
81
+ print(
82
+ f"{row['dir']} score={row['score']} errors={row['errors']} "
83
+ f"interventions={row['interventions']} steers={row['steers']} "
84
+ f"verdicts={row['verdicts']} empty={row['empty']} "
85
+ f"summaries={row['summaries']} slow={row['slow']} repeated={row['repeated']}"
86
+ )
87
+ return 0
88
+
89
+
90
+ def _read_failure(exc: OSError) -> int:
91
+ print(f"Transcript read failed: {exc}", file=sys.stderr)
92
+ return 1
93
+
94
+
95
+ def run_trace_list(args: argparse.Namespace) -> int:
96
+ try:
97
+ return _print_list(_workspace(args), as_json=bool(args.json))
98
+ except OSError as exc:
99
+ return _read_failure(exc)
100
+
101
+
102
+ def run_trace_digest(args: argparse.Namespace) -> int:
103
+ workspace = _workspace(args)
104
+ try:
105
+ session_dir = _resolve_target(args.target, workspace)
106
+ if session_dir is None:
107
+ target = args.target or "(latest)"
108
+ print(f"No transcript found for {target}", file=sys.stderr)
109
+ return 1
110
+ seqs = args.seq or []
111
+ if seqs:
112
+ found = records_by_seq(session_dir, seqs)
113
+ missing = False
114
+ for seq in seqs:
115
+ record = found.get(seq)
116
+ if record is None:
117
+ print(f"No record with seq {seq} in {session_dir}", file=sys.stderr)
118
+ missing = True
119
+ continue
120
+ print(json.dumps(record, ensure_ascii=False, indent=2, default=str))
121
+ return 1 if missing else 0
122
+ digest = build_digest(session_dir, full=bool(args.full))
123
+ except OSError as exc:
124
+ return _read_failure(exc)
125
+ if args.json:
126
+ print(json.dumps(digest_to_json(digest), ensure_ascii=False, indent=2, default=str))
127
+ return 0
128
+ print(render_digest_markdown(digest, max_chars=args.max_chars))
129
+ return 0
130
+
131
+
132
+ def register(subparsers: argparse._SubParsersAction[argparse.ArgumentParser]) -> None:
133
+ trace = subparsers.add_parser(
134
+ "trace",
135
+ help="List and digest session transcripts for debugging and retros",
136
+ )
137
+ sub = trace.add_subparsers(dest="trace_command", required=True)
138
+ common = argparse.ArgumentParser(add_help=False)
139
+ common.add_argument("--cwd", help="Agent project root")
140
+ common.add_argument("--config", help="Path to monkeybot.yaml")
141
+
142
+ listing = sub.add_parser(
143
+ "list",
144
+ parents=[common],
145
+ help="List captured sessions, newest first",
146
+ )
147
+ listing.add_argument("--json", action="store_true", help="JSON output")
148
+ listing.set_defaults(func=run_trace_list)
149
+
150
+ digest = sub.add_parser(
151
+ "digest",
152
+ parents=[common],
153
+ help="Condensed timeline of one session",
154
+ )
155
+ digest.add_argument(
156
+ "target",
157
+ nargs="?",
158
+ help="Session id, session directory, or transcript.ndjson path (default: newest)",
159
+ )
160
+ digest.add_argument("--json", action="store_true", help="JSON output")
161
+ digest.add_argument("--full", action="store_true", help="Do not clip excerpts")
162
+ digest.add_argument(
163
+ "--max-chars",
164
+ type=int,
165
+ default=0,
166
+ help="Cap markdown length (0 = no cap)",
167
+ )
168
+ digest.add_argument(
169
+ "--seq",
170
+ type=int,
171
+ action="append",
172
+ help="Print one resolved record instead of the digest (repeatable)",
173
+ )
174
+ digest.set_defaults(func=run_trace_digest)
@@ -5,7 +5,7 @@ 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, validate
8
+ from monkeybot_cli.commands import chat, doctor, loop, new, refresh, run_cmd, talk, trace, validate
9
9
  from monkeybot_cli.runtime_python import RuntimeUpgradeError, report_runtime_upgrade_error
10
10
 
11
11
 
@@ -24,6 +24,7 @@ def build_parser() -> argparse.ArgumentParser:
24
24
  chat.register(sub)
25
25
  talk.register(sub)
26
26
  loop.register(sub)
27
+ trace.register(sub)
27
28
  return parser
28
29
 
29
30
 
@@ -111,8 +111,6 @@ def extra_module(extra: str) -> str:
111
111
  "cli": "typer",
112
112
  "cli-realtime": "pyaudio",
113
113
  "evals": "deepeval",
114
- "knowledge-ast": "tree_sitter_language_pack",
115
- "knowledge-media": "pypdf",
116
114
  }
117
115
  return mapping.get(extra, extra)
118
116
 
@@ -34,8 +34,9 @@ only. Pass `expected_origin` so a login cannot land on the wrong site, and check
34
34
  the returned `origin` before reporting success.
35
35
 
36
36
  Tabs use aliases (`t1`, `t2`, …). Reads (`get_elements`, `page_info`, `js`,
37
- `read_tabs`) never move focus; actions do. At most five agent-controlled tabs —
38
- if you hit the cap, ask the user which to close, then `browser_close_tab`. Close
37
+ `read_tabs`) never move focus; actions do. At most 10 agent-controlled tabs —
38
+ if you hit the cap, ask the user which to close, then `browser_close_tab`. If the
39
+ error scope is `app`, the Spaces window is full across chats, not this chat's cap. Close
39
40
  tabs you opened. `browser_login` still targets the tab the user has focused.
40
41
 
41
42
  Finish browser sessions with `browser_stop`.
@@ -147,33 +147,6 @@ emission:
147
147
  # (any value other than the terse-set means off).
148
148
  style: off
149
149
 
150
- # Unified knowledge layer: local FTS + ANN embeddings + note↔workspace links + search.
151
- # Embeddings stay off by default until configured.
152
- # Index path is always {root}/index.sqlite (not configurable).
153
- knowledge:
154
- enabled: true
155
- search:
156
- default_limit: 10
157
- indexer:
158
- chunk_tokens: 700
159
- chunk_overlap_ratio: 0.12
160
- embeddings:
161
- enabled: false
162
- # provider: nvidia | openai | voyage | gemini | openai_compatible
163
- # model / dimensions / base_url are optional — per-provider defaults apply.
164
- provider: nvidia
165
- # model: nvidia/nemotron-3-embed-1b # openai → text-embedding-3-small
166
- # dimensions: 1024 # openai → 1536; voyage → 512; gemini → 768
167
- # base_url: https://integrate.api.nvidia.com/v1
168
- # openai → https://api.openai.com/v1
169
- # voyage → https://api.voyageai.com/v1
170
- # openai_compatible → required (custom gateway)
171
- batch_size: 32
172
- # Auth env (by provider): NVIDIA_API_KEY | OPENAI_API_KEY | VOYAGE_API_KEY | GEMINI_API_KEY
173
- store:
174
- type: sqlite
175
- path: .monkeybot/knowledge/vectors.sqlite
176
-
177
150
  subagents:
178
151
  timeout_sec: 600
179
152
  max_turns: 1000
@@ -241,6 +214,14 @@ sandbox:
241
214
  server_url: http://localhost:18080
242
215
  image: python:3.12
243
216
  ttl_seconds: 1800
217
+ # Background command caps. Jobs longer than max_job_seconds fail and should
218
+ # move to a broker-owned build. renew_interval_seconds extends the worker
219
+ # while a job is running (0 renews once at start). await_* bounds await_command.
220
+ max_background_jobs: 4
221
+ max_job_seconds: 3300
222
+ renew_interval_seconds: 300
223
+ await_default_wait_seconds: 300
224
+ await_max_wait_seconds: 600
244
225
  # Set false only for a remote sandbox server with no shared filesystem. It
245
226
  # then runs compute-only commands and refuses workspace/skills file access.
246
227
  shared_filesystem: true
@@ -641,7 +641,7 @@ def test_slash_export_trace_no_session(tmp_path: Path) -> None:
641
641
  async with app.run_test() as pilot:
642
642
  app.query_one("#prompt", Composer).post_message(Composer.Submitted("/export-trace"))
643
643
  await pilot.pause()
644
- assert not list((tmp_path / "data").glob("trace_export_*.ndjson"))
644
+ assert not list((tmp_path / "data").glob("trace_export_*"))
645
645
 
646
646
  asyncio.run(_run())
647
647
 
@@ -665,11 +665,20 @@ def test_slash_export_trace_copies_ndjson(tmp_path: Path) -> None:
665
665
  (session_dir / "transcript.ndjson").write_text(
666
666
  '{"seq":1,"type":"SessionManifest"}\n', encoding="utf-8"
667
667
  )
668
+ child = session_dir / "subagents" / "child-1"
669
+ child.mkdir(parents=True)
670
+ (child / "transcript.ndjson").write_text(
671
+ '{"seq":1,"type":"UserMessage"}\n', encoding="utf-8"
672
+ )
668
673
  app.query_one("#prompt", Composer).post_message(Composer.Submitted("/export-trace"))
669
674
  await pilot.pause()
670
- exports = list((tmp_path / "data").glob("trace_export_*.ndjson"))
675
+ exports = list((tmp_path / "data").glob("trace_export_*"))
671
676
  assert len(exports) == 1
672
- assert exports[0].read_text(encoding="utf-8") == '{"seq":1,"type":"SessionManifest"}\n'
677
+ assert exports[0].is_dir()
678
+ assert (exports[0] / "transcript.ndjson").read_text(encoding="utf-8") == (
679
+ '{"seq":1,"type":"SessionManifest"}\n'
680
+ )
681
+ assert (exports[0] / "subagents" / "child-1" / "transcript.ndjson").is_file()
673
682
 
674
683
  asyncio.run(_run())
675
684
 
@@ -0,0 +1,85 @@
1
+ """CLI coverage for `monkeybot trace list` and `digest`."""
2
+
3
+ from __future__ import annotations
4
+
5
+ import json
6
+ from pathlib import Path
7
+
8
+ import pytest
9
+
10
+ from monkeybot_cli.main import main
11
+
12
+
13
+ def _session(tmp_path: Path) -> Path:
14
+ session = tmp_path / "workspace" / ".monkeybot" / "transcripts" / "20260101T000000Z_sess-1"
15
+ session.mkdir(parents=True)
16
+ records = [
17
+ {"type": "SessionManifest", "session_id": "sess-1", "model": "m"},
18
+ {"seq": 1, "type": "UserMessage", "content": "hello"},
19
+ {
20
+ "seq": 2,
21
+ "type": "HarnessIntervention",
22
+ "intervention": "doom_loop",
23
+ "detail": "stuck",
24
+ "inner_turn": 1,
25
+ },
26
+ {"seq": 3, "type": "ProviderResponse", "text": "recovered", "tool_requests": []},
27
+ ]
28
+ (session / "transcript.ndjson").write_text(
29
+ "".join(json.dumps(row) + "\n" for row in records),
30
+ encoding="utf-8",
31
+ )
32
+ return session
33
+
34
+
35
+ def test_trace_list_digest_and_seq(tmp_path: Path, capsys: pytest.CaptureFixture[str]) -> None:
36
+ _session(tmp_path)
37
+ assert main(["trace", "list", "--cwd", str(tmp_path)]) == 0
38
+ listed = capsys.readouterr().out
39
+ assert "sess-1" in listed
40
+ assert "interventions=1" in listed
41
+ assert "score=1" in listed
42
+
43
+ assert main(["trace", "digest", "sess-1", "--cwd", str(tmp_path)]) == 0
44
+ digest = capsys.readouterr().out
45
+ assert "@seq 2" in digest
46
+ assert "doom_loop" in digest
47
+ assert "recovered" in digest
48
+
49
+ assert main(["trace", "digest", "sess-1", "--cwd", str(tmp_path), "--seq", "2"]) == 0
50
+ record = json.loads(capsys.readouterr().out)
51
+ assert record["intervention"] == "doom_loop"
52
+ assert record["detail"] == "stuck"
53
+
54
+
55
+ def test_trace_digest_missing_session(tmp_path: Path, capsys: pytest.CaptureFixture[str]) -> None:
56
+ assert main(["trace", "digest", "missing", "--cwd", str(tmp_path)]) == 1
57
+ err = capsys.readouterr().err
58
+ assert "No transcript found" in err
59
+
60
+
61
+ def test_trace_read_failure_exits_nonzero(
62
+ tmp_path: Path, capsys: pytest.CaptureFixture[str]
63
+ ) -> None:
64
+ session = _session(tmp_path)
65
+ ndjson = session / "transcript.ndjson"
66
+ ndjson.chmod(0)
67
+ try:
68
+ assert main(["trace", "digest", "sess-1", "--cwd", str(tmp_path)]) == 1
69
+ assert "Transcript read failed" in capsys.readouterr().err
70
+ assert main(["trace", "list", "--cwd", str(tmp_path)]) == 1
71
+ assert "Transcript read failed" in capsys.readouterr().err
72
+ finally:
73
+ ndjson.chmod(0o644)
74
+
75
+
76
+ def test_trace_digest_unreadable_root_exits_nonzero(
77
+ tmp_path: Path, capsys: pytest.CaptureFixture[str]
78
+ ) -> None:
79
+ root = _session(tmp_path).parent
80
+ root.chmod(0)
81
+ try:
82
+ assert main(["trace", "digest", "--cwd", str(tmp_path)]) == 1
83
+ assert "Transcript read failed" in capsys.readouterr().err
84
+ finally:
85
+ root.chmod(0o755)