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