monkeybot 3.9.0__tar.gz → 3.10.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.github/workflows/ci.yml +2 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.gitignore +5 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/CHANGELOG.md +38 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/PKG-INFO +1 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/pyproject.toml +2 -2
- monkeybot-3.10.0/cli/src/monkeybot_cli/commands/mcp_login.py +81 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/new.py +44 -4
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/main.py +13 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold.py +86 -16
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +2 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +15 -0
- monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/AGENT.md +35 -0
- monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/command_allowlist.yaml +92 -0
- monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/monkeybot.overrides.yaml +31 -0
- monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/permissions.yaml +42 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_cli.py +44 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_scaffold.py +193 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/uv.lock +3 -2
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/features.md +45 -6
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/live-evals.md +40 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/assertions.py +147 -1
- monkeybot-3.10.0/evals/conftest.py +4 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/.gitignore +2 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/AGENTS.md +7 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/build/calc/ops.py +5 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/calc/__init__.py +3 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/calc/ops.py +17 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/node_modules/left-pad/index.js +4 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/node_modules/left-pad/package.json +1 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/pyproject.toml +9 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo/tests/test_ops.py +24 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/.gitignore +2 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/AGENTS.md +7 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/build/calc/ops.py +5 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/calc/__init__.py +3 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/calc/ops.py +19 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/node_modules/left-pad/index.js +4 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/node_modules/left-pad/package.json +1 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/pyproject.toml +9 -0
- monkeybot-3.10.0/evals/fixtures/coding/calc_repo_green/tests/test_ops.py +24 -0
- monkeybot-3.10.0/evals/fixtures/coding/overlays/bug_discount/shop/pricing.py +25 -0
- monkeybot-3.10.0/evals/fixtures/coding/overlays/noisy_tests/shop/taxes.py +15 -0
- monkeybot-3.10.0/evals/fixtures/coding/overlays/noisy_tests/tests/conftest.py +12 -0
- monkeybot-3.10.0/evals/fixtures/coding/overlays/offline_gateway/tests/test_gateway.py +7 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/.gitignore +2 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/AGENTS.md +10 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/CHANGELOG.md +10 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/README.md +4 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/build/shop/shipping.py +4 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/pyproject.toml +8 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/__init__.py +3 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/cart.py +26 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/coupons.py +15 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/gateway.py +23 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/inventory.py +21 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/legacy/pricing_v1.py +5 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/legacy/shipping_v1.py +7 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/models.py +27 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/orders.py +21 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/pricing.py +26 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/reports.py +13 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/shipping.py +32 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/taxes.py +15 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/utils/money.py +15 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/utils/text.py +11 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_cart.py +16 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_coupons.py +7 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_inventory.py +16 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_money.py +9 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_orders.py +28 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_pricing.py +24 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_reports.py +8 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_shipping.py +24 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/tests/test_taxes.py +17 -0
- monkeybot-3.10.0/evals/fixtures/coding/shop_repo/vendor/pricekit/__init__.py +6 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/models.py +12 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/report.py +14 -2
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/runner.py +48 -6
- monkeybot-3.10.0/evals/scenario_loader.py +195 -0
- monkeybot-3.10.0/evals/scenarios/coding/add_feature_with_tests.yaml +19 -0
- monkeybot-3.10.0/evals/scenarios/coding/fix_failing_test.yaml +16 -0
- monkeybot-3.10.0/evals/scenarios/coding/navigate_repo.yaml +17 -0
- monkeybot-3.10.0/evals/scenarios/coding_hard/add_bulk_discount.yaml +22 -0
- monkeybot-3.10.0/evals/scenarios/coding_hard/fix_discount_rounding.yaml +17 -0
- monkeybot-3.10.0/evals/scenarios/coding_hard/honest_unfixable_failure.yaml +15 -0
- monkeybot-3.10.0/evals/scenarios/coding_hard/multi_feature_long.yaml +24 -0
- monkeybot-3.10.0/evals/scenarios/coding_hard/navigate_intl_rate.yaml +14 -0
- monkeybot-3.10.0/evals/scenarios/coding_hard/noisy_test_failure.yaml +16 -0
- monkeybot-3.10.0/evals/scenarios/coding_hard/rename_calc_tax.yaml +17 -0
- monkeybot-3.10.0/evals/smoke_agent/monkeybot_config/AGENT.coding.md +35 -0
- monkeybot-3.10.0/evals/smoke_agent/monkeybot_config/monkeybot.coding.yaml +56 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/pyproject.toml +2 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/uv.lock +48 -12
- monkeybot-3.10.0/evals/suites/coding.yaml +9 -0
- monkeybot-3.10.0/evals/suites/coding_hard.yaml +11 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_assertions.py +183 -0
- monkeybot-3.10.0/evals/test_coding_hard_oracle.py +264 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_report.py +70 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_runner_sse.py +144 -0
- monkeybot-3.10.0/evals/trials.py +128 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/pyproject.toml +2 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/ci-local.sh +4 -1
- monkeybot-3.10.0/src/monkeybot/core/coding/__init__.py +1 -0
- monkeybot-3.10.0/src/monkeybot/core/coding/git_context_hook.py +134 -0
- monkeybot-3.10.0/src/monkeybot/core/coding/read_ledger_hook.py +27 -0
- monkeybot-3.10.0/src/monkeybot/core/coding/verification_gate.py +383 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/runtime_env.py +9 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/settings.py +125 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/snapshot.py +24 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/__init__.py +77 -4
- monkeybot-3.10.0/src/monkeybot/core/context/project_context.py +276 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/tool_result_ingress.py +1 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/tool_shapers.py +1 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/hooks/__init__.py +23 -2
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/mcp/mcp_client.py +59 -5
- monkeybot-3.10.0/src/monkeybot/core/mcp/oauth_flow.py +783 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/prompts/harness_prompt.py +20 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/prompts/headings.py +5 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/prompts/prompt.py +36 -4
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/context_budget.py +25 -10
- monkeybot-3.10.0/src/monkeybot/core/runtime/doom_loop.py +228 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/events.py +1 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/history_compaction.py +78 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop_hooks.py +2 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/tool_dispatch.py +4 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/turn_loop.py +102 -4
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/subagent_worker.py +5 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/core_tool_executor.py +210 -16
- monkeybot-3.10.0/src/monkeybot/core/tools/gitignore.py +120 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/inspector.py +241 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/patch.py +134 -20
- monkeybot-3.10.0/src/monkeybot/core/tools/read_ledger.py +95 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/spill_inventory.py +109 -7
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/workspace_service.py +336 -32
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/match.py +1 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/routes.py +15 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/app.py +27 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/session_bus.py +3 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_context.py +1 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_context_budget.py +36 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_core_tool_executor.py +655 -3
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_doom_loop.py +190 -0
- monkeybot-3.10.0/tests/core/test_gitignore.py +62 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_harness_prompt.py +28 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_inspector.py +193 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_loop.py +258 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_loop_hooks.py +288 -0
- monkeybot-3.10.0/tests/core/test_mcp_oauth.py +224 -0
- monkeybot-3.10.0/tests/core/test_mcp_oauth_regressions.py +366 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_patch.py +119 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_progress_tracker.py +4 -1
- monkeybot-3.10.0/tests/core/test_project_context.py +448 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_prompt.py +31 -1
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_runtime_config_snapshot.py +78 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_spill_inventory.py +52 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_terminal.py +31 -0
- monkeybot-3.10.0/tests/core/test_verification_gate.py +383 -0
- monkeybot-3.10.0/tests/core/test_verifier_tracker.py +62 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/eval_hook.py +7 -0
- monkeybot-3.10.0/tests/evals/scenario_runner.py +359 -0
- monkeybot-3.10.0/tests/evals/scenarios/coding_fix_failing_test.yaml +39 -0
- monkeybot-3.10.0/tests/evals/scenarios/coding_gate_passes_when_verified.yaml +35 -0
- monkeybot-3.10.0/tests/evals/scenarios/coding_gate_rejects_unverified.yaml +41 -0
- monkeybot-3.10.0/tests/evals/scenarios/coding_read_before_write.yaml +48 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/test_agent_behavior.py +6 -2
- monkeybot-3.10.0/tests/gateway/realtime/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_routes_client_text.py +45 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/test_packaging_config.py +9 -1
- monkeybot-3.10.0/tests/web_search/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/uv.lock +3 -1
- monkeybot-3.9.0/evals/scenario_loader.py +0 -93
- monkeybot-3.9.0/src/monkeybot/core/runtime/doom_loop.py +0 -118
- monkeybot-3.9.0/tests/evals/scenario_runner.py +0 -191
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.cursor/hooks/pre-pr.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.cursor/hooks.json +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.cursor/skills/mb-retro/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.dockerignore +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.github/workflows/live-eval-smoke.yml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.github/workflows/prepare-release.yml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.github/workflows/publish-release.yml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/.pre-commit-config.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/BACKLOG.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/CONTRIBUTING.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/LICENSE +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/README.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/skills/monkeybot/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_session.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_tool_display.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_tui.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/trace.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/compat.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/output.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/providers.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/goal/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_continue.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_e2e.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_errors.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_file_index.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_grounding.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_local_shell.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_renderer_parity.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_session.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_status_bar.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_theme.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_tool_display.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_chat_tui.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_config_resolve.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_doctor.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_extras_catalog.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_gateway_health.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_realtime_session_controller.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_run_cmd.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_runtime_python.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_terminal_markdown.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/cli/tests/test_trace_cmd.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/Dockerfile +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/demo-model.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/demo.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/docker-compose.sandbox.yml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/opensandbox.docker.toml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docker/sandbox.Dockerfile +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docker-compose.yml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/agent-layout.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/assets/logo.png +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/browser-mcp-perf-baseline.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/browser-mcp-performance-plan.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/browser-mcp.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/cloud-deployment-design.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-aws-agentcore.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-pattern-a-container.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-pattern-b-serverless.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/deploy-pattern-d-realtime.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/getting-started.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/mcp.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/migrations/agent-scope-namespacing.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/migrations/history-row-id.sql +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/migrations/memory-outbox.sql +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/migrations/session-branches.sql +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/observability-runbook.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/ollama-local.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/otel-collector.example.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/progressive-loop-tools.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/progressive-mcp-tools.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/skills.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/spill-dynamic-design.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/sse-gateway-ui.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/docs/verifier-agent-design.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/TEST_COVERAGE.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/baselines/smoke.json +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/baselines/smoke.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/diff.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/eval_config.yaml +0 -0
- {monkeybot-3.9.0/tests/cli → monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/legacy}/__init__.py +0 -0
- {monkeybot-3.9.0/tests/computer → monkeybot-3.10.0/evals/fixtures/coding/shop_repo/shop/utils}/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/persistence.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/context/summarization_trigger.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/declares_done.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/path_constraint.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/preempt.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/repeat_correction.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/drift/supersession.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/mcp/get_prompt.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/mcp/list_resources.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/mcp/tool_invoke.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/memory/recall_cross_session.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/memory/recall_single_session.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/multi_turn/task_tracking.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/skills/skill_invocation.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/subagents/dispatch_complete.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_read.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_read_error.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_run_command.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scenarios/tools/core_write.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/scorer.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/.env.example +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/.gitignore +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/suites/drift.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/suites/smoke.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_diff.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_judge.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/evals/test_scorer.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/README.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/agentcore/handler.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/agentcore/runtime_app.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/agentengine/handler.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/cloud-functions/main.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/lambda/handler.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/ollama/PrefixStable.Modelfile +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/browser/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/diagnostics/README.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/diagnostics/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/diagnostics/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/diagnostics/diagnostics.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/image-generator/SKILL.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/examples/skills/image-generator/generate_image.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/pyproject.toml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/app.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/backend.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/chat_context.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/chat_scope.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/login.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/server.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/conftest.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/conftest.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_act.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_agentcore.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_chat_isolation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_chat_scope.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_fill_form.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_indexed_tools.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_observe.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_observe_after.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_perf.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_playbook_flows.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_server_shutdown.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_tabs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_tool_surface.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/tests/test_wait_tools.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/integrations/browser-mcp/uv.lock +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/pytest.ini +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/create_schema.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/precommit-pytest.sh +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/release.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/scripts/smoke_global_cli.sh +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/__main__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/audio_io.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/gateway_manager.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/main.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/push_to_talk.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/cli/realtime_client.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/approvals.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/permissions.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/safety.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/computer/tools.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/catalog.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/config.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/freeze.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/image_preview.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/resolve.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/store.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/text.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/attachments/tools.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/bootstrap.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/realtime_config.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/validation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/campaign_context.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/common.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/epoch.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/secret_egress.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/slash_skills.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/goals/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/goals/service.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/hooks/evidence_guard.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/layout.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/llm/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/llm/provider.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/llm/usage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/lockfile_names.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/logging_utils.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/mcp/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/config.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/hook.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/ids.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/ingest.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/observability.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/outbox.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/palace.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/subsystem.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/uri.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/memory/writer.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/messages/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/messages/tool_integrity.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/messages/transform_context.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/path_safety.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/backends.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/branches.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/db.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/errors.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/firestore.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/goal_ledger.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/history.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/postgres.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/row_ids.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/runs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/sqlite.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/sqlite_backend.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/thread_summary.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/transcript.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/transcript_reader.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/usage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/prompts/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/history_rewrite.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/input_admission.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/loop_usage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/realtime_loop.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/subprocess_groups.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/testing/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/ask_user.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/background_jobs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/command_executor.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/grant_store.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/path_grant_inspector.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/permission.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/sandbox_executor.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/terminal.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/tool_kind.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/tools/types.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/types/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/types/content_blocks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/types/interfaces.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/types/types_tools.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/actuator.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/binding.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/classify.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/inspector.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/intervention.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/judge.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/ledger.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/mailbox.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/port.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/rewrite_effects.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/severity.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/verifier/tracker.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/factory.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/gcs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/local.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/protocol.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace/s3.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/core/workspace_layout.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/bootstrap.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/main.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/app.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/manager.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/session.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/realtime_main.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/goal_routes.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/history_routes.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/models.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/reload.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/request_storage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/routes.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/sse.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/_state.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/instrumentation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/propagation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/spans.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/observability/sqlite_exporter.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/_openai_compat.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/_sdk_client.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/_utils.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/bedrock.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/claude.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/fireworks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/gemini.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/gemini_live.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/huggingface.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/model_capabilities.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/nvidia.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/ollama.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/openai.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/openrouter.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/pricing.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/rejected_sampling.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/request_budget.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/sampling.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/providers/vertex_claude.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scaffold/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/__main__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/engine.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/interval.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/tick_result.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/scheduler/worker.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/subagents/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/todo_list/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/todo_list/store.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/todo_list/tool.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/protocol.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/src/monkeybot/web_search/tool.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/acceptance/test_observability_acceptance.py +0 -0
- {monkeybot-3.9.0/tests/gateway/realtime → monkeybot-3.10.0/tests/cli}/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/cli/test_gateway_manager.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/cli/test_main.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/cli/test_push_to_talk.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/cli/test_realtime_client.py +0 -0
- {monkeybot-3.9.0/tests/web_search → monkeybot-3.10.0/tests/computer}/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_approvals.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_computer_tools.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_package_init.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_path_policy.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_permissions.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_subagent_exclusion.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/computer/test_wiring.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/conftest.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/memory/helpers.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/memory/in_memory_palace.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/memory/test_mempalace.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/memory/test_review_fixes.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_agent_layout.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_ask_user.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_attachment_freeze.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_attachment_store.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_background_jobs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_bootstrap.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_branch_store_backends.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_config_extensions.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_content_blocks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_context_epoch.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_durable_events.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_durable_runs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_empty_completion.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_env_map_grep_gates.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_events.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_evidence_guard.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_firestore_history.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_firestore_usage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_fs_isolation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_gemini_history_replay.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_goal_ledger.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_goal_persistence.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_goals.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_grant_store.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_history.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_history_branches.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_history_compaction_split.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_history_row_ids.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_hooks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_image_preview.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_input_admission.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_layout.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_logging_utils.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_loop_observability.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_loop_transcript.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_mcp_client.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_memory_layout_migrate.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_message_pipeline.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_mocks_realtime_provider.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_path_grant_inspector.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_path_safety.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_permission.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_pricing.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_progress_publish.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_provider_contract.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_provider_stream_mapper.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_realtime_loop.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_replace_fuzzy.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_run_command_parse.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_runs.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_runtime_env.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_sandbox_executor.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_scheduled_loops.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_secret_egress.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_session_branches_migration.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_session_turn_locks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_settlement.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_slash_skills.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_spill_dynamic.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_storage_backends.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_subagent_proto.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_subagent_trace_propagation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_subagent_transcript.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_subagent_worker_paths.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_thread_summary_wire.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_tool_def_schema.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_tool_integrity.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_tool_result_ingress.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_tool_shapers.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_transcript.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_transcript_reader.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_truncated_tool_batch.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_turn_session_id.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_usage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_usage_migration.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_utterance_buffer.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_binding.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_inspector.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_judge.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_mailbox_lifecycle.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_rewrite_effects.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_verifier_sticky_nudge.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_worker_pool.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_workspace_extra_read_roots.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_workspace_layout.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_workspace_symlinks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/test_workspace_write_scope.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/workspace/test_factory.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/workspace/test_local_storage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/core/workspace/test_protocol_contract.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_read.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/tool_write.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/evals/test_verifier_port.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_app.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_deps.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_guardrails.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_manager.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_metrics.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_session.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/realtime/test_wire.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_attachments.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_config_reload.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_create_session_model.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_gateway_runtime.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_history_routes.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_routes.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_session_bus.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_start_turn_setup_failure.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/sse/test_transcript_wiring.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_otel_fastapi.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_otel_lifespan.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_realtime_main.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_resolve_provider.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_sdk_client_shutdown.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_sse_events.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/integration/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/integration/test_observability_integration.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/integration/test_prompt_caching_integration.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/conftest.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_init.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_instrumentation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_loop_hook_spans.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_propagation.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_span_contract.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_spans.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_sqlite_exporter.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_truncate.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/observability/test_turn_complete_trace.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/conftest.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_anthropic_cache.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_anthropic_history.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_bedrock_converse.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_bedrock_estimate.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_fireworks.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_gemini_history.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_gemini_live.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_gemini_usage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_huggingface.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_model_capabilities.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_nvidia.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_ollama.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_openai_byte_budget.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_openai_compat_usage.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_openai_history.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_pricing.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_request_budget.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_sampling.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_sdk_client_reuse.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_sonnet5_sampling.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_source_grep_gates.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/providers/test_vertex_claude_history.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/scheduler/test_engine.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/scheduler/test_interval.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/skills/__init__.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/skills/test_generate_image_script.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/test_cold_start.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/test_release_script.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/todo_list/test_todo_list.py +0 -0
- {monkeybot-3.9.0 → monkeybot-3.10.0}/tests/web_search/test_web_search.py +0 -0
|
@@ -29,7 +29,7 @@ jobs:
|
|
|
29
29
|
run: uv run mypy src/monkeybot
|
|
30
30
|
|
|
31
31
|
- name: Pytest
|
|
32
|
-
run: uv run pytest tests/ -q
|
|
32
|
+
run: uv run pytest tests/ -q -n auto
|
|
33
33
|
|
|
34
34
|
- name: CLI pytest
|
|
35
35
|
working-directory: cli
|
|
@@ -49,3 +49,4 @@ jobs:
|
|
|
49
49
|
uv run python evals/test_assertions.py
|
|
50
50
|
uv run python evals/test_report.py
|
|
51
51
|
uv run python evals/test_runner_sse.py
|
|
52
|
+
uv run python evals/test_coding_hard_oracle.py
|
|
@@ -10,9 +10,47 @@ the project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
10
10
|
|
|
11
11
|
### Added
|
|
12
12
|
|
|
13
|
+
- `monkeybot new --template coding` scaffolds an agent with a coding `AGENT.md`, a toolchain command allowlist (including yarn, with `rm` denied inside `bash -c`), ask-before-push permissions that also match chained commands and `bash -c`, and `coding.verification_gate` turned on.
|
|
14
|
+
- `monkeybot mcp-login` signs in to one remote MCP server in the browser and writes the token file core reuses.
|
|
15
|
+
- New scaffolds list `./tests/` and `./src/` in `command_allowlist.yaml`. `refresh` does not re-add them to an allowlist you already configured.
|
|
16
|
+
|
|
17
|
+
## [core v3.10.0] - 2026-10-22
|
|
18
|
+
|
|
19
|
+
### Added
|
|
20
|
+
|
|
21
|
+
- Coding mode for agents that work in a repository. It adds an editing & verification protocol to the prompt, puts `AGENTS.md` / `CLAUDE.md` and a short repo overview in the cached prompt prefix, reports git branch and dirty files each turn, refuses edits to files the model has not read (`read_before_write`) or that changed since (`stale_read`), and — with `coding.verification_gate` — refuses a final answer that follows edits no test or lint run has passed since. See `docs/features.md` §22.
|
|
22
|
+
- Hooks: `PRE_FINAL_ANSWER` (a hook may refuse a final answer once the tools are done; `BEFORE_PROVIDER_REQUEST` may hold the text until then) and `HISTORY_COMPACTED` (awaited after history is summarized). A tool failing on the same file repeatedly trips doom-loop recovery even when its other arguments, or the path's spelling, change.
|
|
23
|
+
- New `list_dir` tool. `grep` gains `context`, `files_only` and `respect_gitignore`; `glob` takes `files_only` and no longer walks `node_modules`, `.git`, `build` and similar. `replace_in_file` and `apply_patch` return the edited `line` and a numbered `snippet`. Skills appear in the prompt as `name — description`.
|
|
24
|
+
- Live eval suites `coding` and `coding_hard` (`evals/suites/`) over fixture repos, with workspace-checked assertions (`workspace_command_passes`, `workspace_file_contains`, `workspace_unchanged`, `final_text_regex`, `verified_before_final`), seeded-bug overlays, and `python -m evals.trials` to run a suite repeatedly and compare configurations. The eval runner answers `ask_user` prompts so a run cannot hang waiting for a human.
|
|
25
|
+
- Remote MCP servers can sign in with browser OAuth. Tokens are stored per server and reused on later connects; a failed refresh is reported as an auth error.
|
|
26
|
+
|
|
27
|
+
### Changed
|
|
28
|
+
|
|
29
|
+
- Coding mode is always on for every agent. `coding.enabled` is retired: a leftover `coding: {enabled: ...}` is ignored with a warning. Every agent now gets the editing & verification protocol, the read-before-write ledger (`read_before_write` / `stale_read` refusals), project instructions and repo overview in the cached prompt prefix, and git state in runtime notes. `coding.verification_gate.enabled` stays opt-in.
|
|
30
|
+
- `glob` returns files only by default; pass `files_only: false` to also list directories. `bash -c` scripts are screened command by command against `deny_patterns`.
|
|
31
|
+
|
|
32
|
+
### Fixed
|
|
33
|
+
|
|
34
|
+
- `run_command` output over the spill threshold no longer hides `exit_code`, `stderr` and the end of the output behind a truncated JSON prefix. The result stays valid JSON with head/tail excerpts and the full streams at `output_path`.
|
|
35
|
+
- `run_command` accepts `./tests/` and `./src/` path arguments (relative or workspace-absolute) under the built-in defaults, so `pytest ./tests` is no longer rejected. A configured allowlist is not widened.
|
|
36
|
+
- `deny_patterns` that anchor on the start of a command (`^rm\s+-rf`, `^curl`, `^sudo`) now also apply to commands inside `bash -c "…"`. A `bash -c` script that cannot be screened is rejected instead of run.
|
|
37
|
+
- The progress tracker's `write_without_read` / `rewrite_churn` signals never fired for `replace_in_file` (it tracked a tool name that does not exist).
|
|
38
|
+
- `apply_patch` rejects a hunk whose old lines match several places instead of silently editing the first, rejects hunk lines with no valid prefix instead of dropping them, and honors `*** End of File`.
|
|
39
|
+
- Subagent personas' `model` and `vertex_location` are used by `task` instead of the parent's model.
|
|
40
|
+
- A provider call that fails with an empty message (for example an `httpx.ReadTimeout`) now reports `Provider request failed (<ExceptionType>)` instead of a blank error.
|
|
41
|
+
- Over-budget tool text keeps its tail (70% head / 30% tail) instead of only its head.
|
|
42
|
+
|
|
43
|
+
## [cli v0.10.0] - 2026-10-18
|
|
44
|
+
|
|
45
|
+
### Added
|
|
46
|
+
|
|
13
47
|
- `monkeybot doctor` reports `model.reasoning_effort`, including when a non-Claude Bedrock model will not receive it.
|
|
14
48
|
- `fireworks` is a scaffold provider choice and validates with `FIREWORKS_API_KEY`.
|
|
15
49
|
|
|
50
|
+
### Changed
|
|
51
|
+
|
|
52
|
+
- Requires `monkeybot[cli]>=3.9.0,<4`. Doctor imports the reasoning-effort helpers added in core 3.9.0.
|
|
53
|
+
|
|
16
54
|
## [core v3.9.0] - 2026-10-18
|
|
17
55
|
|
|
18
56
|
### Added
|
|
@@ -4,13 +4,13 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "monkeybot-cli"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.10.0"
|
|
8
8
|
description = "CLI to create, configure, validate, and chat with monkeybot agents."
|
|
9
9
|
requires-python = ">=3.11"
|
|
10
10
|
dependencies = [
|
|
11
11
|
# `cli` pulls realtime + typer so `monkeybot talk` works out of the box (text mode).
|
|
12
12
|
# Audio mic/PTT needs the agent (or this env) to also install monkeybot[cli-realtime].
|
|
13
|
-
"monkeybot[cli]>=3.
|
|
13
|
+
"monkeybot[cli]>=3.9.0,<4",
|
|
14
14
|
"monkeybot-browser-mcp>=0.5.0,<1",
|
|
15
15
|
"httpx>=0.27.0",
|
|
16
16
|
"pyyaml>=6.0.2",
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
"""monkeybot mcp-login — browser sign-in for one remote MCP server."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import asyncio
|
|
7
|
+
import json
|
|
8
|
+
import logging
|
|
9
|
+
import os
|
|
10
|
+
import sys
|
|
11
|
+
from pathlib import Path
|
|
12
|
+
|
|
13
|
+
from mcp.client.auth.exceptions import OAuthFlowError
|
|
14
|
+
from monkeybot.core.mcp.mcp_client import MCPAuthError
|
|
15
|
+
from monkeybot.core.mcp.oauth_flow import login_mcp_server
|
|
16
|
+
|
|
17
|
+
logger = logging.getLogger(__name__)
|
|
18
|
+
|
|
19
|
+
CLIENT_SECRET_ENV = "MONKEYBOT_MCP_CLIENT_SECRET"
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def run_mcp_login(args: argparse.Namespace) -> int:
|
|
23
|
+
"""Sign in, print JSON progress on stdout, and return 0 when the attempt finishes."""
|
|
24
|
+
client_secret = args.client_secret or os.environ.get(CLIENT_SECRET_ENV, "")
|
|
25
|
+
try:
|
|
26
|
+
result = asyncio.run(
|
|
27
|
+
login_mcp_server(
|
|
28
|
+
args.url,
|
|
29
|
+
Path(args.storage).expanduser(),
|
|
30
|
+
open_browser=not args.no_browser,
|
|
31
|
+
client_id=args.client_id,
|
|
32
|
+
client_secret=client_secret,
|
|
33
|
+
redirect_port=args.redirect_port,
|
|
34
|
+
)
|
|
35
|
+
)
|
|
36
|
+
except (MCPAuthError, OAuthFlowError) as exc:
|
|
37
|
+
print(str(exc), file=sys.stderr)
|
|
38
|
+
return 1
|
|
39
|
+
except Exception:
|
|
40
|
+
logger.exception("mcp oauth sign-in failed")
|
|
41
|
+
print("Sign-in failed.", file=sys.stderr)
|
|
42
|
+
return 1
|
|
43
|
+
print(json.dumps(result), flush=True)
|
|
44
|
+
return 0
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def register(sub: argparse._SubParsersAction[argparse.ArgumentParser]) -> None:
|
|
48
|
+
"""Register the ``mcp-login`` subcommand."""
|
|
49
|
+
command = sub.add_parser(
|
|
50
|
+
"mcp-login",
|
|
51
|
+
help="Sign in to a remote MCP server in the browser",
|
|
52
|
+
)
|
|
53
|
+
command.add_argument("--url", required=True, help="Streamable HTTP URL of the MCP server")
|
|
54
|
+
command.add_argument(
|
|
55
|
+
"--storage", required=True, help="Directory for this machine's OAuth tokens"
|
|
56
|
+
)
|
|
57
|
+
command.add_argument(
|
|
58
|
+
"--no-browser",
|
|
59
|
+
action="store_true",
|
|
60
|
+
help="Print the authorization URL instead of opening a browser",
|
|
61
|
+
)
|
|
62
|
+
command.add_argument(
|
|
63
|
+
"--client-id",
|
|
64
|
+
default="",
|
|
65
|
+
help="OAuth client id, for a server that will not register one automatically",
|
|
66
|
+
)
|
|
67
|
+
command.add_argument(
|
|
68
|
+
"--client-secret",
|
|
69
|
+
default="",
|
|
70
|
+
help=(
|
|
71
|
+
f"OAuth client secret, when that client requires one. Prefer {CLIENT_SECRET_ENV}: "
|
|
72
|
+
"command-line arguments are visible to other processes."
|
|
73
|
+
),
|
|
74
|
+
)
|
|
75
|
+
command.add_argument(
|
|
76
|
+
"--redirect-port",
|
|
77
|
+
type=int,
|
|
78
|
+
default=None,
|
|
79
|
+
help="Loopback port for the sign-in redirect, for a client registered with an exact URI",
|
|
80
|
+
)
|
|
81
|
+
command.set_defaults(func=run_mcp_login)
|
|
@@ -13,7 +13,7 @@ from monkeybot_cli.extras_catalog import (
|
|
|
13
13
|
additional_provider_extra_choices,
|
|
14
14
|
normalize_extra_token,
|
|
15
15
|
)
|
|
16
|
-
from monkeybot_cli.scaffold import run_new
|
|
16
|
+
from monkeybot_cli.scaffold import DEFAULT_TEMPLATE, TEMPLATES, run_new
|
|
17
17
|
|
|
18
18
|
_DEFAULT_PROVIDER = "gemini"
|
|
19
19
|
_DEFAULT_MODEL = "gemini-3-flash"
|
|
@@ -26,7 +26,19 @@ def _prompt_line(prompt: str) -> str:
|
|
|
26
26
|
return ""
|
|
27
27
|
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
TEMPLATE_CHOICES: tuple[ExtraChoice, ...] = (
|
|
30
|
+
ExtraChoice("default", "General-purpose agent"),
|
|
31
|
+
ExtraChoice("coding", "Coding agent for a repository (verification gate, dev toolchain)"),
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def _prompt_single(
|
|
36
|
+
choices: tuple[ExtraChoice, ...],
|
|
37
|
+
*,
|
|
38
|
+
title: str,
|
|
39
|
+
default_key: str,
|
|
40
|
+
noun: str = "provider",
|
|
41
|
+
) -> str:
|
|
30
42
|
"""Numbered single-select; Enter keeps default_key."""
|
|
31
43
|
print(title)
|
|
32
44
|
default_idx = 1
|
|
@@ -35,7 +47,7 @@ def _prompt_single(choices: tuple[ExtraChoice, ...], *, title: str, default_key:
|
|
|
35
47
|
if choice.key == default_key:
|
|
36
48
|
default_idx = i
|
|
37
49
|
print(f" {i}) {choice.key} — {choice.label}{marker}")
|
|
38
|
-
raw = _prompt_line(f"Choose
|
|
50
|
+
raw = _prompt_line(f"Choose {noun} [{default_idx}]: ").strip()
|
|
39
51
|
if not raw:
|
|
40
52
|
return default_key
|
|
41
53
|
if raw.isdigit():
|
|
@@ -48,7 +60,7 @@ def _prompt_single(choices: tuple[ExtraChoice, ...], *, title: str, default_key:
|
|
|
48
60
|
for choice in choices:
|
|
49
61
|
if raw.lower() == choice.key.lower():
|
|
50
62
|
return choice.key
|
|
51
|
-
print(f" unknown
|
|
63
|
+
print(f" unknown {noun} {raw!r}; using {default_key}", file=sys.stderr)
|
|
52
64
|
return default_key
|
|
53
65
|
|
|
54
66
|
|
|
@@ -128,6 +140,13 @@ def run_new_command(args: argparse.Namespace) -> int:
|
|
|
128
140
|
|
|
129
141
|
provider = args.provider
|
|
130
142
|
model = args.model
|
|
143
|
+
template = getattr(args, "template", None)
|
|
144
|
+
if template is not None and template not in TEMPLATES:
|
|
145
|
+
print(
|
|
146
|
+
f"error: unknown --template {template!r}; choose from {', '.join(TEMPLATES)}",
|
|
147
|
+
file=sys.stderr,
|
|
148
|
+
)
|
|
149
|
+
return 2
|
|
131
150
|
extras, unknown = _resolve_extras_from_args(getattr(args, "with_extras", None))
|
|
132
151
|
if unknown:
|
|
133
152
|
print(
|
|
@@ -137,6 +156,13 @@ def run_new_command(args: argparse.Namespace) -> int:
|
|
|
137
156
|
return 2
|
|
138
157
|
|
|
139
158
|
if not args.yes:
|
|
159
|
+
if template is None:
|
|
160
|
+
template = _prompt_single(
|
|
161
|
+
TEMPLATE_CHOICES,
|
|
162
|
+
title="Template:",
|
|
163
|
+
default_key=DEFAULT_TEMPLATE,
|
|
164
|
+
noun="template",
|
|
165
|
+
)
|
|
140
166
|
if provider is None:
|
|
141
167
|
provider = _prompt_single(
|
|
142
168
|
PROVIDER_CHOICES,
|
|
@@ -167,6 +193,7 @@ def run_new_command(args: argparse.Namespace) -> int:
|
|
|
167
193
|
provider=provider,
|
|
168
194
|
model=model,
|
|
169
195
|
extras=extras or None,
|
|
196
|
+
template=template or DEFAULT_TEMPLATE,
|
|
170
197
|
)
|
|
171
198
|
print(f"monkeybot scaffold under {dest}:")
|
|
172
199
|
print("\n".join(report))
|
|
@@ -177,6 +204,12 @@ def run_new_command(args: argparse.Namespace) -> int:
|
|
|
177
204
|
print(" cp .env.example .env # then add provider keys")
|
|
178
205
|
print(" monkeybot doctor")
|
|
179
206
|
print(" monkeybot chat")
|
|
207
|
+
if template == "coding":
|
|
208
|
+
print()
|
|
209
|
+
print("Coding template: clone the repository into ./workspace.")
|
|
210
|
+
print("Path prefixes in command_allowlist.yaml are relative to paths.workspace_root,")
|
|
211
|
+
print("so ../memory is the agent memory only while that stays ./workspace.")
|
|
212
|
+
print("If you set paths.workspace_root to another directory, update those prefixes.")
|
|
180
213
|
return 0
|
|
181
214
|
|
|
182
215
|
|
|
@@ -200,6 +233,13 @@ def register(subparsers: argparse._SubParsersAction[argparse.ArgumentParser]) ->
|
|
|
200
233
|
"observability, openai, bedrock, claude"
|
|
201
234
|
),
|
|
202
235
|
)
|
|
236
|
+
p.add_argument(
|
|
237
|
+
"--template",
|
|
238
|
+
choices=TEMPLATES,
|
|
239
|
+
default=None,
|
|
240
|
+
help="Scaffold flavour: default (general agent) or coding (repo workflow). "
|
|
241
|
+
"Prompted interactively when omitted.",
|
|
242
|
+
)
|
|
203
243
|
p.add_argument("--force", action="store_true", help="Overwrite existing scaffold files")
|
|
204
244
|
p.add_argument("--yes", "-y", action="store_true", help="Skip interactive prompts")
|
|
205
245
|
p.set_defaults(func=run_new_command)
|
|
@@ -5,7 +5,18 @@ from __future__ import annotations
|
|
|
5
5
|
import argparse
|
|
6
6
|
import sys
|
|
7
7
|
|
|
8
|
-
from monkeybot_cli.commands import
|
|
8
|
+
from monkeybot_cli.commands import (
|
|
9
|
+
chat,
|
|
10
|
+
doctor,
|
|
11
|
+
loop,
|
|
12
|
+
mcp_login,
|
|
13
|
+
new,
|
|
14
|
+
refresh,
|
|
15
|
+
run_cmd,
|
|
16
|
+
talk,
|
|
17
|
+
trace,
|
|
18
|
+
validate,
|
|
19
|
+
)
|
|
9
20
|
from monkeybot_cli.runtime_python import RuntimeUpgradeError, report_runtime_upgrade_error
|
|
10
21
|
|
|
11
22
|
|
|
@@ -25,6 +36,7 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
25
36
|
talk.register(sub)
|
|
26
37
|
loop.register(sub)
|
|
27
38
|
trace.register(sub)
|
|
39
|
+
mcp_login.register(sub)
|
|
28
40
|
return parser
|
|
29
41
|
|
|
30
42
|
|
|
@@ -17,6 +17,13 @@ _DEFAULTS_PKG: Final = "monkeybot_cli.scaffold_defaults"
|
|
|
17
17
|
# Matches packaged monkeybot.example.yaml default when ``--provider`` is omitted.
|
|
18
18
|
_DEFAULT_PROVIDER: Final = "gemini"
|
|
19
19
|
|
|
20
|
+
TEMPLATES: Final[tuple[str, ...]] = ("default", "coding")
|
|
21
|
+
DEFAULT_TEMPLATE: Final = "default"
|
|
22
|
+
_TEMPLATES_DIR: Final = "templates"
|
|
23
|
+
_OVERRIDES_FILE: Final = "monkeybot.overrides.yaml"
|
|
24
|
+
# Files a template replaces in the base bundle (same output names).
|
|
25
|
+
_TEMPLATE_FILES: Final[tuple[str, ...]] = ("AGENT.md", "command_allowlist.yaml", "permissions.yaml")
|
|
26
|
+
|
|
20
27
|
# (filename in packaged defaults, output name under <dest>/monkeybot_config/)
|
|
21
28
|
_CONFIG_BUNDLE: Final[tuple[tuple[str, str], ...]] = (
|
|
22
29
|
("monkeybot.example.yaml", "monkeybot.example.yaml"),
|
|
@@ -39,6 +46,49 @@ _MISSING_YAML_BANNER: Final = (
|
|
|
39
46
|
)
|
|
40
47
|
|
|
41
48
|
|
|
49
|
+
def _validate_template(template: str) -> str:
|
|
50
|
+
if template not in TEMPLATES:
|
|
51
|
+
raise ValueError(f"unknown template {template!r}; choose from {', '.join(TEMPLATES)}")
|
|
52
|
+
return template
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def _template_resource(template: str, name: str) -> Traversable:
|
|
56
|
+
return resources.files(_DEFAULTS_PKG) / _TEMPLATES_DIR / template / name
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def _config_bundle(template: str = DEFAULT_TEMPLATE) -> tuple[tuple[Traversable, str], ...]:
|
|
60
|
+
"""``(source, output name)`` pairs for ``monkeybot_config/``, with template overlays applied."""
|
|
61
|
+
_validate_template(template)
|
|
62
|
+
out: list[tuple[Traversable, str]] = []
|
|
63
|
+
for src_name, dest_name in _CONFIG_BUNDLE:
|
|
64
|
+
if template != DEFAULT_TEMPLATE and dest_name in _TEMPLATE_FILES:
|
|
65
|
+
out.append((_template_resource(template, dest_name), dest_name))
|
|
66
|
+
else:
|
|
67
|
+
out.append((resources.files(_DEFAULTS_PKG) / src_name, dest_name))
|
|
68
|
+
return tuple(out)
|
|
69
|
+
|
|
70
|
+
|
|
71
|
+
def _deep_merge(base: dict[str, Any], overlay: dict[str, Any]) -> dict[str, Any]:
|
|
72
|
+
merged = dict(base)
|
|
73
|
+
for key, value in overlay.items():
|
|
74
|
+
current = merged.get(key)
|
|
75
|
+
if isinstance(current, dict) and isinstance(value, dict):
|
|
76
|
+
merged[key] = _deep_merge(current, value)
|
|
77
|
+
else:
|
|
78
|
+
merged[key] = value
|
|
79
|
+
return merged
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def _template_overrides(template: str) -> dict[str, Any]:
|
|
83
|
+
if template == DEFAULT_TEMPLATE:
|
|
84
|
+
return {}
|
|
85
|
+
resource = _template_resource(template, _OVERRIDES_FILE)
|
|
86
|
+
if not resource.is_file():
|
|
87
|
+
return {}
|
|
88
|
+
loaded = yaml.safe_load(resource.read_text(encoding="utf-8"))
|
|
89
|
+
return loaded if isinstance(loaded, dict) else {}
|
|
90
|
+
|
|
91
|
+
|
|
42
92
|
def _install_file(dest: Path, src: Traversable, *, force: bool) -> str:
|
|
43
93
|
# ponytail: read_bytes() avoids resources.as_file() temp-file lifetime issue in zip distributions
|
|
44
94
|
if dest.exists() and not force:
|
|
@@ -48,16 +98,14 @@ def _install_file(dest: Path, src: Traversable, *, force: bool) -> str:
|
|
|
48
98
|
return "overwritten" if existed else "created"
|
|
49
99
|
|
|
50
100
|
|
|
51
|
-
def install_config_bundle(
|
|
52
|
-
|
|
101
|
+
def install_config_bundle(
|
|
102
|
+
cfg_dir: Path, *, force: bool, template: str = DEFAULT_TEMPLATE
|
|
103
|
+
) -> list[str]:
|
|
104
|
+
"""Copy packaged defaults (with ``template`` overlays) into ``cfg_dir``; return report lines."""
|
|
53
105
|
cfg_dir.mkdir(parents=True, exist_ok=True)
|
|
54
106
|
lines: list[str] = []
|
|
55
|
-
for
|
|
56
|
-
status = _install_file(
|
|
57
|
-
cfg_dir / dest_name,
|
|
58
|
-
resources.files(_DEFAULTS_PKG) / src_name,
|
|
59
|
-
force=force,
|
|
60
|
-
)
|
|
107
|
+
for source, dest_name in _config_bundle(template):
|
|
108
|
+
status = _install_file(cfg_dir / dest_name, source, force=force)
|
|
61
109
|
lines.append(f" monkeybot_config/{dest_name}: {status}")
|
|
62
110
|
return lines
|
|
63
111
|
|
|
@@ -68,8 +116,14 @@ def write_active_config(
|
|
|
68
116
|
provider: str | None = None,
|
|
69
117
|
model: str | None = None,
|
|
70
118
|
force: bool = False,
|
|
119
|
+
template: str = DEFAULT_TEMPLATE,
|
|
71
120
|
) -> str:
|
|
72
|
-
"""Create or update ``monkeybot.yaml`` from the packaged example.
|
|
121
|
+
"""Create or update ``monkeybot.yaml`` from the packaged example.
|
|
122
|
+
|
|
123
|
+
A non-default ``template`` deep-merges its ``monkeybot.overrides.yaml`` over the example
|
|
124
|
+
when the file is (re)created; an existing config is never re-templated.
|
|
125
|
+
"""
|
|
126
|
+
_validate_template(template)
|
|
73
127
|
active = cfg_dir / "monkeybot.yaml"
|
|
74
128
|
if active.exists() and not force:
|
|
75
129
|
if provider or model:
|
|
@@ -90,9 +144,11 @@ def write_active_config(
|
|
|
90
144
|
encoding="utf-8"
|
|
91
145
|
)
|
|
92
146
|
active.write_text(example_text, encoding="utf-8")
|
|
93
|
-
|
|
147
|
+
overrides = _template_overrides(template)
|
|
148
|
+
if provider or model or overrides:
|
|
94
149
|
doc = yaml.safe_load(active.read_text(encoding="utf-8")) or {}
|
|
95
150
|
if isinstance(doc, dict):
|
|
151
|
+
doc = _deep_merge(doc, overrides)
|
|
96
152
|
model_sec = doc.setdefault("model", {})
|
|
97
153
|
if isinstance(model_sec, dict):
|
|
98
154
|
if provider:
|
|
@@ -102,7 +158,7 @@ def write_active_config(
|
|
|
102
158
|
active.write_text(yaml.safe_dump(doc, sort_keys=False), encoding="utf-8")
|
|
103
159
|
if existed:
|
|
104
160
|
return "overwritten"
|
|
105
|
-
if provider or model:
|
|
161
|
+
if provider or model or overrides:
|
|
106
162
|
return "created"
|
|
107
163
|
return "created (from monkeybot.example.yaml)"
|
|
108
164
|
|
|
@@ -301,6 +357,11 @@ def _list_extras(existing: list[str], template: list[str]) -> list[str]:
|
|
|
301
357
|
return [item for item in existing if item not in present]
|
|
302
358
|
|
|
303
359
|
|
|
360
|
+
# Convenience prefixes written on first scaffold only; refresh must not re-add them
|
|
361
|
+
# to a file whose operator removed them.
|
|
362
|
+
_CREATE_ONLY_PREFIXES = frozenset({"./tests/", "./src/"})
|
|
363
|
+
|
|
364
|
+
|
|
304
365
|
def refresh_command_allowlist(cfg_dir: Path) -> str:
|
|
305
366
|
"""Rewrite from the packaged template, then re-append agent-only extras.
|
|
306
367
|
|
|
@@ -325,7 +386,11 @@ def refresh_command_allowlist(cfg_dir: Path) -> str:
|
|
|
325
386
|
_as_str_list(existing.get(key)),
|
|
326
387
|
_as_str_list(tmpl_map.get(key)),
|
|
327
388
|
)
|
|
328
|
-
|
|
389
|
+
base = _as_str_list(tmpl_map.get(key))
|
|
390
|
+
if key == "allowed_path_prefixes":
|
|
391
|
+
have = set(_as_str_list(existing.get(key)))
|
|
392
|
+
base = [item for item in base if item not in _CREATE_ONLY_PREFIXES or item in have]
|
|
393
|
+
merged[key] = [*base, *extras]
|
|
329
394
|
text = yaml.safe_dump(
|
|
330
395
|
merged,
|
|
331
396
|
sort_keys=False,
|
|
@@ -417,9 +482,13 @@ def run_new(
|
|
|
417
482
|
provider: str | None = None,
|
|
418
483
|
model: str | None = None,
|
|
419
484
|
extras: list[str] | None = None,
|
|
485
|
+
template: str = DEFAULT_TEMPLATE,
|
|
420
486
|
) -> list[str]:
|
|
421
487
|
"""Full scaffold: config bundle, empty skills root, writable state, and image files.
|
|
422
488
|
|
|
489
|
+
``template`` selects the persona/policy overlay: ``default`` (general agent) or ``coding``
|
|
490
|
+
(repo workflow: coding mode, verification gate, toolchain allowlist, ask-before-push rules).
|
|
491
|
+
|
|
423
492
|
Optional capability skills (``browser``, ``image-generator``, ``loop``) are packaged
|
|
424
493
|
under ``scaffold_defaults`` but not installed into new agents for now —
|
|
425
494
|
the Mac Main Agent loads them from ``~/.monkeybot/.internal/skills``
|
|
@@ -427,12 +496,13 @@ def run_new(
|
|
|
427
496
|
them again. The ``goal`` skill is installed because native goal tools are
|
|
428
497
|
intentionally exposed only for explicit ``/goal`` invocations.
|
|
429
498
|
"""
|
|
499
|
+
_validate_template(template)
|
|
430
500
|
cfg_dir = dest / "monkeybot_config"
|
|
431
|
-
report = install_config_bundle(cfg_dir, force=force)
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
f"{write_active_config(cfg_dir, provider=provider, model=model, force=force)}"
|
|
501
|
+
report = install_config_bundle(cfg_dir, force=force, template=template)
|
|
502
|
+
active_status = write_active_config(
|
|
503
|
+
cfg_dir, provider=provider, model=model, force=force, template=template
|
|
435
504
|
)
|
|
505
|
+
report.append(f" monkeybot_config/monkeybot.yaml: {active_status}")
|
|
436
506
|
report.extend(ensure_memory(dest, force=force))
|
|
437
507
|
report.extend(ensure_workspace(dest, force=force))
|
|
438
508
|
report.append(f" skills/goal/SKILL.md: {install_goal_skill(dest, force=force)}")
|
{monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml
RENAMED
|
@@ -15,6 +15,8 @@ allowed_commands:
|
|
|
15
15
|
|
|
16
16
|
# Path prefixes permitted in run_command argv (./ and / arguments).
|
|
17
17
|
allowed_path_prefixes:
|
|
18
|
+
- ./tests/ # e.g. pytest ./tests; add more workspace subtrees here as needed
|
|
19
|
+
- ./src/
|
|
18
20
|
- ../memory/
|
|
19
21
|
- ../memory
|
|
20
22
|
- ../memory/mempalace/
|
{monkeybot-3.9.0 → monkeybot-3.10.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml
RENAMED
|
@@ -254,6 +254,21 @@ scheduler:
|
|
|
254
254
|
# escalation:
|
|
255
255
|
# max_severity: nudge
|
|
256
256
|
|
|
257
|
+
# Coding mode is always on: the agent gets an editing & verification protocol in its prompt,
|
|
258
|
+
# edits are refused unless the file was read first (and unchanged since), AGENTS.md / CLAUDE.md
|
|
259
|
+
# and a short repo overview join the cached prompt prefix, and git state appears in runtime
|
|
260
|
+
# notes. This YAML-only section tunes it; `monkeybot new --template coding` turns the gate on.
|
|
261
|
+
# coding:
|
|
262
|
+
# # Reject a final answer that follows unverified edits (off by default; once per message):
|
|
263
|
+
# verification_gate:
|
|
264
|
+
# enabled: true
|
|
265
|
+
# max_rejections: 1
|
|
266
|
+
# # verify_commands replaces the built-in list (pytest, npm/pnpm/yarn test,
|
|
267
|
+
# # cargo test, go test, make test|check, ruff, mypy, tsc). A background
|
|
268
|
+
# # start and a command that masks the exit (`pytest || true`) do not count.
|
|
269
|
+
# # First file found under workspace_root is injected into the prompt (12k chars max):
|
|
270
|
+
# project_instructions_files: [AGENTS.md, CLAUDE.md, .monkeybot/AGENTS.md]
|
|
271
|
+
|
|
257
272
|
# Optional JSON for model.provider: fake tests (env: MONKEYBOT_FAKE_PROVIDER_EVENTS)
|
|
258
273
|
# fake_provider:
|
|
259
274
|
# events_json: '[[]]'
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Identity
|
|
2
|
+
|
|
3
|
+
You are a coding agent running inside **monkeybot**, working in the user's repository. You pair with the user to read, change, and verify code. You have a **writable workspace**, a shell, and search tools every turn; use them.
|
|
4
|
+
|
|
5
|
+
Act like a careful senior engineer the user can hand a task to: understand the code, make the smallest correct change, prove it works, and report honestly. You are not a demo or a tool-calling showcase.
|
|
6
|
+
|
|
7
|
+
The **monkeybot harness (fixed)** section appended each turn defines exact tool names, path rules, and the editing and verification protocol. When it conflicts with anything below, follow the harness — this file is about judgment, not mechanics.
|
|
8
|
+
|
|
9
|
+
# How you work
|
|
10
|
+
|
|
11
|
+
- **Explore before editing.** Find the relevant code, tests, and conventions first. Read the project instructions (`AGENTS.md`, when present in your prompt) and follow them — they describe how this repo wants to be built and tested.
|
|
12
|
+
- **Plan proportionally.** For work that spans several files or steps, write a short plan into your todo list first and keep it current. For a one-line fix, just fix it.
|
|
13
|
+
- **Make minimal diffs.** Change what the task needs and match the surrounding style, naming, and idioms. Don't reformat, rename, or "improve" unrelated code. Don't add speculative abstractions, parameters, or error handling for cases that cannot happen.
|
|
14
|
+
- **Follow the evidence.** Reproduce a bug or read the failing test before changing code. If a fix doesn't work, find out why before trying another; don't pile up guesses.
|
|
15
|
+
- **Run the checks.** After editing, run the project's tests and linters that cover your change. Fix what you broke. Don't edit a test to make it pass unless the test itself is wrong, and say so when that is the case.
|
|
16
|
+
- **Ask only when truly blocked.** If the request is ambiguous in a way that changes the outcome, ask one focused question. Otherwise pick the sensible reading, say which you chose, and proceed.
|
|
17
|
+
|
|
18
|
+
# Reporting
|
|
19
|
+
|
|
20
|
+
- **Say what you verified.** End with what you changed and how you know it works: "verified by running `<command>` → `<result>`", or "not verified because `<reason>`". Never claim a change works without having run something that exercises it.
|
|
21
|
+
- **Be accurate about failures.** If tests still fail, a command errored, or you could not run something, say so plainly with the relevant output. Don't summarize a red result as done.
|
|
22
|
+
- **Answer first, then detail.** Lead with the outcome; mention follow-ups or risks briefly. Don't paste whole files into chat that you already wrote to disk.
|
|
23
|
+
|
|
24
|
+
# Honesty
|
|
25
|
+
|
|
26
|
+
- **Never fabricate** tool results, file contents, command output, or test results.
|
|
27
|
+
- **Own mistakes plainly.** If an earlier edit was wrong, say so and fix it.
|
|
28
|
+
- **Say what you don't know.** If something is unverified or access is missing, state it and what would resolve it.
|
|
29
|
+
|
|
30
|
+
# Judgment and safety
|
|
31
|
+
|
|
32
|
+
- Prefer reversible steps. Before anything destructive or hard to undo — deleting files, rewriting history, force-pushing, dropping data — say what you are about to do and why, and let the permission prompts do their job.
|
|
33
|
+
- Don't commit, push, or open pull requests unless asked. Don't install dependencies the user hasn't approved.
|
|
34
|
+
- Treat credentials and secrets as sensitive: don't print them, don't commit them, suggest proper secret storage.
|
|
35
|
+
- Don't help with harm intended against systems the user doesn't own, or malware.
|
monkeybot-3.10.0/cli/src/monkeybot_cli/scaffold_defaults/templates/coding/command_allowlist.yaml
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
# run_command: binary allowlist (enforced at execution) — coding template: adds the
|
|
2
|
+
# usual test/lint/build toolchain and read-only text utilities.
|
|
3
|
+
allowed_commands:
|
|
4
|
+
- cat
|
|
5
|
+
- ls
|
|
6
|
+
- grep
|
|
7
|
+
- rg
|
|
8
|
+
- echo
|
|
9
|
+
- python
|
|
10
|
+
- python3
|
|
11
|
+
- uv
|
|
12
|
+
- git
|
|
13
|
+
- gh
|
|
14
|
+
- bash
|
|
15
|
+
- mempalace
|
|
16
|
+
- pytest
|
|
17
|
+
- node
|
|
18
|
+
- npm
|
|
19
|
+
- pnpm
|
|
20
|
+
- yarn
|
|
21
|
+
- npx
|
|
22
|
+
- make
|
|
23
|
+
- cargo
|
|
24
|
+
- go
|
|
25
|
+
- ruff
|
|
26
|
+
- mypy
|
|
27
|
+
- tsc
|
|
28
|
+
- sed
|
|
29
|
+
- awk
|
|
30
|
+
- find
|
|
31
|
+
- head
|
|
32
|
+
- tail
|
|
33
|
+
- wc
|
|
34
|
+
- diff
|
|
35
|
+
|
|
36
|
+
# Path prefixes permitted in run_command argv (./ and / arguments).
|
|
37
|
+
allowed_path_prefixes:
|
|
38
|
+
- ./
|
|
39
|
+
- ../memory/
|
|
40
|
+
- ../memory
|
|
41
|
+
- ../memory/mempalace/
|
|
42
|
+
- ../memory/mempalace
|
|
43
|
+
- ./skills/
|
|
44
|
+
- ./skills
|
|
45
|
+
- ./global-skills/
|
|
46
|
+
- ./global-skills
|
|
47
|
+
- ./test-data/
|
|
48
|
+
- ./code/
|
|
49
|
+
- ./code
|
|
50
|
+
- ./generated-media/
|
|
51
|
+
- ./generated-media
|
|
52
|
+
- ./browser/
|
|
53
|
+
- ./browser
|
|
54
|
+
|
|
55
|
+
# Optional: regexes matched against the normalized invocation (deny wins).
|
|
56
|
+
# Omit this key to use built-in DEFAULT_DENY_PATTERNS (install blocking).
|
|
57
|
+
deny_patterns:
|
|
58
|
+
- "pip3?\\s+install"
|
|
59
|
+
- "python3?\\s+-m\\s+pip\\s+install"
|
|
60
|
+
- "(^|\\s)uv\\s+(add|remove|sync|pip\\s+install|pip\\s+sync)"
|
|
61
|
+
- "(^|\\s)poetry\\s+(add|install)"
|
|
62
|
+
- "(^|\\s)conda\\s+install"
|
|
63
|
+
- "(^|\\s)(npm|pnpm|yarn)\\s+(install|add|i)(\\s|$)"
|
|
64
|
+
- "(^|\\s)(apt|apt-get)\\s+install"
|
|
65
|
+
- "(^|\\s)brew\\s+install"
|
|
66
|
+
- "^curl\\s+"
|
|
67
|
+
- "^wget\\s+"
|
|
68
|
+
- "^rm\\s+-rf"
|
|
69
|
+
# Any rm invocation, including inside `bash -c` (the screener checks each
|
|
70
|
+
# command, so a commit message that mentions rm is not this pattern).
|
|
71
|
+
- "^rm(\\s|$)"
|
|
72
|
+
- "^sudo\\s+"
|
|
73
|
+
- ".*>\\s*/etc/.*"
|
|
74
|
+
- "(^|\\s)find\\s.*(-delete|-exec|-execdir|-ok)\\b"
|
|
75
|
+
|
|
76
|
+
# Per-tool output shaping (token optimization). Merged with built-in defaults for
|
|
77
|
+
# run_command and web_search when keys are omitted here.
|
|
78
|
+
tool_output:
|
|
79
|
+
run_command:
|
|
80
|
+
content_type: logs
|
|
81
|
+
max_output_lines: 400
|
|
82
|
+
collapse_repeated: true
|
|
83
|
+
keep_patterns:
|
|
84
|
+
- "(?i)\\berror\\b"
|
|
85
|
+
- "(?i)\\bfatal\\b"
|
|
86
|
+
- "(?i)traceback"
|
|
87
|
+
- "(?i)\\bexception\\b"
|
|
88
|
+
web_search:
|
|
89
|
+
content_type: json
|
|
90
|
+
max_array_items: 30
|
|
91
|
+
read_file:
|
|
92
|
+
content_type: code
|