monkeybot 3.1.0__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.1.0 → monkeybot-3.2.0}/CHANGELOG.md +18 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/PKG-INFO +1 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/browser-mcp.md +30 -2
- monkeybot-3.2.0/docs/live-evals.md +112 -0
- monkeybot-3.2.0/docs/verifier-agent-design.md +828 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/assertions.py +77 -5
- monkeybot-3.2.0/evals/baselines/smoke.json +408 -0
- monkeybot-3.2.0/evals/baselines/smoke.md +55 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/models.py +14 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/runner.py +44 -2
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/context/summarization_trigger.yaml +1 -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.1.0 → monkeybot-3.2.0}/evals/scenarios/mcp/get_prompt.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/mcp/list_resources.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/mcp/tool_invoke.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/memory/recall_cross_session.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/memory/recall_single_session.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/multi_turn/task_tracking.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/skills/skill_invocation.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/subagents/dispatch_complete.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_read.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_read_error.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_run_command.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenarios/tools/core_write.yaml +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scorer.py +11 -0
- monkeybot-3.2.0/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +53 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +2 -2
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/pyproject.toml +1 -1
- monkeybot-3.2.0/evals/smoke_agent/uv.lock +3851 -0
- monkeybot-3.2.0/evals/suites/drift.yaml +10 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_assertions.py +84 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_runner_sse.py +53 -3
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/app.py +19 -2
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +32 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/login.py +105 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +2 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +27 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +39 -17
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +415 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_tool_surface.py +1 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/pyproject.toml +1 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/tools.py +3 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/tools.py +1 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/__init__.py +8 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/runtime_env.py +2 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/settings.py +231 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/snapshot.py +30 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/__init__.py +21 -0
- monkeybot-3.2.0/src/monkeybot/core/context/secret_egress.py +443 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/backends.py +3 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/firestore.py +6 -1
- monkeybot-3.2.0/src/monkeybot/core/persistence/goal_ledger.py +447 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/postgres.py +3 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/sqlite.py +16 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/sqlite_backend.py +9 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/events.py +110 -5
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/history_compaction.py +134 -21
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/input_admission.py +29 -13
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop.py +8 -3
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_hooks.py +56 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/tool_dispatch.py +8 -2
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/turn_loop.py +248 -30
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/core_tool_executor.py +126 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/types/content_blocks.py +10 -2
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/types/types_tools.py +9 -6
- 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.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/app.py +130 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/sqlite_exporter.py +28 -2
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/gemini.py +6 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_config_extensions.py +90 -3
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_content_blocks.py +1 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_core_tool_executor.py +159 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_durable_events.py +6 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_events.py +36 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_gemini_history_replay.py +27 -1
- monkeybot-3.2.0/tests/core/test_goal_ledger.py +690 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_history.py +30 -5
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_history_compaction_split.py +107 -1
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_input_admission.py +21 -4
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_loop_hooks.py +107 -0
- monkeybot-3.2.0/tests/core/test_progress_tracker.py +738 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_runtime_config_snapshot.py +56 -0
- monkeybot-3.2.0/tests/core/test_secret_egress.py +466 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_storage_backends.py +9 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_tool_def_schema.py +1 -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.1.0 → monkeybot-3.2.0}/tests/evals/scenario_runner.py +14 -3
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/test_agent_behavior.py +2 -12
- monkeybot-3.2.0/tests/evals/test_verifier_port.py +30 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_sqlite_exporter.py +54 -0
- monkeybot-3.1.0/docs/live-evals.md +0 -65
- monkeybot-3.1.0/evals/smoke_agent/uv.lock +0 -2332
- {monkeybot-3.1.0 → monkeybot-3.2.0}/.dockerignore +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/.github/workflows/ci.yml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/.github/workflows/live-eval-smoke.yml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/.github/workflows/prepare-release.yml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/.github/workflows/publish-release.yml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/.gitignore +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/.pre-commit-config.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/BACKLOG.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/CONTRIBUTING.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/LICENSE +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/README.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/pyproject.toml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/skills/monkeybot/SKILL.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_session.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_tool_display.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_tui.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/compat.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/main.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/output.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/providers.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_continue.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_e2e.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_errors.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_file_index.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_grounding.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_local_shell.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_renderer_parity.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_session.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_status_bar.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_theme.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_tool_display.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_chat_tui.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_cli.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_config_resolve.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_doctor.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_extras_catalog.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_gateway_health.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_realtime_session_controller.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_run_cmd.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_runtime_python.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_scaffold.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/tests/test_terminal_markdown.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/cli/uv.lock +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/Dockerfile +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/demo-model.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/demo.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/docker-compose.sandbox.yml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/opensandbox.docker.toml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docker/sandbox.Dockerfile +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docker-compose.yml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/agent-layout.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/assets/logo.png +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/browser-mcp-perf-baseline.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/browser-mcp-performance-plan.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/cloud-deployment-design.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-aws-agentcore.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-pattern-a-container.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-pattern-b-serverless.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/deploy-pattern-d-realtime.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/features.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/getting-started.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/knowledge-layer-fixes.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/mcp.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/memory-graph-split-plan.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/migrations/agent-scope-namespacing.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/migrations/memory-outbox.sql +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/observability-runbook.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/ollama-local.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/otel-collector.example.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/progressive-loop-tools.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/progressive-mcp-tools.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/skills.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/spill-dynamic-design.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/sse-gateway-ui.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/docs/workspace-index-design.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/TEST_COVERAGE.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/diff.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/eval_config.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/persistence.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/report.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/scenario_loader.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/.env.example +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/.gitignore +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/suites/smoke.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_diff.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_judge.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_report.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/evals/test_scorer.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/README.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/agentcore/handler.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/agentcore/runtime_app.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/agentengine/handler.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/cloud-functions/main.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/lambda/handler.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/ollama/PrefixStable.Modelfile +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/browser/SKILL.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/diagnostics/README.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/diagnostics/SKILL.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/diagnostics/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/diagnostics/diagnostics.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/image-generator/SKILL.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/examples/skills/image-generator/generate_image.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/pyproject.toml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/backend.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/server.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/conftest.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_act.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_agentcore.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_fill_form.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_indexed_tools.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_observe.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_observe_after.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_perf.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_playbook_flows.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_server_shutdown.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_tabs.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/tests/test_wait_tools.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/integrations/browser-mcp/uv.lock +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/pytest.ini +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/scripts/create_schema.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/scripts/precommit-pytest.sh +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/scripts/release.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/scripts/smoke_global_cli.sh +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/__main__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/audio_io.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/gateway_manager.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/main.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/push_to_talk.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/cli/realtime_client.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/approvals.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/permissions.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/computer/safety.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/catalog.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/config.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/freeze.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/resolve.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/store.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/attachments/text.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/bootstrap.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/realtime_config.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/validation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/campaign_context.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/common.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/epoch.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/tool_result_ingress.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/context/tool_shapers.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/hooks/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/captions.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/chunking.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/config.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/base.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/factory.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/gemini.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/nvidia.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/openai_compat.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/embeddings/sanitize.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/evidence_guard.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/extractors.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/fusion.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/hook.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/indexer.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/links.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/salience.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/sqlite_index.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/subsystem.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/tool.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/knowledge/types.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/layout.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/llm/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/llm/provider.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/llm/usage.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/lockfile_names.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/logging_utils.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/mcp/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/mcp/mcp_client.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/config.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/hook.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/ids.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/ingest.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/observability.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/outbox.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/palace.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/subsystem.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/uri.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/memory/writer.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/messages/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/messages/tool_integrity.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/messages/transform_context.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/path_safety.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/db.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/errors.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/history.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/runs.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/sqlite_vector.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/thread_summary.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/transcript.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/usage.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/prompts/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/prompts/harness_prompt.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/prompts/headings.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/prompts/prompt.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/context_budget.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/doom_loop.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/loop_usage.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/realtime_loop.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/subagent_worker.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/subprocess_groups.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/testing/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/inspector.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/patch.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/permission.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/sandbox_executor.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/spill_inventory.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/terminal.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/tool_kind.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/types.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/tools/workspace_service.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/types/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/types/interfaces.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/factory.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/gcs.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/local.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/protocol.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace/s3.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/core/workspace_layout.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/bootstrap.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/main.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/app.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/manager.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/routes.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/session.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/realtime_main.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/models.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/reload.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/routes.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/session_bus.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/sse.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/_state.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/instrumentation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/propagation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/observability/spans.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/_openai_compat.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/_utils.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/bedrock.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/claude.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/gemini_live.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/huggingface.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/model_capabilities.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/nvidia.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/ollama.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/openai.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/openrouter.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/pricing.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/sampling.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/providers/vertex_claude.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scaffold/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/__main__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/engine.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/interval.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/tick_result.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/scheduler/worker.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/subagents/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/todo_list/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/todo_list/store.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/todo_list/tool.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/protocol.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/src/monkeybot/web_search/tool.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/acceptance/test_observability_acceptance.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/test_gateway_manager.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/test_main.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/test_push_to_talk.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/cli/test_realtime_client.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_approvals.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_computer_tools.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_package_init.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_path_policy.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_permissions.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_subagent_exclusion.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/computer/test_wiring.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/conftest.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/memory/helpers.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/memory/in_memory_palace.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/memory/test_mempalace.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/memory/test_review_fixes.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_agent_layout.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_attachment_freeze.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_attachment_store.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_bootstrap.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_context.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_context_budget.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_context_epoch.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_doom_loop.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_durable_runs.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_empty_completion.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_env_map_grep_gates.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_evidence_guard.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_firestore_history.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_firestore_usage.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_fs_isolation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_harness_prompt.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_hooks.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_inspector.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_chunking.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_chunking_rank.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_config.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_embeddings.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_fts.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_fusion.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_fusion_ann.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_hook.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_indexer.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_links.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_media.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_salience.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_single_writer.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_subsystem.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_knowledge_vectors.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_layout.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_logging_utils.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_loop.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_loop_observability.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_loop_transcript.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_mcp_client.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_memory_layout_migrate.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_message_pipeline.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_mocks_realtime_provider.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_patch.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_path_safety.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_permission.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_pricing.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_progress_publish.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_prompt.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_provider_contract.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_provider_stream_mapper.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_realtime_loop.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_replace_fuzzy.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_run_command_parse.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_runs.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_runtime_env.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_sandbox_executor.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_scheduled_loops.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_session_turn_locks.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_settlement.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_spill_dynamic.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_spill_inventory.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_subagent_proto.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_subagent_trace_propagation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_subagent_worker_paths.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_terminal.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_thread_summary_wire.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_tool_integrity.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_tool_result_ingress.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_tool_shapers.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_transcript.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_truncated_tool_batch.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_usage.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_usage_migration.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_utterance_buffer.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_worker_pool.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_workspace_layout.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_workspace_symlinks.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/test_workspace_write_scope.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/workspace/test_factory.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/workspace/test_local_storage.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/core/workspace/test_protocol_contract.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/eval_hook.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_read.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_search_knowledge.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/tool_write.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/evals/test_memory_knowledge_routing.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_app.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_deps.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_guardrails.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_manager.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_metrics.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_routes_client_text.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_session.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/realtime/test_wire.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_attachments.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_config_reload.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_create_session_model.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_gateway_runtime.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_routes.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_session_bus.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/sse/test_transcript_wiring.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_otel_fastapi.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_otel_lifespan.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_realtime_main.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_resolve_provider.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_sse_events.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/integration/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/integration/test_observability_integration.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/integration/test_prompt_caching_integration.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/conftest.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_init.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_instrumentation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_loop_hook_spans.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_propagation.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_span_contract.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_spans.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_truncate.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/observability/test_turn_complete_trace.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/conftest.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_anthropic_cache.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_anthropic_history.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_bedrock_converse.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_bedrock_estimate.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_gemini_history.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_gemini_live.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_gemini_usage.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_huggingface.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_model_capabilities.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_nvidia.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_ollama.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_openai_compat_usage.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_openai_history.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_pricing.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_sampling.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_sonnet5_sampling.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_source_grep_gates.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/providers/test_vertex_claude_history.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/scheduler/test_engine.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/scheduler/test_interval.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/skills/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/skills/test_generate_image_script.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/test_cold_start.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/test_packaging_config.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/test_release_script.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/todo_list/test_todo_list.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/web_search/__init__.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/tests/web_search/test_web_search.py +0 -0
- {monkeybot-3.1.0 → monkeybot-3.2.0}/uv.lock +0 -0
|
@@ -6,6 +6,24 @@ the project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
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
|
+
|
|
9
27
|
## [core v3.1.0] - 2026-09-05
|
|
10
28
|
|
|
11
29
|
### Breaking
|
|
@@ -191,18 +191,46 @@ synchronization layer.
|
|
|
191
191
|
|
|
192
192
|
## Tools
|
|
193
193
|
|
|
194
|
-
Navigation, interaction, screenshots, tabs, waits, playbooks (`browser_list_playbooks`, `browser_read_playbook`, `browser_write_playbook`, `browser_run_playbook`), `browser_login` for Spaces-saved passwords (returns `{ok, loggedIn, origin}` — never the password), and `browser_stop` for daemon cleanup.
|
|
194
|
+
Navigation, interaction, screenshots, tabs, waits, playbooks (`browser_list_playbooks`, `browser_read_playbook`, `browser_write_playbook`, `browser_run_playbook`), `browser_login` for Spaces-saved passwords (returns `{ok, loggedIn, origin, mfa?, mode?}` — never the password), and `browser_stop` for daemon cleanup.
|
|
195
195
|
|
|
196
196
|
### `browser_login` targets the focused tab
|
|
197
197
|
|
|
198
198
|
A sealed login runs in the tab the **user** has focused, because typing the credential requires Spaces to detach CDP from that tab first. Ordinary `browser_*` calls address tabs by CDP session id, so after `browser_switch_tab` — or if the user clicks another tab — the tab the agent is driving and the tab that receives the password are different ones.
|
|
199
199
|
|
|
200
|
-
Pass `expected_origin` to make the bridge refuse (`focused tab is on a different origin`) instead of signing in somewhere unintended, and check the returned `origin`. A saved credential is scoped to its own origin and
|
|
200
|
+
Pass `expected_origin` to make the bridge refuse (`focused tab is on a different origin`) instead of signing in somewhere unintended, and check the returned `origin`. A saved credential is scoped to its own origin and needs its own grant (`Never` / `Ask me` / `Always`) before the agent can use it, so a mismatch can never disclose another site's password — but it can still submit a login the user did not ask for.
|
|
201
201
|
|
|
202
202
|
A Spaces build predating `expectedOrigin` support ignores it and echoes no `origin`. Since that login cannot be verified after the fact, `browser_login` reports `in-app browser could not verify the origin` rather than a confirmed success; update Spaces to get the check.
|
|
203
203
|
|
|
204
204
|
Errors raised by browser tools are scrubbed of `?token=` values before they reach the agent: the in-app CDP token grants full control of the user's browser, and browser-harness echoes its endpoint in daemon log tails.
|
|
205
205
|
|
|
206
|
+
### `browser_login` fails closed
|
|
207
|
+
|
|
208
|
+
Spaces verifies its own scrub before returning: after typing the password (and a one-time code, if one was needed and available — see below) and submitting, it hashes every editable value left on the page and confirms none of them match what it just typed. If that check cannot be completed — the login did not clearly succeed or fail, or a same-origin iframe could not be checked — Spaces navigates the tab to the site's origin root itself and `browser_login` returns `login needs your attention` instead of guessing. Do not retry the call or attempt to type the password yourself when you see this error; tell the user to finish signing in in the Spaces browser. Calling `browser_get_text` or `browser_get_elements` afterward is safe either way: on this outcome, the page has already been navigated away from any form that held the secret.
|
|
209
|
+
|
|
210
|
+
### One-time codes (TOTP)
|
|
211
|
+
|
|
212
|
+
If the page shows a one-time-code field after the password step, `browser_login`'s result carries an `mfa` field:
|
|
213
|
+
|
|
214
|
+
- `"none"` — no OTP field appeared; nothing to report.
|
|
215
|
+
- `"completed"` — Spaces had a stored authenticator seed for this credential, generated the code, typed and submitted it itself. The password never left Spaces and neither did the code.
|
|
216
|
+
- `"needed"` — an OTP field appeared but no seed is stored. `browser_login` also returns the error `mfa needs your attention`; tell the user to add an authenticator for this site in Spaces' "Connected sites" panel (paste the `otpauth://` URI or the base32 secret from the site's QR setup) or finish signing in themselves. Do not retry.
|
|
217
|
+
|
|
218
|
+
### How the password reaches the request
|
|
219
|
+
|
|
220
|
+
`browser_login`'s result also carries a `mode` field: `"keystroke"` (the password was typed into the page, the default) or `"network"` (Spaces typed a harmless placeholder and rewrote the real password into the outgoing request itself, so the password never touched the page's DOM or JS). Both behave identically from the agent's side — this is informational only, set per credential in Spaces' "Connected sites" panel ("Auto" tries network first and remembers if a site doesn't support it).
|
|
221
|
+
|
|
222
|
+
### Grants and "ask" mode
|
|
223
|
+
|
|
224
|
+
Each saved credential has an agent-access grant: `Never` (default for imported passwords — the agent cannot use it at all), `Ask me` (the user is prompted every time, unless the request happens again within an already-approved run), or `Always` (a standing grant, replacing the old "Agent" checkbox). Grants can also be scoped to one run — an "Allow once" approval covers only the routine or chat that asked for it, and expires after 30 minutes or one use, whichever comes first.
|
|
225
|
+
|
|
226
|
+
In `Ask me` mode, `browser_login` blocks — up to 150s — while Spaces shows the user a prompt ("*Run* wants to sign in to *origin* as *username*") with "Allow once", "Always allow", and "Don't allow" buttons, gated by a click plus Touch ID on macOS. Three outcomes reach the agent:
|
|
227
|
+
|
|
228
|
+
- `waiting for your approval` — the user did not respond within the window, or another approval was already pending. Do not retry; tell the user their approval is (or was) needed.
|
|
229
|
+
- `agent access denied for this site` — the user declined, or the credential's grant is `Never`.
|
|
230
|
+
- `grant expired` — a scoped grant that once covered this exact run lapsed with no `Ask me` fallback to re-prompt through.
|
|
231
|
+
|
|
232
|
+
Every credential use — granted, denied, or needing attention — is recorded in Spaces' "Connected sites" panel (reachable from the Saved passwords strip) along with which run used it.
|
|
233
|
+
|
|
206
234
|
### Default: indexed DOM interaction (no screenshots needed)
|
|
207
235
|
|
|
208
236
|
`browser_get_elements`, `browser_click_by_index`, `browser_input_by_index`, and `browser_select_by_index` give the agent a **text-based, indexed** view of the page instead of screenshot + pixel coordinates — ported from [alibaba/page-agent](https://github.com/alibaba/page-agent)'s DOM-extraction engine (MIT licensed; see `src/browser_mcp/dom_indexing.py` and `src/browser_mcp/assets/` for provenance).
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
# Live evals
|
|
2
|
+
|
|
3
|
+
Run real-provider smoke scenarios against a live monkeybot gateway, score them, and optionally compare to a baseline. Complements deterministic loop evals under `tests/evals/` (fake provider / pytest).
|
|
4
|
+
|
|
5
|
+
**Fixture agent:** [`evals/smoke_agent/`](../evals/smoke_agent/)
|
|
6
|
+
**Workflow:** [`.github/workflows/live-eval-smoke.yml`](../.github/workflows/live-eval-smoke.yml)
|
|
7
|
+
**Suite:** [`evals/suites/smoke.yaml`](../evals/suites/smoke.yaml)
|
|
8
|
+
|
|
9
|
+
## Local run
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Terminal 1 — gateway
|
|
13
|
+
cd evals/smoke_agent
|
|
14
|
+
uv sync
|
|
15
|
+
export OLLAMA_API_KEY=… # ollama.com/settings/keys; extra is monkeybot[ollama]
|
|
16
|
+
# model.provider / model.name come from monkeybot_config/monkeybot.yaml (YAML-only)
|
|
17
|
+
export PORT=8787
|
|
18
|
+
export SANDBOX_ENABLED=false
|
|
19
|
+
uv run -m monkeybot.gateway.main
|
|
20
|
+
|
|
21
|
+
# Terminal 2 — scorecard (repo root)
|
|
22
|
+
uv sync --extra evals
|
|
23
|
+
export AGENT_URL=http://127.0.0.1:8787
|
|
24
|
+
export JUDGE_PROVIDER=fake # deepeval's GPTModel against ollama.com times out with no scores
|
|
25
|
+
export EVAL_SCENARIO_DELAY_SEC=10 # space scenarios out if the model gets rate-limited
|
|
26
|
+
uv run python -m evals.report \
|
|
27
|
+
--suite smoke \
|
|
28
|
+
--baseline evals/baselines/smoke.json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
Useful flags:
|
|
32
|
+
|
|
33
|
+
| Flag | Effect |
|
|
34
|
+
|---|---|
|
|
35
|
+
| `--fail-on-regression` | Exit non-zero on scenario errors/failures (and baseline drift when a baseline is present) |
|
|
36
|
+
| `--require-baseline` | Fail if the baseline file is missing |
|
|
37
|
+
| `--update-baseline` | Rewrite the baseline from this run (commit deliberately) |
|
|
38
|
+
| `--scenario-delay-sec` (or `EVAL_SCENARIO_DELAY_SEC`) | Sleep this many seconds between scenarios — a scenario itself fires several requests in a tight burst, so pacing is applied between scenarios, not within one. Use when a low-rpm model gets provider-side rate-limited. |
|
|
39
|
+
|
|
40
|
+
Runs land under `evals/runs/` (gitignored). Diff two artifacts with `uv run python -m evals.diff <old.json> <new.json>`.
|
|
41
|
+
|
|
42
|
+
## Drift suite (paired verifier off / on)
|
|
43
|
+
|
|
44
|
+
The drift suite (`evals/suites/drift.yaml`, scenarios under `evals/scenarios/drift/`) is **not** in smoke. It exists to measure verifier precision/recall once Phase 2+ lands. Cases `supersession` and `preempt` assert `max_verdicts: 0` with the verifier on — they are the precision half.
|
|
45
|
+
|
|
46
|
+
The gateway discovers `monkeybot_config/monkeybot.yaml` from cwd, so a second filename is never loaded unless you point `MONKEYBOT_CONFIG` at it (bootstrap pointer, not a YAML value).
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Terminal 1a — verifier off (default smoke config)
|
|
50
|
+
cd evals/smoke_agent
|
|
51
|
+
uv sync
|
|
52
|
+
export OLLAMA_API_KEY=…
|
|
53
|
+
export PORT=8787
|
|
54
|
+
export SANDBOX_ENABLED=false
|
|
55
|
+
uv run -m monkeybot.gateway.main
|
|
56
|
+
|
|
57
|
+
# Terminal 2a
|
|
58
|
+
cd ../.. # repo root
|
|
59
|
+
uv sync --extra evals
|
|
60
|
+
export AGENT_URL=http://127.0.0.1:8787
|
|
61
|
+
export EVAL_VERIFIER_MODE=off
|
|
62
|
+
uv run python -m evals.report --suite drift
|
|
63
|
+
# note the run id printed / the new file under evals/runs/
|
|
64
|
+
|
|
65
|
+
# Stop the gateway, then boot with the verifier-on file:
|
|
66
|
+
cd evals/smoke_agent
|
|
67
|
+
export MONKEYBOT_CONFIG=./monkeybot_config/monkeybot.verifier-on.yaml
|
|
68
|
+
uv run -m monkeybot.gateway.main
|
|
69
|
+
|
|
70
|
+
# Terminal 2b
|
|
71
|
+
export EVAL_VERIFIER_MODE=on
|
|
72
|
+
uv run python -m evals.report --suite drift
|
|
73
|
+
uv run python -m evals.diff evals/runs/<off-run>.json evals/runs/<on-run>.json
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
Until a consumer reads `verifier:` (Phase 1+), the on-config is a parsed no-op and the on/off pair should be identical besides the YAML digest.
|
|
77
|
+
|
|
78
|
+
## Smoke baseline (pre-verifier)
|
|
79
|
+
|
|
80
|
+
Committed at [`evals/baselines/smoke.json`](../evals/baselines/smoke.json); readable summary in [`evals/baselines/smoke.md`](../evals/baselines/smoke.md). Agent is `ollama-cloud` / `glm-5.3-flash`. Judge scores are empty (`JUDGE_PROVIDER=fake`) — deepeval's OpenAI-compatible judge against Ollama Cloud timed out with no metric scores.
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
cd evals/smoke_agent && uv sync
|
|
84
|
+
OLLAMA_API_KEY=… PORT=8787 SANDBOX_ENABLED=false uv run -m monkeybot.gateway.main &
|
|
85
|
+
cd ../.. && AGENT_URL=http://127.0.0.1:8787 JUDGE_PROVIDER=fake \
|
|
86
|
+
uv run python -m evals.report --suite smoke --update-baseline
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
Do not add `--require-baseline` to CI until that workflow uses the same provider as this file. The GitHub Action still keys off `NVIDIA_API_KEY`.
|
|
90
|
+
|
|
91
|
+
## What the smoke suite covers
|
|
92
|
+
|
|
93
|
+
Scenarios under `evals/scenarios/` assert both judge metrics and harness telemetry (e.g. `required_tools`). Current smoke membership is the explicit list in `evals/suites/smoke.yaml` (tools, skills, subagents, memory, multi-turn, mcp — `context/summarization_trigger` is currently commented out, see `evals/TEST_COVERAGE.md`). MCP scenarios run against an in-process fixture MCP server (`evals/smoke_agent/fixture_mcp_server.py`, no network calls) wired up in `evals/smoke_agent/monkeybot_config/mcp.json` — see `evals/scenarios/mcp/`.
|
|
94
|
+
|
|
95
|
+
## CI
|
|
96
|
+
|
|
97
|
+
Live eval does **not** run on every feature PR. Triggers (see the workflow):
|
|
98
|
+
|
|
99
|
+
- PR from `develop` → `main` (release gate; uses `--fail-on-regression`)
|
|
100
|
+
- PR that changes `uv.lock`, `cli/uv.lock`, or `evals/smoke_agent/uv.lock`
|
|
101
|
+
- Push to `main` (report-only)
|
|
102
|
+
- Manual `workflow_dispatch`
|
|
103
|
+
|
|
104
|
+
CI still requires repository secret `NVIDIA_API_KEY` (legacy agent + judge on build.nvidia.com). Local smoke uses `OLLAMA_API_KEY` and `monkeybot.yaml`'s `ollama-cloud` / `glm-5.3-flash`. The scorecard is posted to the run summary and as a PR comment.
|
|
105
|
+
|
|
106
|
+
## vs `tests/evals/`
|
|
107
|
+
|
|
108
|
+
| | `tests/evals/` | `evals/` (this doc) |
|
|
109
|
+
|---|---|---|
|
|
110
|
+
| Driver | `loop.run` + fake provider | Live gateway HTTP + SSE |
|
|
111
|
+
| CI | Every push/PR via pytest | Selective (above) |
|
|
112
|
+
| Catches | Deterministic loop/tool wiring | Real provider + gateway/SSE behavior |
|