monkeybot 2.2.0__tar.gz → 3.0.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.0.0/.github/workflows/live-eval-smoke.yml +213 -0
- monkeybot-3.0.0/.github/workflows/publish-release.yml +172 -0
- monkeybot-3.0.0/.gitignore +71 -0
- monkeybot-3.0.0/BACKLOG.md +62 -0
- monkeybot-3.0.0/CHANGELOG.md +246 -0
- monkeybot-3.0.0/PKG-INFO +196 -0
- monkeybot-3.0.0/cli/pyproject.toml +44 -0
- monkeybot-3.0.0/cli/skills/monkeybot/SKILL.md +200 -0
- monkeybot-3.0.0/cli/skills/monkeybot/references/config-sections.md +179 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/chat_file_index.py +101 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/chat_local_shell.py +178 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/chat_session.py +938 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/chat_status_bar.py +207 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/chat_tool_display.py +240 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/chat_tui.py +1917 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/chat_tui_widgets.py +1117 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/commands/chat.py +889 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/commands/doctor.py +439 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/commands/refresh.py +36 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/commands/run_cmd.py +63 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/commands/validate.py +394 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/compat.py +30 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/extras_catalog.py +97 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/main.py +42 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/opensandbox_lifecycle.py +324 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/providers.py +135 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/realtime/gateway_manager.py +145 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/realtime/session.py +265 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/realtime/session_controller.py +501 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/realtime/talk_ui.py +248 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/runtime_python.py +746 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold.py +435 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +27 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +16 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +67 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/env.example +40 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +72 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +214 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +45 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +50 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +243 -0
- monkeybot-3.0.0/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +46 -0
- monkeybot-3.0.0/cli/tests/test_chat_continue.py +198 -0
- monkeybot-3.0.0/cli/tests/test_chat_file_index.py +84 -0
- monkeybot-3.0.0/cli/tests/test_chat_local_shell.py +157 -0
- monkeybot-3.0.0/cli/tests/test_chat_session.py +452 -0
- monkeybot-3.0.0/cli/tests/test_chat_tui.py +2383 -0
- monkeybot-3.0.0/cli/tests/test_cli.py +319 -0
- monkeybot-3.0.0/cli/tests/test_doctor.py +85 -0
- monkeybot-3.0.0/cli/tests/test_extras_catalog.py +102 -0
- monkeybot-3.0.0/cli/tests/test_gateway_health.py +163 -0
- monkeybot-3.0.0/cli/tests/test_realtime_session_controller.py +319 -0
- monkeybot-3.0.0/cli/tests/test_run_cmd.py +90 -0
- monkeybot-3.0.0/cli/tests/test_runtime_python.py +1076 -0
- monkeybot-3.0.0/cli/tests/test_scaffold.py +220 -0
- monkeybot-3.0.0/cli/uv.lock +1838 -0
- monkeybot-3.0.0/docker/docker-compose.sandbox.yml +57 -0
- monkeybot-3.0.0/docs/agent-layout.md +136 -0
- monkeybot-3.0.0/docs/browser-mcp.md +221 -0
- monkeybot-3.0.0/docs/cloud-deployment-design.md +96 -0
- monkeybot-3.0.0/docs/deploy-aws-agentcore.md +109 -0
- monkeybot-3.0.0/docs/deploy-pattern-a-container.md +403 -0
- monkeybot-3.0.0/docs/deploy-pattern-b-serverless.md +370 -0
- monkeybot-3.0.0/docs/deploy-pattern-c-agent-platform.md +236 -0
- monkeybot-3.0.0/docs/deploy-pattern-d-realtime.md +308 -0
- monkeybot-3.0.0/docs/features.md +821 -0
- monkeybot-3.0.0/docs/getting-started.md +182 -0
- monkeybot-3.0.0/docs/knowledge-layer-fixes.md +274 -0
- monkeybot-3.0.0/docs/live-evals.md +66 -0
- monkeybot-3.0.0/docs/mcp.md +193 -0
- monkeybot-3.0.0/docs/memory-graph-split-plan.md +231 -0
- monkeybot-3.0.0/docs/migrations/agent-scope-namespacing.md +96 -0
- monkeybot-3.0.0/docs/migrations/memory-outbox.sql +39 -0
- monkeybot-3.0.0/docs/progressive-loop-tools.md +24 -0
- monkeybot-3.0.0/docs/progressive-mcp-tools.md +23 -0
- monkeybot-3.0.0/docs/spill-dynamic-design.md +555 -0
- monkeybot-3.0.0/docs/sse-gateway-ui.md +273 -0
- monkeybot-3.0.0/docs/workspace-index-design.md +996 -0
- monkeybot-3.0.0/evals/TEST_COVERAGE.md +68 -0
- monkeybot-3.0.0/evals/models.py +115 -0
- monkeybot-3.0.0/evals/report.py +363 -0
- monkeybot-3.0.0/evals/scenarios/mcp/get_prompt.yaml +12 -0
- monkeybot-3.0.0/evals/scenarios/mcp/list_resources.yaml +12 -0
- monkeybot-3.0.0/evals/scenarios/mcp/tool_invoke.yaml +12 -0
- monkeybot-3.0.0/evals/scenarios/memory/recall_single_session.yaml +11 -0
- monkeybot-3.0.0/evals/scenarios/tools/core_run_command.yaml +11 -0
- monkeybot-3.0.0/evals/scenarios/tools/core_run_command_sandbox.yaml +20 -0
- monkeybot-3.0.0/evals/scenarios/tools/core_write.yaml +10 -0
- monkeybot-3.0.0/evals/smoke_agent/fixture_mcp_server.py +35 -0
- monkeybot-3.0.0/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +34 -0
- monkeybot-3.0.0/evals/smoke_agent/monkeybot_config/mcp.json +12 -0
- monkeybot-3.0.0/evals/smoke_agent/monkeybot_config/monkeybot.yaml +48 -0
- monkeybot-3.0.0/evals/smoke_agent/uv.lock +2332 -0
- monkeybot-3.0.0/evals/suites/smoke.yaml +19 -0
- monkeybot-3.0.0/evals/test_assertions.py +166 -0
- monkeybot-3.0.0/examples/README.md +34 -0
- monkeybot-3.0.0/examples/agentcore/handler.py +113 -0
- monkeybot-3.0.0/examples/agentcore/runtime_app.py +104 -0
- monkeybot-3.0.0/examples/agentengine/handler.py +78 -0
- monkeybot-3.0.0/examples/cloud-functions/main.py +77 -0
- monkeybot-3.0.0/examples/lambda/handler.py +95 -0
- monkeybot-3.0.0/examples/skills/browser/SKILL.md +68 -0
- monkeybot-3.0.0/examples/skills/diagnostics/README.md +250 -0
- monkeybot-3.0.0/examples/skills/diagnostics/diagnostics.py +127 -0
- monkeybot-3.0.0/examples/skills/image-generator/SKILL.md +72 -0
- monkeybot-3.0.0/examples/skills/image-generator/generate_image.py +214 -0
- monkeybot-3.0.0/integrations/browser-mcp/pyproject.toml +25 -0
- monkeybot-3.0.0/integrations/browser-mcp/scripts/agentcore_smoke.py +47 -0
- monkeybot-3.0.0/integrations/browser-mcp/src/browser_mcp/agentcore.py +73 -0
- monkeybot-3.0.0/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +344 -0
- monkeybot-3.0.0/integrations/browser-mcp/src/browser_mcp/screenshots.py +57 -0
- monkeybot-3.0.0/integrations/browser-mcp/src/browser_mcp/server.py +536 -0
- monkeybot-3.0.0/integrations/browser-mcp/tests/test_agentcore.py +348 -0
- monkeybot-3.0.0/integrations/browser-mcp/tests/test_in_app_cdp.py +208 -0
- monkeybot-3.0.0/integrations/browser-mcp/tests/test_indexed_tools.py +120 -0
- monkeybot-3.0.0/integrations/browser-mcp/tests/test_playwright_helpers.py +145 -0
- monkeybot-3.0.0/integrations/browser-mcp/tests/test_server_shutdown.py +117 -0
- monkeybot-3.0.0/integrations/browser-mcp/uv.lock +1153 -0
- monkeybot-3.0.0/pyproject.toml +140 -0
- monkeybot-3.0.0/scripts/precommit-pytest.sh +28 -0
- monkeybot-3.0.0/scripts/release.py +238 -0
- monkeybot-3.0.0/src/monkeybot/core/__init__.py +19 -0
- monkeybot-3.0.0/src/monkeybot/core/attachments/__init__.py +28 -0
- monkeybot-3.0.0/src/monkeybot/core/attachments/catalog.py +63 -0
- monkeybot-3.0.0/src/monkeybot/core/attachments/freeze.py +170 -0
- monkeybot-3.0.0/src/monkeybot/core/attachments/store.py +185 -0
- monkeybot-3.0.0/src/monkeybot/core/attachments/text.py +84 -0
- monkeybot-3.0.0/src/monkeybot/core/attachments/tools.py +41 -0
- monkeybot-3.0.0/src/monkeybot/core/bootstrap.py +299 -0
- monkeybot-3.0.0/src/monkeybot/core/config/__init__.py +75 -0
- monkeybot-3.0.0/src/monkeybot/core/config/runtime_env.py +331 -0
- monkeybot-3.0.0/src/monkeybot/core/config/settings.py +426 -0
- monkeybot-3.0.0/src/monkeybot/core/config/validation.py +255 -0
- monkeybot-3.0.0/src/monkeybot/core/context/__init__.py +949 -0
- monkeybot-3.0.0/src/monkeybot/core/context/epoch.py +243 -0
- monkeybot-3.0.0/src/monkeybot/core/context/tool_result_ingress.py +315 -0
- monkeybot-3.0.0/src/monkeybot/core/context/tool_shapers.py +366 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/__init__.py +16 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/captions.py +198 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/chunking.py +880 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/config.py +259 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/embeddings/__init__.py +25 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/embeddings/base.py +248 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/embeddings/factory.py +206 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/embeddings/gemini.py +149 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/embeddings/nvidia.py +69 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/embeddings/openai_compat.py +116 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/embeddings/sanitize.py +27 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/evidence_guard.py +275 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/extractors.py +364 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/fusion.py +419 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/hook.py +417 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/indexer.py +680 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/links.py +175 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/salience.py +207 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/sqlite_index.py +767 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/subsystem.py +298 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/tool.py +29 -0
- monkeybot-3.0.0/src/monkeybot/core/knowledge/types.py +127 -0
- monkeybot-3.0.0/src/monkeybot/core/layout.py +292 -0
- monkeybot-3.0.0/src/monkeybot/core/llm/provider.py +302 -0
- monkeybot-3.0.0/src/monkeybot/core/llm/usage.py +76 -0
- monkeybot-3.0.0/src/monkeybot/core/lockfile_names.py +21 -0
- monkeybot-3.0.0/src/monkeybot/core/mcp/mcp_client.py +1244 -0
- monkeybot-3.0.0/src/monkeybot/core/mcp/ports_mcp.py +103 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/__init__.py +12 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/config.py +51 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/hook.py +77 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/ids.py +21 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/ingest.py +187 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/migrate_layout.py +439 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/observability.py +119 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/outbox.py +499 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/palace.py +444 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/subsystem.py +355 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/uri.py +26 -0
- monkeybot-3.0.0/src/monkeybot/core/memory/writer.py +205 -0
- monkeybot-3.0.0/src/monkeybot/core/messages/tool_integrity.py +280 -0
- monkeybot-3.0.0/src/monkeybot/core/messages/transform_context.py +121 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/__init__.py +25 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/backends.py +292 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/durable_runs.py +372 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/errors.py +7 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/firestore.indexes.json +31 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/firestore.py +1445 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/history.py +324 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/postgres.py +1586 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/scheduled_loops.py +454 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/session_turn_locks.py +107 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/sqlite.py +466 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/sqlite_backend.py +108 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/sqlite_vector.py +481 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/thread_summary.py +366 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/transcript.py +289 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/transcript_analyzer.py +849 -0
- monkeybot-3.0.0/src/monkeybot/core/persistence/usage.py +220 -0
- monkeybot-3.0.0/src/monkeybot/core/prompts/harness_prompt.py +183 -0
- monkeybot-3.0.0/src/monkeybot/core/prompts/headings.py +58 -0
- monkeybot-3.0.0/src/monkeybot/core/prompts/prompt.py +203 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/__init__.py +5 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/context_budget.py +237 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/doom_loop.py +121 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/events.py +1067 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/history_compaction.py +407 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/loop.py +164 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/loop_hooks.py +133 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/loop_messages.py +261 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/loop_ports.py +17 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/loop_usage.py +166 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/realtime_loop.py +692 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/tool_batch.py +147 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/tool_dispatch.py +1037 -0
- monkeybot-3.0.0/src/monkeybot/core/runtime/turn_loop.py +1429 -0
- monkeybot-3.0.0/src/monkeybot/core/subagents/progress_publish.py +183 -0
- monkeybot-3.0.0/src/monkeybot/core/subagents/subagent_proto.py +371 -0
- monkeybot-3.0.0/src/monkeybot/core/subagents/subagent_worker.py +496 -0
- monkeybot-3.0.0/src/monkeybot/core/subagents/worker_pool.py +635 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/core_tool_executor.py +2170 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/fs_isolation.py +316 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/inspector.py +277 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/patch.py +567 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/permission.py +291 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/sandbox_executor.py +357 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/spill_inventory.py +518 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/terminal.py +756 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/tool_hint.py +128 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/tool_kind.py +39 -0
- monkeybot-3.0.0/src/monkeybot/core/tools/workspace_service.py +1486 -0
- monkeybot-3.0.0/src/monkeybot/core/types/types_tools.py +45 -0
- monkeybot-3.0.0/src/monkeybot/core/workspace/gcs.py +144 -0
- monkeybot-3.0.0/src/monkeybot/core/workspace/local.py +173 -0
- monkeybot-3.0.0/src/monkeybot/core/workspace/protocol.py +52 -0
- monkeybot-3.0.0/src/monkeybot/core/workspace/s3.py +169 -0
- monkeybot-3.0.0/src/monkeybot/core/workspace_layout.py +19 -0
- monkeybot-3.0.0/src/monkeybot/gateway/realtime/app.py +131 -0
- monkeybot-3.0.0/src/monkeybot/gateway/realtime/deps.py +54 -0
- monkeybot-3.0.0/src/monkeybot/gateway/realtime/manager.py +101 -0
- monkeybot-3.0.0/src/monkeybot/gateway/realtime/metrics.py +147 -0
- monkeybot-3.0.0/src/monkeybot/gateway/realtime/routes.py +906 -0
- monkeybot-3.0.0/src/monkeybot/gateway/realtime/session.py +236 -0
- monkeybot-3.0.0/src/monkeybot/gateway/sse/app.py +814 -0
- monkeybot-3.0.0/src/monkeybot/gateway/sse/loop_port.py +34 -0
- monkeybot-3.0.0/src/monkeybot/gateway/sse/models.py +215 -0
- monkeybot-3.0.0/src/monkeybot/gateway/sse/routes.py +1207 -0
- monkeybot-3.0.0/src/monkeybot/gateway/sse/scheduler_routes.py +207 -0
- monkeybot-3.0.0/src/monkeybot/gateway/sse/session_bus.py +393 -0
- monkeybot-3.0.0/src/monkeybot/observability/__init__.py +240 -0
- monkeybot-3.0.0/src/monkeybot/observability/instrumentation.py +151 -0
- monkeybot-3.0.0/src/monkeybot/observability/spans.py +473 -0
- monkeybot-3.0.0/src/monkeybot/observability/sqlite_exporter.py +722 -0
- monkeybot-3.0.0/src/monkeybot/providers/__init__.py +21 -0
- monkeybot-3.0.0/src/monkeybot/providers/_openai_compat.py +715 -0
- monkeybot-3.0.0/src/monkeybot/providers/_utils.py +650 -0
- monkeybot-3.0.0/src/monkeybot/providers/bedrock.py +142 -0
- monkeybot-3.0.0/src/monkeybot/providers/claude.py +127 -0
- monkeybot-3.0.0/src/monkeybot/providers/gemini.py +780 -0
- monkeybot-3.0.0/src/monkeybot/providers/model_capabilities.py +52 -0
- monkeybot-3.0.0/src/monkeybot/providers/ollama.py +181 -0
- monkeybot-3.0.0/src/monkeybot/providers/openai.py +127 -0
- monkeybot-3.0.0/src/monkeybot/providers/openrouter.py +106 -0
- monkeybot-3.0.0/src/monkeybot/providers/pricing.py +100 -0
- monkeybot-3.0.0/src/monkeybot/providers/vertex_claude.py +144 -0
- monkeybot-3.0.0/src/monkeybot/scheduler/worker.py +91 -0
- monkeybot-3.0.0/src/monkeybot/todo_list/__init__.py +45 -0
- monkeybot-3.0.0/src/monkeybot/todo_list/store.py +264 -0
- monkeybot-3.0.0/src/monkeybot/todo_list/tool.py +132 -0
- monkeybot-3.0.0/tests/cli/test_main.py +111 -0
- monkeybot-3.0.0/tests/conftest.py +91 -0
- monkeybot-3.0.0/tests/core/fixtures/bitbucket_dc_style_pr.diff +456 -0
- monkeybot-3.0.0/tests/core/memory/helpers.py +28 -0
- monkeybot-3.0.0/tests/core/memory/in_memory_palace.py +107 -0
- monkeybot-3.0.0/tests/core/memory/test_mempalace.py +485 -0
- monkeybot-3.0.0/tests/core/memory/test_review_fixes.py +1234 -0
- monkeybot-3.0.0/tests/core/test_agent_layout.py +267 -0
- monkeybot-3.0.0/tests/core/test_attachment_freeze.py +130 -0
- monkeybot-3.0.0/tests/core/test_bootstrap.py +394 -0
- monkeybot-3.0.0/tests/core/test_config_extensions.py +554 -0
- monkeybot-3.0.0/tests/core/test_context.py +687 -0
- monkeybot-3.0.0/tests/core/test_context_budget.py +167 -0
- monkeybot-3.0.0/tests/core/test_context_epoch.py +268 -0
- monkeybot-3.0.0/tests/core/test_core_tool_executor.py +4306 -0
- monkeybot-3.0.0/tests/core/test_doom_loop.py +506 -0
- monkeybot-3.0.0/tests/core/test_durable_events.py +103 -0
- monkeybot-3.0.0/tests/core/test_durable_runs.py +217 -0
- monkeybot-3.0.0/tests/core/test_empty_completion.py +168 -0
- monkeybot-3.0.0/tests/core/test_events.py +622 -0
- monkeybot-3.0.0/tests/core/test_evidence_guard.py +392 -0
- monkeybot-3.0.0/tests/core/test_firestore_history.py +352 -0
- monkeybot-3.0.0/tests/core/test_fs_isolation.py +242 -0
- monkeybot-3.0.0/tests/core/test_gemini_history_replay.py +327 -0
- monkeybot-3.0.0/tests/core/test_harness_prompt.py +162 -0
- monkeybot-3.0.0/tests/core/test_history.py +366 -0
- monkeybot-3.0.0/tests/core/test_history_compaction_split.py +120 -0
- monkeybot-3.0.0/tests/core/test_inspector.py +251 -0
- monkeybot-3.0.0/tests/core/test_knowledge_chunking.py +283 -0
- monkeybot-3.0.0/tests/core/test_knowledge_chunking_rank.py +86 -0
- monkeybot-3.0.0/tests/core/test_knowledge_config.py +185 -0
- monkeybot-3.0.0/tests/core/test_knowledge_embeddings.py +332 -0
- monkeybot-3.0.0/tests/core/test_knowledge_fts.py +218 -0
- monkeybot-3.0.0/tests/core/test_knowledge_fusion.py +475 -0
- monkeybot-3.0.0/tests/core/test_knowledge_fusion_ann.py +166 -0
- monkeybot-3.0.0/tests/core/test_knowledge_hook.py +71 -0
- monkeybot-3.0.0/tests/core/test_knowledge_indexer.py +955 -0
- monkeybot-3.0.0/tests/core/test_knowledge_links.py +106 -0
- monkeybot-3.0.0/tests/core/test_knowledge_media.py +336 -0
- monkeybot-3.0.0/tests/core/test_knowledge_salience.py +211 -0
- monkeybot-3.0.0/tests/core/test_knowledge_single_writer.py +291 -0
- monkeybot-3.0.0/tests/core/test_knowledge_subsystem.py +102 -0
- monkeybot-3.0.0/tests/core/test_knowledge_vectors.py +283 -0
- monkeybot-3.0.0/tests/core/test_loop.py +2761 -0
- monkeybot-3.0.0/tests/core/test_loop_hooks.py +584 -0
- monkeybot-3.0.0/tests/core/test_loop_observability.py +196 -0
- monkeybot-3.0.0/tests/core/test_loop_transcript.py +270 -0
- monkeybot-3.0.0/tests/core/test_mcp_client.py +993 -0
- monkeybot-3.0.0/tests/core/test_memory_layout_migrate.py +210 -0
- monkeybot-3.0.0/tests/core/test_message_pipeline.py +143 -0
- monkeybot-3.0.0/tests/core/test_patch.py +403 -0
- monkeybot-3.0.0/tests/core/test_pricing.py +23 -0
- monkeybot-3.0.0/tests/core/test_progress_publish.py +255 -0
- monkeybot-3.0.0/tests/core/test_prompt.py +336 -0
- monkeybot-3.0.0/tests/core/test_realtime_loop.py +458 -0
- monkeybot-3.0.0/tests/core/test_run_command_parse.py +89 -0
- monkeybot-3.0.0/tests/core/test_runtime_env.py +396 -0
- monkeybot-3.0.0/tests/core/test_sandbox_executor.py +798 -0
- monkeybot-3.0.0/tests/core/test_spill_dynamic.py +386 -0
- monkeybot-3.0.0/tests/core/test_spill_inventory.py +81 -0
- monkeybot-3.0.0/tests/core/test_storage_backends.py +1238 -0
- monkeybot-3.0.0/tests/core/test_subagent_proto.py +490 -0
- monkeybot-3.0.0/tests/core/test_subagent_trace_propagation.py +557 -0
- monkeybot-3.0.0/tests/core/test_subagent_worker_paths.py +402 -0
- monkeybot-3.0.0/tests/core/test_terminal.py +989 -0
- monkeybot-3.0.0/tests/core/test_thread_summary_wire.py +579 -0
- monkeybot-3.0.0/tests/core/test_tool_def_schema.py +49 -0
- monkeybot-3.0.0/tests/core/test_tool_integrity.py +198 -0
- monkeybot-3.0.0/tests/core/test_tool_result_ingress.py +208 -0
- monkeybot-3.0.0/tests/core/test_transcript.py +242 -0
- monkeybot-3.0.0/tests/core/test_transcript_analyzer.py +371 -0
- monkeybot-3.0.0/tests/core/test_truncated_tool_batch.py +175 -0
- monkeybot-3.0.0/tests/core/test_usage.py +269 -0
- monkeybot-3.0.0/tests/core/test_worker_pool.py +693 -0
- monkeybot-3.0.0/tests/core/test_workspace_layout.py +75 -0
- monkeybot-3.0.0/tests/core/test_workspace_write_scope.py +114 -0
- monkeybot-3.0.0/tests/evals/scenario_runner.py +183 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_glob_grep.yaml +24 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_load_file.yaml +17 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_loops.yaml +24 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_replace_apply_patch.yaml +32 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_run_command.yaml +17 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_search_knowledge.yaml +17 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_search_memory.yaml +17 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_todo_list.yaml +18 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_web_search.yaml +17 -0
- monkeybot-3.0.0/tests/evals/scenarios/tool_write.yaml +18 -0
- monkeybot-3.0.0/tests/evals/test_agent_behavior.py +48 -0
- monkeybot-3.0.0/tests/evals/test_memory_knowledge_routing.py +70 -0
- monkeybot-3.0.0/tests/gateway/realtime/test_app.py +40 -0
- monkeybot-3.0.0/tests/gateway/realtime/test_manager.py +133 -0
- monkeybot-3.0.0/tests/gateway/realtime/test_routes_client_text.py +249 -0
- monkeybot-3.0.0/tests/gateway/sse/test_create_session_model.py +282 -0
- monkeybot-3.0.0/tests/gateway/sse/test_routes.py +682 -0
- monkeybot-3.0.0/tests/gateway/sse/test_scheduler_routes.py +166 -0
- monkeybot-3.0.0/tests/gateway/sse/test_session_bus.py +231 -0
- monkeybot-3.0.0/tests/gateway/sse/test_transcript_wiring.py +155 -0
- monkeybot-3.0.0/tests/gateway/test_otel_lifespan.py +107 -0
- monkeybot-3.0.0/tests/gateway/test_resolve_provider.py +74 -0
- monkeybot-3.0.0/tests/gateway/test_sse_events.py +113 -0
- monkeybot-3.0.0/tests/gateway/test_subagent_event_publisher.py +43 -0
- monkeybot-3.0.0/tests/integration/test_observability_integration.py +382 -0
- monkeybot-3.0.0/tests/observability/test_init.py +154 -0
- monkeybot-3.0.0/tests/observability/test_sqlite_exporter.py +655 -0
- monkeybot-3.0.0/tests/providers/conftest.py +79 -0
- monkeybot-3.0.0/tests/providers/test_anthropic_cache.py +743 -0
- monkeybot-3.0.0/tests/providers/test_bedrock_estimate.py +48 -0
- monkeybot-3.0.0/tests/providers/test_gemini_usage.py +355 -0
- monkeybot-3.0.0/tests/providers/test_model_capabilities.py +40 -0
- monkeybot-3.0.0/tests/providers/test_ollama.py +125 -0
- monkeybot-3.0.0/tests/providers/test_openai_compat_usage.py +514 -0
- monkeybot-3.0.0/tests/providers/test_openai_history.py +356 -0
- monkeybot-3.0.0/tests/providers/test_pricing.py +97 -0
- monkeybot-3.0.0/tests/providers/test_sonnet5_sampling.py +357 -0
- monkeybot-3.0.0/tests/test_cold_start.py +84 -0
- monkeybot-3.0.0/tests/test_packaging_config.py +84 -0
- monkeybot-3.0.0/tests/test_release_script.py +190 -0
- monkeybot-3.0.0/tests/todo_list/test_todo_list.py +308 -0
- monkeybot-3.0.0/tests/web_search/test_web_search.py +293 -0
- monkeybot-3.0.0/uv.lock +5429 -0
- monkeybot-2.2.0/.github/workflows/live-eval-smoke.yml +0 -199
- monkeybot-2.2.0/.github/workflows/publish-release.yml +0 -149
- monkeybot-2.2.0/.gitignore +0 -62
- monkeybot-2.2.0/BACKLOG.md +0 -77
- monkeybot-2.2.0/CHANGELOG.md +0 -179
- monkeybot-2.2.0/PKG-INFO +0 -180
- monkeybot-2.2.0/cli/pyproject.toml +0 -44
- monkeybot-2.2.0/cli/skills/monkeybot/SKILL.md +0 -199
- monkeybot-2.2.0/cli/skills/monkeybot/references/config-sections.md +0 -160
- monkeybot-2.2.0/cli/src/monkeybot_cli/chat_session.py +0 -911
- monkeybot-2.2.0/cli/src/monkeybot_cli/chat_status_bar.py +0 -205
- monkeybot-2.2.0/cli/src/monkeybot_cli/chat_tool_display.py +0 -334
- monkeybot-2.2.0/cli/src/monkeybot_cli/chat_tui.py +0 -1491
- monkeybot-2.2.0/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -996
- monkeybot-2.2.0/cli/src/monkeybot_cli/commands/chat.py +0 -824
- monkeybot-2.2.0/cli/src/monkeybot_cli/commands/doctor.py +0 -393
- monkeybot-2.2.0/cli/src/monkeybot_cli/commands/run_cmd.py +0 -40
- monkeybot-2.2.0/cli/src/monkeybot_cli/commands/validate.py +0 -386
- monkeybot-2.2.0/cli/src/monkeybot_cli/compat.py +0 -7
- monkeybot-2.2.0/cli/src/monkeybot_cli/extras_catalog.py +0 -95
- monkeybot-2.2.0/cli/src/monkeybot_cli/main.py +0 -38
- monkeybot-2.2.0/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -314
- monkeybot-2.2.0/cli/src/monkeybot_cli/providers.py +0 -112
- monkeybot-2.2.0/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -142
- monkeybot-2.2.0/cli/src/monkeybot_cli/realtime/session.py +0 -256
- monkeybot-2.2.0/cli/src/monkeybot_cli/realtime/session_controller.py +0 -501
- monkeybot-2.2.0/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -243
- monkeybot-2.2.0/cli/src/monkeybot_cli/runtime_python.py +0 -91
- monkeybot-2.2.0/cli/src/monkeybot_cli/scaffold.py +0 -263
- monkeybot-2.2.0/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -27
- monkeybot-2.2.0/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +0 -15
- monkeybot-2.2.0/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -57
- monkeybot-2.2.0/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -36
- monkeybot-2.2.0/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -46
- monkeybot-2.2.0/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +0 -194
- monkeybot-2.2.0/cli/tests/test_chat_session.py +0 -363
- monkeybot-2.2.0/cli/tests/test_chat_tui.py +0 -1243
- monkeybot-2.2.0/cli/tests/test_cli.py +0 -189
- monkeybot-2.2.0/cli/tests/test_doctor.py +0 -49
- monkeybot-2.2.0/cli/tests/test_extras_catalog.py +0 -87
- monkeybot-2.2.0/cli/tests/test_gateway_health.py +0 -135
- monkeybot-2.2.0/cli/tests/test_realtime_session_controller.py +0 -301
- monkeybot-2.2.0/cli/tests/test_run_cmd.py +0 -80
- monkeybot-2.2.0/cli/tests/test_runtime_python.py +0 -109
- monkeybot-2.2.0/cli/tests/test_scaffold.py +0 -120
- monkeybot-2.2.0/cli/uv.lock +0 -1612
- monkeybot-2.2.0/docker/docker-compose.sandbox.yml +0 -49
- monkeybot-2.2.0/docs/agent-layout.md +0 -109
- monkeybot-2.2.0/docs/browser-mcp.md +0 -170
- monkeybot-2.2.0/docs/cloud-deployment-design.md +0 -96
- monkeybot-2.2.0/docs/deploy-aws-agentcore.md +0 -109
- monkeybot-2.2.0/docs/deploy-pattern-a-container.md +0 -402
- monkeybot-2.2.0/docs/deploy-pattern-b-serverless.md +0 -354
- monkeybot-2.2.0/docs/deploy-pattern-c-agent-platform.md +0 -225
- monkeybot-2.2.0/docs/deploy-pattern-d-realtime.md +0 -307
- monkeybot-2.2.0/docs/features.md +0 -801
- monkeybot-2.2.0/docs/getting-started.md +0 -165
- monkeybot-2.2.0/docs/live-evals.md +0 -64
- monkeybot-2.2.0/docs/mcp.md +0 -194
- monkeybot-2.2.0/docs/progressive-mcp-tools.md +0 -267
- monkeybot-2.2.0/docs/sse-gateway-ui.md +0 -272
- monkeybot-2.2.0/evals/models.py +0 -97
- monkeybot-2.2.0/evals/report.py +0 -348
- monkeybot-2.2.0/evals/scenarios/mcp/tool_invoke.yaml +0 -12
- monkeybot-2.2.0/evals/scenarios/memory/recall_single_session.yaml +0 -11
- monkeybot-2.2.0/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -33
- monkeybot-2.2.0/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -52
- monkeybot-2.2.0/evals/smoke_agent/uv.lock +0 -2144
- monkeybot-2.2.0/evals/suites/smoke.yaml +0 -12
- monkeybot-2.2.0/evals/test_assertions.py +0 -120
- monkeybot-2.2.0/examples/README.md +0 -34
- monkeybot-2.2.0/examples/agentcore/handler.py +0 -112
- monkeybot-2.2.0/examples/agentcore/runtime_app.py +0 -103
- monkeybot-2.2.0/examples/agentengine/handler.py +0 -77
- monkeybot-2.2.0/examples/cloud-functions/main.py +0 -76
- monkeybot-2.2.0/examples/lambda/handler.py +0 -79
- monkeybot-2.2.0/examples/skills/browser/SKILL.md +0 -68
- monkeybot-2.2.0/examples/skills/diagnostics/README.md +0 -264
- monkeybot-2.2.0/examples/skills/diagnostics/diagnostics.py +0 -130
- monkeybot-2.2.0/examples/skills/image-generator/SKILL.md +0 -54
- monkeybot-2.2.0/examples/skills/image-generator/generate_image.py +0 -199
- monkeybot-2.2.0/integrations/browser-mcp/pyproject.toml +0 -22
- monkeybot-2.2.0/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -57
- monkeybot-2.2.0/integrations/browser-mcp/src/browser_mcp/server.py +0 -351
- monkeybot-2.2.0/integrations/browser-mcp/tests/test_indexed_tools.py +0 -117
- monkeybot-2.2.0/integrations/browser-mcp/tests/test_server_shutdown.py +0 -104
- monkeybot-2.2.0/integrations/browser-mcp/uv.lock +0 -936
- monkeybot-2.2.0/pyproject.toml +0 -124
- monkeybot-2.2.0/scripts/precommit-pytest.sh +0 -22
- monkeybot-2.2.0/scripts/release.py +0 -227
- monkeybot-2.2.0/scripts/verify_memory.py +0 -28
- monkeybot-2.2.0/src/monkeybot/core/__init__.py +0 -19
- monkeybot-2.2.0/src/monkeybot/core/attachments/__init__.py +0 -22
- monkeybot-2.2.0/src/monkeybot/core/attachments/catalog.py +0 -62
- monkeybot-2.2.0/src/monkeybot/core/attachments/freeze.py +0 -158
- monkeybot-2.2.0/src/monkeybot/core/attachments/store.py +0 -180
- monkeybot-2.2.0/src/monkeybot/core/attachments/text.py +0 -72
- monkeybot-2.2.0/src/monkeybot/core/attachments/tools.py +0 -54
- monkeybot-2.2.0/src/monkeybot/core/bootstrap.py +0 -242
- monkeybot-2.2.0/src/monkeybot/core/config/__init__.py +0 -71
- monkeybot-2.2.0/src/monkeybot/core/config/runtime_env.py +0 -297
- monkeybot-2.2.0/src/monkeybot/core/config/settings.py +0 -341
- monkeybot-2.2.0/src/monkeybot/core/config/validation.py +0 -249
- monkeybot-2.2.0/src/monkeybot/core/context/__init__.py +0 -781
- monkeybot-2.2.0/src/monkeybot/core/context/curator.py +0 -255
- monkeybot-2.2.0/src/monkeybot/core/context/epoch.py +0 -226
- monkeybot-2.2.0/src/monkeybot/core/context/memory_prompt.py +0 -222
- monkeybot-2.2.0/src/monkeybot/core/context/tool_result_ingress.py +0 -290
- monkeybot-2.2.0/src/monkeybot/core/context/tool_shapers.py +0 -361
- monkeybot-2.2.0/src/monkeybot/core/layout.py +0 -198
- monkeybot-2.2.0/src/monkeybot/core/llm/provider.py +0 -296
- monkeybot-2.2.0/src/monkeybot/core/llm/usage.py +0 -57
- monkeybot-2.2.0/src/monkeybot/core/mcp/mcp_client.py +0 -1215
- monkeybot-2.2.0/src/monkeybot/core/mcp/ports_mcp.py +0 -109
- monkeybot-2.2.0/src/monkeybot/core/memory/__init__.py +0 -24
- monkeybot-2.2.0/src/monkeybot/core/memory/hook.py +0 -413
- monkeybot-2.2.0/src/monkeybot/core/memory/index_format.py +0 -104
- monkeybot-2.2.0/src/monkeybot/core/memory/integrity.py +0 -180
- monkeybot-2.2.0/src/monkeybot/core/memory/organizer.py +0 -270
- monkeybot-2.2.0/src/monkeybot/core/memory/storage_ops.py +0 -139
- monkeybot-2.2.0/src/monkeybot/core/memory/subsystem.py +0 -91
- monkeybot-2.2.0/src/monkeybot/core/messages/tool_integrity.py +0 -262
- monkeybot-2.2.0/src/monkeybot/core/messages/transform_context.py +0 -84
- monkeybot-2.2.0/src/monkeybot/core/persistence/__init__.py +0 -17
- monkeybot-2.2.0/src/monkeybot/core/persistence/backends.py +0 -236
- monkeybot-2.2.0/src/monkeybot/core/persistence/durable_runs.py +0 -286
- monkeybot-2.2.0/src/monkeybot/core/persistence/firestore.py +0 -658
- monkeybot-2.2.0/src/monkeybot/core/persistence/history.py +0 -156
- monkeybot-2.2.0/src/monkeybot/core/persistence/postgres.py +0 -895
- monkeybot-2.2.0/src/monkeybot/core/persistence/scheduled_loops.py +0 -435
- monkeybot-2.2.0/src/monkeybot/core/persistence/session_turn_locks.py +0 -94
- monkeybot-2.2.0/src/monkeybot/core/persistence/sqlite.py +0 -219
- monkeybot-2.2.0/src/monkeybot/core/persistence/sqlite_backend.py +0 -74
- monkeybot-2.2.0/src/monkeybot/core/persistence/thread_summary.py +0 -61
- monkeybot-2.2.0/src/monkeybot/core/persistence/transcript.py +0 -194
- monkeybot-2.2.0/src/monkeybot/core/persistence/usage.py +0 -149
- monkeybot-2.2.0/src/monkeybot/core/prompts/harness_prompt.py +0 -197
- monkeybot-2.2.0/src/monkeybot/core/prompts/prompt.py +0 -215
- monkeybot-2.2.0/src/monkeybot/core/runtime/__init__.py +0 -1
- monkeybot-2.2.0/src/monkeybot/core/runtime/context_budget.py +0 -267
- monkeybot-2.2.0/src/monkeybot/core/runtime/events.py +0 -819
- monkeybot-2.2.0/src/monkeybot/core/runtime/loop.py +0 -2374
- monkeybot-2.2.0/src/monkeybot/core/runtime/realtime_loop.py +0 -654
- monkeybot-2.2.0/src/monkeybot/core/subagents/subagent_proto.py +0 -315
- monkeybot-2.2.0/src/monkeybot/core/subagents/subagent_worker.py +0 -434
- monkeybot-2.2.0/src/monkeybot/core/subagents/worker_pool.py +0 -403
- monkeybot-2.2.0/src/monkeybot/core/tools/core_tool_executor.py +0 -1549
- monkeybot-2.2.0/src/monkeybot/core/tools/inspector.py +0 -226
- monkeybot-2.2.0/src/monkeybot/core/tools/patch.py +0 -480
- monkeybot-2.2.0/src/monkeybot/core/tools/permission.py +0 -284
- monkeybot-2.2.0/src/monkeybot/core/tools/sandbox_executor.py +0 -349
- monkeybot-2.2.0/src/monkeybot/core/tools/spill_inventory.py +0 -35
- monkeybot-2.2.0/src/monkeybot/core/tools/terminal.py +0 -381
- monkeybot-2.2.0/src/monkeybot/core/tools/workspace_service.py +0 -764
- monkeybot-2.2.0/src/monkeybot/core/tools/workspace_tools.py +0 -117
- monkeybot-2.2.0/src/monkeybot/core/types/types_tools.py +0 -29
- monkeybot-2.2.0/src/monkeybot/core/workspace/gcs.py +0 -130
- monkeybot-2.2.0/src/monkeybot/core/workspace/local.py +0 -162
- monkeybot-2.2.0/src/monkeybot/core/workspace/protocol.py +0 -45
- monkeybot-2.2.0/src/monkeybot/core/workspace/s3.py +0 -151
- monkeybot-2.2.0/src/monkeybot/core/workspace_layout.py +0 -26
- monkeybot-2.2.0/src/monkeybot/gateway/realtime/app.py +0 -127
- monkeybot-2.2.0/src/monkeybot/gateway/realtime/deps.py +0 -52
- monkeybot-2.2.0/src/monkeybot/gateway/realtime/manager.py +0 -77
- monkeybot-2.2.0/src/monkeybot/gateway/realtime/metrics.py +0 -144
- monkeybot-2.2.0/src/monkeybot/gateway/realtime/routes.py +0 -858
- monkeybot-2.2.0/src/monkeybot/gateway/realtime/session.py +0 -232
- monkeybot-2.2.0/src/monkeybot/gateway/sse/app.py +0 -719
- monkeybot-2.2.0/src/monkeybot/gateway/sse/loop_port.py +0 -31
- monkeybot-2.2.0/src/monkeybot/gateway/sse/models.py +0 -177
- monkeybot-2.2.0/src/monkeybot/gateway/sse/routes.py +0 -1101
- monkeybot-2.2.0/src/monkeybot/gateway/sse/scheduler_routes.py +0 -200
- monkeybot-2.2.0/src/monkeybot/gateway/sse/session_bus.py +0 -226
- monkeybot-2.2.0/src/monkeybot/observability/__init__.py +0 -220
- monkeybot-2.2.0/src/monkeybot/observability/instrumentation.py +0 -153
- monkeybot-2.2.0/src/monkeybot/observability/spans.py +0 -455
- monkeybot-2.2.0/src/monkeybot/providers/__init__.py +0 -19
- monkeybot-2.2.0/src/monkeybot/providers/_openai_compat.py +0 -450
- monkeybot-2.2.0/src/monkeybot/providers/_utils.py +0 -473
- monkeybot-2.2.0/src/monkeybot/providers/bedrock.py +0 -145
- monkeybot-2.2.0/src/monkeybot/providers/claude.py +0 -125
- monkeybot-2.2.0/src/monkeybot/providers/gemini.py +0 -677
- monkeybot-2.2.0/src/monkeybot/providers/ollama.py +0 -152
- monkeybot-2.2.0/src/monkeybot/providers/openai.py +0 -127
- monkeybot-2.2.0/src/monkeybot/providers/pricing.py +0 -60
- monkeybot-2.2.0/src/monkeybot/providers/vertex_claude.py +0 -148
- monkeybot-2.2.0/src/monkeybot/scheduler/worker.py +0 -87
- monkeybot-2.2.0/tests/cli/test_main.py +0 -47
- monkeybot-2.2.0/tests/conftest.py +0 -43
- monkeybot-2.2.0/tests/core/memory/fake_workspace_storage.py +0 -57
- monkeybot-2.2.0/tests/core/memory/test_hook_with_storage.py +0 -76
- monkeybot-2.2.0/tests/core/memory/test_index_format.py +0 -38
- monkeybot-2.2.0/tests/core/memory/test_organizer_with_storage.py +0 -88
- monkeybot-2.2.0/tests/core/memory/test_subsystem.py +0 -153
- monkeybot-2.2.0/tests/core/test_agent_layout.py +0 -165
- monkeybot-2.2.0/tests/core/test_attachment_freeze.py +0 -124
- monkeybot-2.2.0/tests/core/test_bootstrap.py +0 -289
- monkeybot-2.2.0/tests/core/test_config_extensions.py +0 -417
- monkeybot-2.2.0/tests/core/test_context.py +0 -541
- monkeybot-2.2.0/tests/core/test_context_budget.py +0 -177
- monkeybot-2.2.0/tests/core/test_context_curator.py +0 -105
- monkeybot-2.2.0/tests/core/test_context_epoch.py +0 -220
- monkeybot-2.2.0/tests/core/test_core_tool_executor.py +0 -1863
- monkeybot-2.2.0/tests/core/test_doom_loop.py +0 -506
- monkeybot-2.2.0/tests/core/test_durable_events.py +0 -69
- monkeybot-2.2.0/tests/core/test_durable_runs.py +0 -190
- monkeybot-2.2.0/tests/core/test_events.py +0 -314
- monkeybot-2.2.0/tests/core/test_firestore_history.py +0 -98
- monkeybot-2.2.0/tests/core/test_gemini_history_replay.py +0 -217
- monkeybot-2.2.0/tests/core/test_harness_prompt.py +0 -152
- monkeybot-2.2.0/tests/core/test_history.py +0 -346
- monkeybot-2.2.0/tests/core/test_inspector.py +0 -225
- monkeybot-2.2.0/tests/core/test_loop.py +0 -2450
- monkeybot-2.2.0/tests/core/test_loop_hooks.py +0 -582
- monkeybot-2.2.0/tests/core/test_loop_observability.py +0 -195
- monkeybot-2.2.0/tests/core/test_loop_transcript.py +0 -240
- monkeybot-2.2.0/tests/core/test_mcp_client.py +0 -896
- monkeybot-2.2.0/tests/core/test_memory.py +0 -202
- monkeybot-2.2.0/tests/core/test_memory_hook.py +0 -473
- monkeybot-2.2.0/tests/core/test_memory_organizer.py +0 -226
- monkeybot-2.2.0/tests/core/test_memory_prompt.py +0 -234
- monkeybot-2.2.0/tests/core/test_message_pipeline.py +0 -100
- monkeybot-2.2.0/tests/core/test_patch.py +0 -228
- monkeybot-2.2.0/tests/core/test_prompt.py +0 -314
- monkeybot-2.2.0/tests/core/test_realtime_loop.py +0 -444
- monkeybot-2.2.0/tests/core/test_run_command_parse.py +0 -59
- monkeybot-2.2.0/tests/core/test_runtime_env.py +0 -300
- monkeybot-2.2.0/tests/core/test_sandbox_executor.py +0 -738
- monkeybot-2.2.0/tests/core/test_spill_inventory.py +0 -28
- monkeybot-2.2.0/tests/core/test_storage_backends.py +0 -632
- monkeybot-2.2.0/tests/core/test_subagent_proto.py +0 -368
- monkeybot-2.2.0/tests/core/test_subagent_trace_propagation.py +0 -577
- monkeybot-2.2.0/tests/core/test_subagent_worker_paths.py +0 -245
- monkeybot-2.2.0/tests/core/test_terminal.py +0 -491
- monkeybot-2.2.0/tests/core/test_tool_integrity.py +0 -195
- monkeybot-2.2.0/tests/core/test_tool_result_ingress.py +0 -155
- monkeybot-2.2.0/tests/core/test_transcript.py +0 -209
- monkeybot-2.2.0/tests/core/test_truncated_tool_batch.py +0 -175
- monkeybot-2.2.0/tests/core/test_usage.py +0 -223
- monkeybot-2.2.0/tests/core/test_worker_pool.py +0 -395
- monkeybot-2.2.0/tests/core/test_workspace_layout.py +0 -72
- monkeybot-2.2.0/tests/core/test_workspace_write_scope.py +0 -97
- monkeybot-2.2.0/tests/evals/conftest.py +0 -97
- monkeybot-2.2.0/tests/evals/scenario_runner.py +0 -169
- monkeybot-2.2.0/tests/evals/scenarios/tool_search_memory.yaml +0 -17
- monkeybot-2.2.0/tests/evals/test_agent_behavior.py +0 -39
- monkeybot-2.2.0/tests/evals/test_memory_integrity.py +0 -60
- monkeybot-2.2.0/tests/gateway/realtime/test_app.py +0 -29
- monkeybot-2.2.0/tests/gateway/realtime/test_manager.py +0 -90
- monkeybot-2.2.0/tests/gateway/realtime/test_routes_client_text.py +0 -199
- monkeybot-2.2.0/tests/gateway/sse/test_create_session_model.py +0 -284
- monkeybot-2.2.0/tests/gateway/sse/test_routes.py +0 -466
- monkeybot-2.2.0/tests/gateway/sse/test_scheduler_routes.py +0 -120
- monkeybot-2.2.0/tests/gateway/sse/test_session_bus.py +0 -111
- monkeybot-2.2.0/tests/gateway/sse/test_transcript_wiring.py +0 -150
- monkeybot-2.2.0/tests/gateway/test_otel_lifespan.py +0 -97
- monkeybot-2.2.0/tests/gateway/test_resolve_provider.py +0 -69
- monkeybot-2.2.0/tests/gateway/test_sse_events.py +0 -101
- monkeybot-2.2.0/tests/integration/test_observability_integration.py +0 -382
- monkeybot-2.2.0/tests/observability/test_init.py +0 -115
- monkeybot-2.2.0/tests/providers/conftest.py +0 -78
- monkeybot-2.2.0/tests/providers/test_anthropic_cache.py +0 -489
- monkeybot-2.2.0/tests/providers/test_bedrock_estimate.py +0 -14
- monkeybot-2.2.0/tests/providers/test_gemini_usage.py +0 -253
- monkeybot-2.2.0/tests/providers/test_ollama.py +0 -101
- monkeybot-2.2.0/tests/providers/test_openai_compat_usage.py +0 -290
- monkeybot-2.2.0/tests/providers/test_openai_history.py +0 -135
- monkeybot-2.2.0/tests/providers/test_pricing.py +0 -56
- monkeybot-2.2.0/tests/test_cold_start.py +0 -74
- monkeybot-2.2.0/tests/test_packaging_config.py +0 -77
- monkeybot-2.2.0/tests/test_release_script.py +0 -151
- monkeybot-2.2.0/tests/web_search/test_web_search.py +0 -305
- monkeybot-2.2.0/uv.lock +0 -4511
- {monkeybot-2.2.0 → monkeybot-3.0.0}/.dockerignore +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/.github/workflows/ci.yml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/.github/workflows/prepare-release.yml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/.pre-commit-config.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/CONTRIBUTING.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/LICENSE +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/README.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/output.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_chat_e2e.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_chat_errors.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_chat_grounding.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_chat_renderer_parity.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_chat_status_bar.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_chat_theme.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_chat_tool_display.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_config_resolve.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/cli/tests/test_terminal_markdown.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/docker/Dockerfile +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/docker/opensandbox.docker.toml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/docker/sandbox.Dockerfile +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/docker-compose.yml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/docs/assets/logo.png +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/docs/observability-runbook.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/docs/otel-collector.example.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/docs/skills.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/assertions.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/diff.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/eval_config.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/persistence.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/runner.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scenario_loader.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scenarios/context/summarization_trigger.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scenarios/memory/recall_cross_session.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scenarios/multi_turn/task_tracking.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scenarios/skills/skill_invocation.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scenarios/subagents/dispatch_complete.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scenarios/tools/core_read.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scenarios/tools/core_read_error.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/scorer.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/smoke_agent/.env.example +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/smoke_agent/.gitignore +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/smoke_agent/pyproject.toml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/test_diff.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/test_judge.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/test_report.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/test_runner_sse.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/evals/test_scorer.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/examples/skills/diagnostics/SKILL.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/examples/skills/diagnostics/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/pytest.ini +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/scripts/create_schema.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/scripts/smoke_global_cli.sh +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/cli/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/cli/__main__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/cli/audio_io.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/cli/gateway_manager.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/cli/main.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/cli/push_to_talk.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/cli/realtime_client.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/attachments/config.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/attachments/resolve.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/config/realtime_config.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/context/campaign_context.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/context/common.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/hooks/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/llm/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/logging_utils.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/mcp/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/messages/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/path_safety.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/persistence/db.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/persistence/runs.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/prompts/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/runtime/input_admission.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/subagents/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/testing/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/tools/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/tools/types.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/types/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/types/content_blocks.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/types/interfaces.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/workspace/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/core/workspace/factory.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/bootstrap.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/main.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/realtime_main.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/sse/sse.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/observability/_state.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/observability/propagation.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/providers/gemini_live.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/providers/huggingface.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/providers/nvidia.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/providers/sampling.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/scaffold/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/scheduler/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/scheduler/__main__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/scheduler/engine.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/scheduler/interval.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/scheduler/tick_result.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/subagents/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/web_search/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/web_search/protocol.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/src/monkeybot/web_search/tool.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/acceptance/test_observability_acceptance.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/cli/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/cli/test_gateway_manager.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/cli/test_push_to_talk.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/cli/test_realtime_client.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_content_blocks.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_hooks.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_input_admission.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_logging_utils.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_mocks_realtime_provider.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_permission.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_provider_contract.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_provider_stream_mapper.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_replace_fuzzy.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_runs.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_scheduled_loops.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_session_turn_locks.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_settlement.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_tool_shapers.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_usage_migration.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_utterance_buffer.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/test_workspace_symlinks.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/workspace/test_factory.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/workspace/test_local_storage.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/core/workspace/test_protocol_contract.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/evals/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/evals/eval_hook.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/evals/scenarios/context_curation.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/evals/scenarios/tool_read.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/realtime/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/realtime/test_deps.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/realtime/test_guardrails.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/realtime/test_metrics.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/realtime/test_session.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/realtime/test_wire.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/sse/test_attachments.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/test_otel_fastapi.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/gateway/test_realtime_main.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/integration/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/integration/test_prompt_caching_integration.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/observability/conftest.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/observability/test_instrumentation.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/observability/test_loop_hook_spans.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/observability/test_propagation.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/observability/test_span_contract.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/observability/test_spans.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/observability/test_truncate.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/observability/test_turn_complete_trace.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/providers/test_anthropic_history.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/providers/test_gemini_live.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/providers/test_huggingface.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/providers/test_nvidia.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/providers/test_sampling.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/providers/test_source_grep_gates.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/providers/test_vertex_claude_history.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/scheduler/test_engine.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/scheduler/test_interval.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/skills/__init__.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/skills/test_generate_image_script.py +0 -0
- {monkeybot-2.2.0 → monkeybot-3.0.0}/tests/web_search/__init__.py +0 -0
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
name: Live eval smoke
|
|
2
|
+
|
|
3
|
+
# Runs the live eval smoke suite (see docs/live-evals.md) and posts a Markdown
|
|
4
|
+
# scorecard. LLM-judge calls cost money and take minutes, so this does not run on
|
|
5
|
+
# ordinary feature-branch -> develop PRs. Trigger points:
|
|
6
|
+
# (a) any PR from develop into main (release-promotion gate; --fail-on-regression)
|
|
7
|
+
# (b) any PR that touches a dependency lockfile (catches silent SDK breakage,
|
|
8
|
+
# e.g. provider request/response shape changes, that code review won't see)
|
|
9
|
+
# (c) every push to main (scores the new release; report-only, never fails the build)
|
|
10
|
+
# (d) manual: Actions tab -> Live eval smoke -> Run workflow
|
|
11
|
+
# The scorecard always lands on the workflow run's Summary page; PR events also get it
|
|
12
|
+
# as a PR comment. The run JSON is uploaded as an artifact — download two of them and
|
|
13
|
+
# compare with `uv run python -m evals.diff <old.json> <new.json>`.
|
|
14
|
+
#
|
|
15
|
+
# Cost/time budget: smoke suite is ~11 scenarios x 2-5 turns x (agent call + judge call),
|
|
16
|
+
# paced by EVAL_SCENARIO_DELAY_SEC=150 between scenarios to stay under the current
|
|
17
|
+
# model's provider rate limit. Expect roughly $0.75-3.00 and ~30-45 minutes per run
|
|
18
|
+
# (10 delays x 150s = 25 min of pacing alone, plus actual call time) — this is not
|
|
19
|
+
# stuck if it runs long; see timeout-minutes below.
|
|
20
|
+
#
|
|
21
|
+
# Secrets required: NVIDIA_API_KEY only (https://build.nvidia.com — free tier). The agent
|
|
22
|
+
# and the judge both run on NVIDIA-hosted models through the same key, pinned to two
|
|
23
|
+
# *different* models below so the judge isn't grading its own output and scoring doesn't
|
|
24
|
+
# silently drift.
|
|
25
|
+
|
|
26
|
+
on:
|
|
27
|
+
pull_request:
|
|
28
|
+
push:
|
|
29
|
+
branches: [main]
|
|
30
|
+
workflow_dispatch:
|
|
31
|
+
|
|
32
|
+
permissions:
|
|
33
|
+
contents: read
|
|
34
|
+
pull-requests: write
|
|
35
|
+
|
|
36
|
+
jobs:
|
|
37
|
+
gate:
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
outputs:
|
|
40
|
+
run: ${{ steps.decide.outputs.run }}
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@v4
|
|
43
|
+
with:
|
|
44
|
+
fetch-depth: 0
|
|
45
|
+
|
|
46
|
+
- id: decide
|
|
47
|
+
env:
|
|
48
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
49
|
+
BASE_REF: ${{ github.base_ref }}
|
|
50
|
+
HEAD_REF: ${{ github.head_ref }}
|
|
51
|
+
BASE_SHA: ${{ github.event.pull_request.base.sha }}
|
|
52
|
+
HEAD_SHA: ${{ github.event.pull_request.head.sha }}
|
|
53
|
+
run: |
|
|
54
|
+
run=false
|
|
55
|
+
# Push to main and manual dispatch always run; PRs are gated below.
|
|
56
|
+
if [[ "$EVENT_NAME" != "pull_request" ]]; then
|
|
57
|
+
run=true
|
|
58
|
+
else
|
|
59
|
+
if [[ "$BASE_REF" == "main" && "$HEAD_REF" == "develop" ]]; then
|
|
60
|
+
run=true
|
|
61
|
+
fi
|
|
62
|
+
changed="$(git diff --name-only "$BASE_SHA" "$HEAD_SHA")"
|
|
63
|
+
for f in uv.lock cli/uv.lock evals/smoke_agent/uv.lock; do
|
|
64
|
+
if grep -qxF "$f" <<<"$changed"; then
|
|
65
|
+
run=true
|
|
66
|
+
fi
|
|
67
|
+
done
|
|
68
|
+
fi
|
|
69
|
+
echo "run=$run" >> "$GITHUB_OUTPUT"
|
|
70
|
+
|
|
71
|
+
secrets:
|
|
72
|
+
needs: gate
|
|
73
|
+
if: needs.gate.outputs.run == 'true'
|
|
74
|
+
runs-on: ubuntu-latest
|
|
75
|
+
outputs:
|
|
76
|
+
available: ${{ steps.check.outputs.available }}
|
|
77
|
+
steps:
|
|
78
|
+
- name: Require live-eval secrets
|
|
79
|
+
id: check
|
|
80
|
+
env:
|
|
81
|
+
NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }}
|
|
82
|
+
run: |
|
|
83
|
+
if [[ -z "$NVIDIA_API_KEY" ]]; then
|
|
84
|
+
echo "::warning::NVIDIA_API_KEY is not configured; skipping live-eval smoke (https://build.nvidia.com)"
|
|
85
|
+
echo "available=false" >> "$GITHUB_OUTPUT"
|
|
86
|
+
exit 0
|
|
87
|
+
fi
|
|
88
|
+
echo "available=true" >> "$GITHUB_OUTPUT"
|
|
89
|
+
|
|
90
|
+
live-eval:
|
|
91
|
+
needs: [gate, secrets]
|
|
92
|
+
if: needs.gate.outputs.run == 'true' && needs.secrets.outputs.available == 'true'
|
|
93
|
+
runs-on: ubuntu-latest
|
|
94
|
+
timeout-minutes: 60 # 11 scenarios x ~150s inter-scenario delay (see EVAL_SCENARIO_DELAY_SEC) + run time,
|
|
95
|
+
# plus headroom for checkout/uv sync/gateway boot and slow judge or subagent turns
|
|
96
|
+
steps:
|
|
97
|
+
- uses: actions/checkout@v4
|
|
98
|
+
|
|
99
|
+
- uses: astral-sh/setup-uv@v5
|
|
100
|
+
with:
|
|
101
|
+
version: "latest"
|
|
102
|
+
|
|
103
|
+
- name: Sync root deps (evals/report.py needs deepeval, langfuse)
|
|
104
|
+
run: uv sync --extra evals
|
|
105
|
+
|
|
106
|
+
- name: Sync smoke_agent deps
|
|
107
|
+
working-directory: evals/smoke_agent
|
|
108
|
+
run: uv sync
|
|
109
|
+
|
|
110
|
+
- name: Boot monkeybot gateway (evals/smoke_agent workspace)
|
|
111
|
+
working-directory: evals/smoke_agent
|
|
112
|
+
env:
|
|
113
|
+
NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }}
|
|
114
|
+
# Pin agent model for CI; env beats monkeybot.yaml.
|
|
115
|
+
MODEL_PROVIDER: nvidia
|
|
116
|
+
MODEL_NAME: thinkingmachines/inkling
|
|
117
|
+
# smoke_agent monkeybot.yaml sets runtime.port: 8080; the health check and
|
|
118
|
+
# AGENT_URL below expect 8787, so pin PORT explicitly (env beats yaml).
|
|
119
|
+
PORT: "8787"
|
|
120
|
+
SANDBOX_ENABLED: "false" # no Docker socket in this runner
|
|
121
|
+
# No MODEL_CONTEXT_WINDOW override: that was only needed for
|
|
122
|
+
# context/summarization_trigger.yaml (see evals/suites/smoke.yaml), which is
|
|
123
|
+
# currently excluded from smoke pending a retune against thinkingmachines/inkling.
|
|
124
|
+
# Re-add MODEL_CONTEXT_WINDOW: "8000" here alongside it if it comes back.
|
|
125
|
+
run: |
|
|
126
|
+
uv run -m monkeybot.gateway.main > /tmp/gateway.log 2>&1 &
|
|
127
|
+
echo $! > /tmp/gateway.pid
|
|
128
|
+
for i in $(seq 1 30); do
|
|
129
|
+
if curl -sf http://127.0.0.1:8787/health > /dev/null; then
|
|
130
|
+
echo "gateway healthy"
|
|
131
|
+
exit 0
|
|
132
|
+
fi
|
|
133
|
+
sleep 2
|
|
134
|
+
done
|
|
135
|
+
echo "gateway did not become healthy" >&2
|
|
136
|
+
cat /tmp/gateway.log >&2
|
|
137
|
+
exit 1
|
|
138
|
+
|
|
139
|
+
- name: Run smoke suite report
|
|
140
|
+
env:
|
|
141
|
+
AGENT_URL: http://127.0.0.1:8787
|
|
142
|
+
# Judge on a different NVIDIA-hosted model than the agent (same key).
|
|
143
|
+
JUDGE_PROVIDER: nvidia
|
|
144
|
+
JUDGE_MODEL: nvidia/nemotron-3-ultra-550b-a55b
|
|
145
|
+
NVIDIA_API_KEY: ${{ secrets.NVIDIA_API_KEY }}
|
|
146
|
+
# Scorecard metadata: report the model the gateway actually ran.
|
|
147
|
+
MODEL_PROVIDER: nvidia
|
|
148
|
+
MODEL_NAME: thinkingmachines/inkling
|
|
149
|
+
EVENT_NAME: ${{ github.event_name }}
|
|
150
|
+
# thinkingmachines/inkling gets rate-limited by NVIDIA even at low concurrency;
|
|
151
|
+
# each scenario itself makes several requests in quick succession, so space
|
|
152
|
+
# scenarios out rather than trying to throttle within one.
|
|
153
|
+
EVAL_SCENARIO_DELAY_SEC: "150"
|
|
154
|
+
run: |
|
|
155
|
+
# PRs are a gate and must block on regressions; main pushes and manual runs
|
|
156
|
+
# just score the build and always report. --fail-on-regression always blocks on
|
|
157
|
+
# this run's own scenario errors/failures. It does NOT require evals/baselines/
|
|
158
|
+
# smoke.json to exist (that's the separate --require-baseline flag, intentionally
|
|
159
|
+
# omitted below) — no trusted baseline has been committed yet. Once one has
|
|
160
|
+
# (`uv run python -m evals.report --suite smoke --update-baseline`, committed),
|
|
161
|
+
# add --require-baseline here too so a missing/deleted file can't silently skip
|
|
162
|
+
# the token/cost/latency drift checks.
|
|
163
|
+
flags=""
|
|
164
|
+
if [[ "$EVENT_NAME" == "pull_request" ]]; then
|
|
165
|
+
flags="--fail-on-regression"
|
|
166
|
+
fi
|
|
167
|
+
uv run python -m evals.report \
|
|
168
|
+
--suite smoke \
|
|
169
|
+
--baseline evals/baselines/smoke.json \
|
|
170
|
+
$flags \
|
|
171
|
+
| tee eval-report.md
|
|
172
|
+
|
|
173
|
+
- name: Publish report to run summary
|
|
174
|
+
if: always()
|
|
175
|
+
run: |
|
|
176
|
+
if [[ -f eval-report.md ]]; then
|
|
177
|
+
cat eval-report.md >> "$GITHUB_STEP_SUMMARY"
|
|
178
|
+
else
|
|
179
|
+
echo '`FAIL` — no report produced; see the job logs.' >> "$GITHUB_STEP_SUMMARY"
|
|
180
|
+
fi
|
|
181
|
+
|
|
182
|
+
- name: Post report as PR comment
|
|
183
|
+
if: always() && github.event_name == 'pull_request'
|
|
184
|
+
uses: actions/github-script@v7
|
|
185
|
+
with:
|
|
186
|
+
script: |
|
|
187
|
+
const fs = require("fs");
|
|
188
|
+
const body = fs.existsSync("eval-report.md")
|
|
189
|
+
? fs.readFileSync("eval-report.md", "utf8")
|
|
190
|
+
: "## monkeybot Eval Scorecard\n\n`FAIL` — the report step did not complete " +
|
|
191
|
+
"(gateway boot or the report command itself errored before writing a report). " +
|
|
192
|
+
"See the workflow run logs for details.";
|
|
193
|
+
await github.rest.issues.createComment({
|
|
194
|
+
issue_number: context.issue.number,
|
|
195
|
+
owner: context.repo.owner,
|
|
196
|
+
repo: context.repo.repo,
|
|
197
|
+
body,
|
|
198
|
+
});
|
|
199
|
+
|
|
200
|
+
- name: Upload run + report artifacts
|
|
201
|
+
if: always()
|
|
202
|
+
uses: actions/upload-artifact@v4
|
|
203
|
+
with:
|
|
204
|
+
name: live-eval-smoke-${{ github.run_id }}
|
|
205
|
+
path: |
|
|
206
|
+
evals/runs/
|
|
207
|
+
eval-report.md
|
|
208
|
+
if-no-files-found: ignore
|
|
209
|
+
|
|
210
|
+
- name: Stop gateway
|
|
211
|
+
if: always()
|
|
212
|
+
working-directory: evals/smoke_agent
|
|
213
|
+
run: kill "$(cat /tmp/gateway.pid)" 2>/dev/null || true
|
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
name: Publish release
|
|
2
|
+
|
|
3
|
+
# Fires whenever main moves - i.e. right after an admin merges a release PR.
|
|
4
|
+
# Branch protection on main (require PR + restrict merges to admins) is the
|
|
5
|
+
# actual access control; this tags + GitHub-Releases + Trusted-Publishes to PyPI.
|
|
6
|
+
#
|
|
7
|
+
# Also supports workflow_dispatch republish for already-tagged packages (e.g.
|
|
8
|
+
# after fixing a Trusted Publisher or sandbox image failure).
|
|
9
|
+
#
|
|
10
|
+
# PyPI Pending Trusted Publishers (one per project — environments must differ):
|
|
11
|
+
# monkeybot: Owner human-plus-machine / Repo monkeybot /
|
|
12
|
+
# Workflow publish-release.yml / Environment pypi
|
|
13
|
+
# monkeybot-cli: Owner human-plus-machine / Repo monkeybot /
|
|
14
|
+
# Workflow publish-release.yml / Environment pypi-cli
|
|
15
|
+
# monkeybot-browser-mcp: Owner human-plus-machine / Repo monkeybot /
|
|
16
|
+
# Workflow publish-release.yml / Environment pypi-browser
|
|
17
|
+
#
|
|
18
|
+
# GitHub: create Environments named exactly `pypi`, `pypi-cli`, and `pypi-browser`.
|
|
19
|
+
on:
|
|
20
|
+
push:
|
|
21
|
+
branches: [main]
|
|
22
|
+
paths:
|
|
23
|
+
- "pyproject.toml"
|
|
24
|
+
- "cli/pyproject.toml"
|
|
25
|
+
- "integrations/browser-mcp/pyproject.toml"
|
|
26
|
+
- "docker/sandbox.Dockerfile"
|
|
27
|
+
- "CHANGELOG.md"
|
|
28
|
+
workflow_dispatch:
|
|
29
|
+
inputs:
|
|
30
|
+
packages:
|
|
31
|
+
description: "Comma-separated packages to (re)publish even if already tagged (core,browser,cli)"
|
|
32
|
+
required: true
|
|
33
|
+
type: string
|
|
34
|
+
default: "browser,cli"
|
|
35
|
+
|
|
36
|
+
permissions:
|
|
37
|
+
contents: write
|
|
38
|
+
|
|
39
|
+
jobs:
|
|
40
|
+
publish:
|
|
41
|
+
runs-on: ubuntu-latest
|
|
42
|
+
outputs:
|
|
43
|
+
packages: ${{ steps.release.outputs.packages }}
|
|
44
|
+
steps:
|
|
45
|
+
- uses: actions/checkout@v4
|
|
46
|
+
with:
|
|
47
|
+
fetch-depth: 0
|
|
48
|
+
|
|
49
|
+
- name: Configure git identity
|
|
50
|
+
run: |
|
|
51
|
+
git config user.name "github-actions[bot]"
|
|
52
|
+
git config user.email "github-actions[bot]@users.noreply.github.com"
|
|
53
|
+
|
|
54
|
+
- id: release
|
|
55
|
+
run: python3 scripts/release.py publish
|
|
56
|
+
env:
|
|
57
|
+
GH_TOKEN: ${{ github.token }}
|
|
58
|
+
FORCE_PACKAGES: ${{ github.event.inputs.packages || '' }}
|
|
59
|
+
|
|
60
|
+
# Core before CLI (separate jobs / environments — required for two pending publishers).
|
|
61
|
+
pypi-core:
|
|
62
|
+
needs: publish
|
|
63
|
+
if: contains(format(',{0},', needs.publish.outputs.packages), ',core,')
|
|
64
|
+
runs-on: ubuntu-latest
|
|
65
|
+
environment:
|
|
66
|
+
name: pypi
|
|
67
|
+
url: https://pypi.org/p/monkeybot
|
|
68
|
+
permissions:
|
|
69
|
+
id-token: write
|
|
70
|
+
contents: read
|
|
71
|
+
steps:
|
|
72
|
+
- uses: actions/checkout@v4
|
|
73
|
+
- uses: astral-sh/setup-uv@v5
|
|
74
|
+
- uses: actions/setup-python@v5
|
|
75
|
+
with:
|
|
76
|
+
python-version: "3.12"
|
|
77
|
+
- name: Build core
|
|
78
|
+
run: uv build --out-dir dist/core .
|
|
79
|
+
- name: Publish core to PyPI
|
|
80
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
81
|
+
with:
|
|
82
|
+
packages-dir: dist/core
|
|
83
|
+
skip-existing: true
|
|
84
|
+
|
|
85
|
+
pypi-browser:
|
|
86
|
+
needs: publish
|
|
87
|
+
if: contains(format(',{0},', needs.publish.outputs.packages), ',browser,')
|
|
88
|
+
runs-on: ubuntu-latest
|
|
89
|
+
environment:
|
|
90
|
+
name: pypi-browser
|
|
91
|
+
url: https://pypi.org/p/monkeybot-browser-mcp
|
|
92
|
+
permissions:
|
|
93
|
+
id-token: write
|
|
94
|
+
contents: read
|
|
95
|
+
steps:
|
|
96
|
+
- uses: actions/checkout@v4
|
|
97
|
+
- uses: astral-sh/setup-uv@v5
|
|
98
|
+
- uses: actions/setup-python@v5
|
|
99
|
+
with:
|
|
100
|
+
python-version: "3.12"
|
|
101
|
+
- name: Build browser MCP
|
|
102
|
+
run: uv build --out-dir dist/browser integrations/browser-mcp
|
|
103
|
+
- name: Publish browser MCP to PyPI
|
|
104
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
105
|
+
with:
|
|
106
|
+
packages-dir: dist/browser
|
|
107
|
+
skip-existing: true
|
|
108
|
+
|
|
109
|
+
pypi-cli:
|
|
110
|
+
needs: [publish, pypi-core, pypi-browser]
|
|
111
|
+
# Run when cli is in the release set. Core/browser may be skipped on a
|
|
112
|
+
# cli-only republish; treat skipped as success. A failed browser publish
|
|
113
|
+
# still blocks cli because monkeybot-cli depends on monkeybot-browser-mcp.
|
|
114
|
+
if: |
|
|
115
|
+
always() &&
|
|
116
|
+
needs.publish.result == 'success' &&
|
|
117
|
+
contains(format(',{0},', needs.publish.outputs.packages), ',cli,') &&
|
|
118
|
+
(needs.pypi-core.result == 'success' || needs.pypi-core.result == 'skipped') &&
|
|
119
|
+
(needs.pypi-browser.result == 'success' || needs.pypi-browser.result == 'skipped')
|
|
120
|
+
runs-on: ubuntu-latest
|
|
121
|
+
environment:
|
|
122
|
+
name: pypi-cli
|
|
123
|
+
url: https://pypi.org/p/monkeybot-cli
|
|
124
|
+
permissions:
|
|
125
|
+
id-token: write
|
|
126
|
+
contents: read
|
|
127
|
+
steps:
|
|
128
|
+
- uses: actions/checkout@v4
|
|
129
|
+
- uses: astral-sh/setup-uv@v5
|
|
130
|
+
- uses: actions/setup-python@v5
|
|
131
|
+
with:
|
|
132
|
+
python-version: "3.12"
|
|
133
|
+
- name: Build cli
|
|
134
|
+
run: uv build --out-dir dist/cli cli
|
|
135
|
+
- name: Publish cli to PyPI
|
|
136
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
137
|
+
with:
|
|
138
|
+
packages-dir: dist/cli
|
|
139
|
+
skip-existing: true
|
|
140
|
+
|
|
141
|
+
sandbox-image:
|
|
142
|
+
needs: publish
|
|
143
|
+
if: contains(format(',{0},', needs.publish.outputs.packages), ',core,')
|
|
144
|
+
runs-on: ubuntu-latest
|
|
145
|
+
permissions:
|
|
146
|
+
contents: read
|
|
147
|
+
packages: write
|
|
148
|
+
steps:
|
|
149
|
+
- uses: actions/checkout@v4
|
|
150
|
+
- uses: docker/login-action@v3
|
|
151
|
+
with:
|
|
152
|
+
registry: ghcr.io
|
|
153
|
+
username: ${{ github.actor }}
|
|
154
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
155
|
+
- id: version
|
|
156
|
+
run: |
|
|
157
|
+
python - <<'PY' >> "$GITHUB_OUTPUT"
|
|
158
|
+
import re
|
|
159
|
+
from pathlib import Path
|
|
160
|
+
|
|
161
|
+
text = Path("pyproject.toml").read_text(encoding="utf-8")
|
|
162
|
+
match = re.search(r'^version = "([^"]+)"', text, re.M)
|
|
163
|
+
if match is None:
|
|
164
|
+
raise SystemExit("no version field in pyproject.toml")
|
|
165
|
+
print(f"value={match.group(1)}")
|
|
166
|
+
PY
|
|
167
|
+
- uses: docker/build-push-action@v6
|
|
168
|
+
with:
|
|
169
|
+
context: .
|
|
170
|
+
file: docker/sandbox.Dockerfile
|
|
171
|
+
push: true
|
|
172
|
+
tags: ghcr.io/human-plus-machine/monkeybot-sandbox:${{ steps.version.outputs.value }}
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Internal (not shipped in OSS)
|
|
2
|
+
internal/
|
|
3
|
+
|
|
4
|
+
# Environment
|
|
5
|
+
.env
|
|
6
|
+
.env.*
|
|
7
|
+
!.env.example
|
|
8
|
+
|
|
9
|
+
# Local scaffolded harness config (defaults ship in monkeybot-cli scaffold_defaults/)
|
|
10
|
+
/monkeybot_config/
|
|
11
|
+
|
|
12
|
+
# Live eval run artifacts (only evals/baselines/ is versioned)
|
|
13
|
+
/evals/runs/
|
|
14
|
+
|
|
15
|
+
# Python
|
|
16
|
+
__pycache__/
|
|
17
|
+
*.py[cod]
|
|
18
|
+
*.pyo
|
|
19
|
+
*.pyd
|
|
20
|
+
.Python
|
|
21
|
+
*.egg-info/
|
|
22
|
+
dist/
|
|
23
|
+
build/
|
|
24
|
+
.eggs/
|
|
25
|
+
*.egg
|
|
26
|
+
|
|
27
|
+
# uv
|
|
28
|
+
.venv/
|
|
29
|
+
.uv/
|
|
30
|
+
|
|
31
|
+
# Data (SQLite DB + memory files — never commit)
|
|
32
|
+
data/
|
|
33
|
+
/memory/
|
|
34
|
+
.monkeybot/
|
|
35
|
+
*.sqlite3
|
|
36
|
+
workspace/.monkeybot/
|
|
37
|
+
*.sqlite
|
|
38
|
+
*.sqlite.writer-pid
|
|
39
|
+
|
|
40
|
+
# Testing & coverage
|
|
41
|
+
.pytest_cache/
|
|
42
|
+
.coverage
|
|
43
|
+
htmlcov/
|
|
44
|
+
.mypy_cache/
|
|
45
|
+
.ruff_cache/
|
|
46
|
+
.deepeval/
|
|
47
|
+
|
|
48
|
+
# macOS
|
|
49
|
+
.DS_Store
|
|
50
|
+
|
|
51
|
+
# IDEs
|
|
52
|
+
.idea/
|
|
53
|
+
.vscode/
|
|
54
|
+
*.swp
|
|
55
|
+
*.swo
|
|
56
|
+
|
|
57
|
+
# Docker
|
|
58
|
+
docker/data/
|
|
59
|
+
|
|
60
|
+
# Planning Documents
|
|
61
|
+
.prt/
|
|
62
|
+
.monkeymode/
|
|
63
|
+
|
|
64
|
+
# Reference clones (read-only)
|
|
65
|
+
code/
|
|
66
|
+
|
|
67
|
+
# Local venv for evals dependency experiments
|
|
68
|
+
.evals-venv/
|
|
69
|
+
|
|
70
|
+
# monkeythink
|
|
71
|
+
.monkeythink/
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# monkeybot Backlog
|
|
2
|
+
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
## Up Next — Major Priorities
|
|
6
|
+
|
|
7
|
+
### 1. Chat Integration
|
|
8
|
+
- **Google Chat gateway** — incoming webhook + event handler for Google Chat spaces.
|
|
9
|
+
- **Slack gateway** — Slack Events API / socket mode integration.
|
|
10
|
+
|
|
11
|
+
### 2. Sandbox Workspace Protection
|
|
12
|
+
- Add a hard-coded deny layer inside `SandboxExecutor` that blocks `run_command` from targeting harness-owned paths: `.monkeybot/`, `monkeybot.yaml`, `*.env`, `.agents/`, `config/`.
|
|
13
|
+
- Path-level policy at the executor — distinct from `command_allowlist.yaml` which is command-level. Agent should retain free rw access to `./code/`, `./data/`, etc.
|
|
14
|
+
|
|
15
|
+
### 3. CLI-managed optional service dependencies
|
|
16
|
+
- `monkeybot chat` / `run` only spawn the gateway process; they don't start the Docker-backed optional services some `monkeybot.yaml` configs require: OpenSandbox (`sandbox.enabled`), Firestore emulator (`paths.db_url: firestore://...`), or the observability stack (Phoenix/Langfuse/OTel collector). Those used to be orchestrated by a demo `run.sh`; the CLI alone still can't fully run an agent that uses those features.
|
|
17
|
+
- Decide and implement: should the CLI (`doctor`, `run`, `chat`) detect these from config and actually start/stop the containers, or just validate/warn with remediation hints while the user manages Docker manually?
|
|
18
|
+
- Open sub-questions if going the "CLI starts services" route: where do per-project Docker assets live (`opensandbox.docker.toml`, OTel collector yaml, compose files) — agent-project-owned files referenced from `monkeybot.yaml`, or CLI-shipped generic templates; and is the sandbox worker image (project-specific extra deps) something the CLI should build, or stay manual/documented.
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## Do Later
|
|
23
|
+
|
|
24
|
+
### Connectors
|
|
25
|
+
- **CLI gateway** — interactive stdin/stdout beyond the existing `monkeybot chat` / `talk` clients.
|
|
26
|
+
- **Webhook gateway** — generic HTTP + HMAC ingress for third-party chat products.
|
|
27
|
+
- **Expanded `python -m monkeybot` surface** — additional operator subcommands (`usage` / `schedule`, etc.) as needed.
|
|
28
|
+
|
|
29
|
+
### Cloud Deployments
|
|
30
|
+
- **GCP server** — GCE / GKE deployment option (docs + examples exist; no IaC).
|
|
31
|
+
- **AWS serverless** — Lambda + API Gateway (example handler exists; not a full deploy path).
|
|
32
|
+
- **AWS server** — EC2 / ECS deployment option.
|
|
33
|
+
- **Docker CI image matrix** — multi-extras build matrix in CI.
|
|
34
|
+
|
|
35
|
+
### Infra
|
|
36
|
+
- **Postgres as production default** — backend exists; gateway still defaults to SQLite; decide when/if this becomes the default.
|
|
37
|
+
- **Firestore usage aggregation doesn't scale** — `FirestoreUsageStore.summary()`/`breakdown()` (agent-wide, no `thread_id`) stream the entire `turn_usage` collection into memory and aggregate in Python. Fine at small scale; revisit with a Firestore aggregation query or a scheduled rollup doc if `/usage` traffic or data volume grows.
|
|
38
|
+
- **Knowledge ANN index (sqlite-vec)** — deliberately deferred. The numpy matrix cache in `sqlite_vector.py` holds through ~50–100k chunks and query cost is embed-API bound, not local ANN. Revisit only if measured ANN p95 exceeds ~20–50 ms or the resident matrix causes RAM pressure; the true scale escape hatch is `store.type: pgvector`, not `sqlite-vec` packaging.
|
|
39
|
+
|
|
40
|
+
### MCP
|
|
41
|
+
- **MCP distro linkage** — confirm scaffolded `monkeybot.yaml` paths (`paths.mcp_config`, `paths.skills_path`) match deployment; smoke-test against real MCP servers beyond the bundled examples.
|
|
42
|
+
|
|
43
|
+
### Tooling *(intentionally dropped — not completed)*
|
|
44
|
+
|
|
45
|
+
Product decision to stop tracking these as active backlog items (not claiming they shipped):
|
|
46
|
+
|
|
47
|
+
- **File-op tool audit** — Keep `write_file`; no plan to replace it with `create_file` + `find_and_replace` only.
|
|
48
|
+
- **Custom subagents** — Named profiles with per-persona skills / MCP selections remain out of scope for now; workers continue to load the global skills path and `MCP_CONFIG`.
|
|
49
|
+
|
|
50
|
+
### Future platforms *(not scheduled)*
|
|
51
|
+
|
|
52
|
+
Moved from README — longer-term / speculative integrations without active implementation:
|
|
53
|
+
|
|
54
|
+
- **Azure OpenAI** — Azure-hosted OpenAI models
|
|
55
|
+
- **Azure Blob Storage** — memory backend (`[azure]` extra; docs note as planned)
|
|
56
|
+
- **Azure Key Vault** — secrets for Azure deployments
|
|
57
|
+
- **AWS Secrets Manager** — secret resolver at runtime
|
|
58
|
+
- **GCP Secret Manager** — finish `secrets.provider: gcp_secret_manager` wiring (schema exists; resolver not shipped)
|
|
59
|
+
- **Microsoft Teams** — Teams bot interface
|
|
60
|
+
- **Telegram** — Telegram bot interface
|
|
61
|
+
- **DynamoDB** — checkpointer / job storage backend
|
|
62
|
+
- **Cosmos DB** — Azure-native persistence options
|