monkeybot 3.6.1__tar.gz → 3.8.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- monkeybot-3.8.0/.cursor/skills/mb-retro/SKILL.md +85 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/BACKLOG.md +0 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/CHANGELOG.md +48 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/PKG-INFO +1 -7
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_tool_display.py +1 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_tui.py +3 -3
- monkeybot-3.8.0/cli/src/monkeybot_cli/commands/trace.py +174 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/main.py +2 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/providers.py +0 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +3 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +8 -27
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_tui.py +12 -3
- monkeybot-3.8.0/cli/tests/test_trace_cmd.py +85 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/uv.lock +8 -91
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/browser-mcp.md +9 -4
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/features.md +2 -4
- monkeybot-3.8.0/docs/migrations/history-row-id.sql +10 -0
- monkeybot-3.8.0/docs/migrations/session-branches.sql +23 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/verifier-agent-design.md +2 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/TEST_COVERAGE.md +2 -3
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/browser/SKILL.md +1 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/pyproject.toml +1 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/app.py +42 -12
- monkeybot-3.8.0/integrations/browser-mcp/src/browser_mcp/backend.py +257 -0
- monkeybot-3.8.0/integrations/browser-mcp/src/browser_mcp/chat_context.py +375 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/chat_scope.py +27 -41
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +59 -9
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/login.py +3 -3
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/server.py +21 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +45 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +8 -7
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +3 -2
- monkeybot-3.8.0/integrations/browser-mcp/tests/conftest.py +16 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +1 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/conftest.py +5 -5
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +5 -5
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_act.py +7 -7
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_agentcore.py +37 -30
- monkeybot-3.8.0/integrations/browser-mcp/tests/test_chat_isolation.py +369 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_chat_scope.py +41 -24
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_fill_form.py +7 -7
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +18 -19
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_indexed_tools.py +7 -7
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_observe.py +7 -7
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_observe_after.py +7 -7
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_perf.py +8 -8
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playbook_flows.py +7 -7
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_server_shutdown.py +15 -15
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_tabs.py +9 -9
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_wait_tools.py +5 -5
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/uv.lock +1 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/pyproject.toml +4 -13
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/catalog.py +15 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/freeze.py +5 -10
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/resolve.py +2 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/store.py +19 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/bootstrap.py +9 -27
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/runtime_env.py +33 -11
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/snapshot.py +12 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/validation.py +2 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/__init__.py +87 -43
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_result_ingress.py +0 -5
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_shapers.py +2 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/hooks/__init__.py +2 -0
- {monkeybot-3.6.1/src/monkeybot/core/knowledge → monkeybot-3.8.0/src/monkeybot/core/hooks}/evidence_guard.py +9 -13
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/llm/provider.py +5 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/messages/tool_integrity.py +4 -3
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/messages/transform_context.py +4 -3
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/__init__.py +0 -8
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/backends.py +11 -0
- monkeybot-3.8.0/src/monkeybot/core/persistence/branches.py +265 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore.py +282 -27
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/goal_ledger.py +111 -3
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/history.py +118 -42
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/postgres.py +291 -17
- monkeybot-3.8.0/src/monkeybot/core/persistence/row_ids.py +44 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/sqlite.py +159 -38
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/sqlite_backend.py +11 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/thread_summary.py +152 -61
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/transcript.py +75 -9
- monkeybot-3.8.0/src/monkeybot/core/persistence/transcript_reader.py +955 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/prompts/harness_prompt.py +2 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/events.py +73 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/history_compaction.py +5 -4
- monkeybot-3.8.0/src/monkeybot/core/runtime/history_rewrite.py +686 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_hooks.py +2 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_usage.py +2 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/realtime_loop.py +6 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/tool_dispatch.py +17 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/turn_loop.py +225 -19
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/subagent_worker.py +52 -33
- monkeybot-3.8.0/src/monkeybot/core/tools/background_jobs.py +285 -0
- monkeybot-3.8.0/src/monkeybot/core/tools/command_executor.py +73 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/core_tool_executor.py +246 -87
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/sandbox_executor.py +407 -31
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/terminal.py +288 -36
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/tool_kind.py +2 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/ledger.py +149 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/match.py +1 -1
- monkeybot-3.8.0/src/monkeybot/core/verifier/rewrite_effects.py +38 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/tracker.py +37 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/manager.py +35 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/routes.py +31 -8
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/app.py +37 -86
- monkeybot-3.8.0/src/monkeybot/gateway/sse/history_routes.py +294 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/models.py +45 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/routes.py +75 -13
- monkeybot-3.8.0/tests/core/test_background_jobs.py +591 -0
- monkeybot-3.8.0/tests/core/test_branch_store_backends.py +185 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_config_extensions.py +18 -4
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_context.py +2 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_core_tool_executor.py +38 -81
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_doom_loop.py +20 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_empty_completion.py +13 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_events.py +30 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_evidence_guard.py +2 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_goals.py +30 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_history.py +2 -0
- monkeybot-3.8.0/tests/core/test_history_branches.py +652 -0
- monkeybot-3.8.0/tests/core/test_history_row_ids.py +409 -0
- monkeybot-3.8.0/tests/core/test_session_branches_migration.py +230 -0
- monkeybot-3.8.0/tests/core/test_subagent_transcript.py +81 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_thread_summary_wire.py +51 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_transcript.py +30 -0
- monkeybot-3.8.0/tests/core/test_transcript_reader.py +463 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_truncated_tool_batch.py +14 -1
- monkeybot-3.8.0/tests/core/test_turn_session_id.py +150 -0
- monkeybot-3.8.0/tests/core/test_verifier_rewrite_effects.py +358 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenario_runner.py +0 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/test_agent_behavior.py +0 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_routes_client_text.py +3 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_create_session_model.py +57 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_gateway_runtime.py +42 -1
- monkeybot-3.8.0/tests/gateway/sse/test_history_routes.py +359 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_routes.py +11 -1
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_transcript_wiring.py +53 -2
- {monkeybot-3.6.1 → monkeybot-3.8.0}/uv.lock +7 -89
- monkeybot-3.6.1/docs/knowledge-layer-fixes.md +0 -274
- monkeybot-3.6.1/docs/memory-graph-split-plan.md +0 -231
- monkeybot-3.6.1/docs/workspace-index-design.md +0 -996
- monkeybot-3.6.1/integrations/browser-mcp/src/browser_mcp/backend.py +0 -189
- monkeybot-3.6.1/src/monkeybot/core/knowledge/__init__.py +0 -18
- monkeybot-3.6.1/src/monkeybot/core/knowledge/captions.py +0 -202
- monkeybot-3.6.1/src/monkeybot/core/knowledge/chunking.py +0 -880
- monkeybot-3.6.1/src/monkeybot/core/knowledge/config.py +0 -274
- monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/__init__.py +0 -25
- monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/base.py +0 -248
- monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/factory.py +0 -206
- monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/gemini.py +0 -149
- monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/nvidia.py +0 -69
- monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/openai_compat.py +0 -116
- monkeybot-3.6.1/src/monkeybot/core/knowledge/embeddings/sanitize.py +0 -27
- monkeybot-3.6.1/src/monkeybot/core/knowledge/extractors.py +0 -364
- monkeybot-3.6.1/src/monkeybot/core/knowledge/fusion.py +0 -419
- monkeybot-3.6.1/src/monkeybot/core/knowledge/hook.py +0 -417
- monkeybot-3.6.1/src/monkeybot/core/knowledge/indexer.py +0 -680
- monkeybot-3.6.1/src/monkeybot/core/knowledge/links.py +0 -175
- monkeybot-3.6.1/src/monkeybot/core/knowledge/salience.py +0 -207
- monkeybot-3.6.1/src/monkeybot/core/knowledge/sqlite_index.py +0 -767
- monkeybot-3.6.1/src/monkeybot/core/knowledge/subsystem.py +0 -298
- monkeybot-3.6.1/src/monkeybot/core/knowledge/tool.py +0 -29
- monkeybot-3.6.1/src/monkeybot/core/knowledge/types.py +0 -127
- monkeybot-3.6.1/src/monkeybot/core/persistence/sqlite_vector.py +0 -481
- monkeybot-3.6.1/tests/core/test_knowledge_chunking.py +0 -283
- monkeybot-3.6.1/tests/core/test_knowledge_chunking_rank.py +0 -86
- monkeybot-3.6.1/tests/core/test_knowledge_config.py +0 -189
- monkeybot-3.6.1/tests/core/test_knowledge_embeddings.py +0 -332
- monkeybot-3.6.1/tests/core/test_knowledge_fts.py +0 -218
- monkeybot-3.6.1/tests/core/test_knowledge_fusion.py +0 -475
- monkeybot-3.6.1/tests/core/test_knowledge_fusion_ann.py +0 -166
- monkeybot-3.6.1/tests/core/test_knowledge_hook.py +0 -71
- monkeybot-3.6.1/tests/core/test_knowledge_indexer.py +0 -955
- monkeybot-3.6.1/tests/core/test_knowledge_links.py +0 -106
- monkeybot-3.6.1/tests/core/test_knowledge_media.py +0 -375
- monkeybot-3.6.1/tests/core/test_knowledge_salience.py +0 -211
- monkeybot-3.6.1/tests/core/test_knowledge_single_writer.py +0 -291
- monkeybot-3.6.1/tests/core/test_knowledge_subsystem.py +0 -102
- monkeybot-3.6.1/tests/core/test_knowledge_vectors.py +0 -283
- monkeybot-3.6.1/tests/evals/scenarios/tool_search_knowledge.yaml +0 -17
- monkeybot-3.6.1/tests/evals/test_memory_knowledge_routing.py +0 -70
- {monkeybot-3.6.1 → monkeybot-3.8.0}/.dockerignore +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/.github/workflows/ci.yml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/.github/workflows/live-eval-smoke.yml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/.github/workflows/prepare-release.yml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/.github/workflows/publish-release.yml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/.gitignore +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/.pre-commit-config.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/CONTRIBUTING.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/LICENSE +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/README.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/pyproject.toml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/skills/monkeybot/SKILL.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_session.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/compat.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/output.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/goal/SKILL.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_continue.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_e2e.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_errors.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_file_index.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_grounding.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_local_shell.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_renderer_parity.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_session.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_status_bar.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_theme.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_chat_tool_display.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_cli.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_config_resolve.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_doctor.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_extras_catalog.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_gateway_health.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_realtime_session_controller.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_run_cmd.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_runtime_python.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_scaffold.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/cli/tests/test_terminal_markdown.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/Dockerfile +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/demo-model.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/demo.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/docker-compose.sandbox.yml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/opensandbox.docker.toml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docker/sandbox.Dockerfile +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docker-compose.yml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/agent-layout.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/assets/logo.png +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/browser-mcp-perf-baseline.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/browser-mcp-performance-plan.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/cloud-deployment-design.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-aws-agentcore.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-pattern-a-container.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-pattern-b-serverless.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/deploy-pattern-d-realtime.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/getting-started.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/live-evals.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/mcp.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/migrations/agent-scope-namespacing.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/migrations/memory-outbox.sql +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/observability-runbook.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/ollama-local.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/otel-collector.example.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/progressive-loop-tools.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/progressive-mcp-tools.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/skills.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/spill-dynamic-design.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/docs/sse-gateway-ui.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/assertions.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/baselines/smoke.json +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/baselines/smoke.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/diff.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/eval_config.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/models.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/persistence.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/report.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/runner.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenario_loader.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/context/summarization_trigger.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/declares_done.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/path_constraint.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/preempt.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/repeat_correction.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/drift/supersession.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/mcp/get_prompt.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/mcp/list_resources.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/mcp/tool_invoke.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/memory/recall_cross_session.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/memory/recall_single_session.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/multi_turn/task_tracking.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/skills/skill_invocation.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/subagents/dispatch_complete.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_read.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_read_error.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_run_command.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scenarios/tools/core_write.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/scorer.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/.env.example +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/.gitignore +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/pyproject.toml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/uv.lock +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/suites/drift.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/suites/smoke.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_assertions.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_diff.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_judge.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_report.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_runner_sse.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/evals/test_scorer.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/README.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/agentcore/handler.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/agentcore/runtime_app.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/agentengine/handler.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/cloud-functions/main.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/lambda/handler.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/ollama/PrefixStable.Modelfile +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/diagnostics/README.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/diagnostics/SKILL.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/diagnostics/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/diagnostics/diagnostics.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/image-generator/SKILL.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/examples/skills/image-generator/generate_image.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_tool_surface.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/pytest.ini +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/scripts/create_schema.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/scripts/precommit-pytest.sh +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/scripts/release.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/scripts/smoke_global_cli.sh +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/__main__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/audio_io.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/gateway_manager.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/main.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/push_to_talk.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/cli/realtime_client.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/approvals.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/permissions.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/safety.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/computer/tools.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/config.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/image_preview.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/text.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/attachments/tools.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/realtime_config.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/settings.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/campaign_context.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/common.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/epoch.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/secret_egress.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/slash_skills.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/goals/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/goals/service.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/layout.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/llm/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/llm/usage.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/lockfile_names.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/logging_utils.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/mcp/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/mcp/mcp_client.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/config.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/hook.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/ids.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/ingest.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/observability.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/outbox.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/palace.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/subsystem.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/uri.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/memory/writer.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/messages/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/path_safety.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/db.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/errors.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/runs.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/usage.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/prompts/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/prompts/headings.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/prompts/prompt.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/context_budget.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/doom_loop.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/input_admission.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/subprocess_groups.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/testing/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/ask_user.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/grant_store.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/inspector.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/patch.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/path_grant_inspector.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/permission.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/spill_inventory.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/types.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/tools/workspace_service.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/types/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/types/content_blocks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/types/interfaces.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/types/types_tools.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/actuator.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/binding.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/classify.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/inspector.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/intervention.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/judge.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/mailbox.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/port.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/verifier/severity.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/factory.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/gcs.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/local.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/protocol.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace/s3.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/core/workspace_layout.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/bootstrap.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/main.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/app.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/session.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime_main.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/goal_routes.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/reload.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/request_storage.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/session_bus.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/sse.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/_state.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/instrumentation.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/propagation.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/spans.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/observability/sqlite_exporter.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/_openai_compat.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/_utils.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/bedrock.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/claude.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/gemini.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/gemini_live.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/huggingface.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/model_capabilities.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/nvidia.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/ollama.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/openai.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/openrouter.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/pricing.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/request_budget.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/sampling.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/providers/vertex_claude.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scaffold/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/__main__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/engine.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/interval.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/tick_result.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/scheduler/worker.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/subagents/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/todo_list/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/todo_list/store.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/todo_list/tool.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/protocol.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/src/monkeybot/web_search/tool.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/acceptance/test_observability_acceptance.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/test_gateway_manager.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/test_main.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/test_push_to_talk.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/cli/test_realtime_client.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_approvals.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_computer_tools.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_package_init.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_path_policy.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_permissions.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_subagent_exclusion.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/computer/test_wiring.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/conftest.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/memory/helpers.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/memory/in_memory_palace.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/memory/test_mempalace.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/memory/test_review_fixes.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_agent_layout.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_ask_user.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_attachment_freeze.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_attachment_store.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_bootstrap.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_content_blocks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_context_budget.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_context_epoch.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_durable_events.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_durable_runs.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_env_map_grep_gates.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_firestore_history.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_firestore_usage.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_fs_isolation.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_gemini_history_replay.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_goal_ledger.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_goal_persistence.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_grant_store.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_harness_prompt.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_history_compaction_split.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_hooks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_image_preview.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_input_admission.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_inspector.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_layout.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_logging_utils.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_loop.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_loop_hooks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_loop_observability.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_loop_transcript.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_mcp_client.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_memory_layout_migrate.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_message_pipeline.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_mocks_realtime_provider.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_patch.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_path_grant_inspector.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_path_safety.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_permission.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_pricing.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_progress_publish.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_progress_tracker.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_prompt.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_provider_contract.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_provider_stream_mapper.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_realtime_loop.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_replace_fuzzy.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_run_command_parse.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_runs.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_runtime_config_snapshot.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_runtime_env.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_sandbox_executor.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_scheduled_loops.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_secret_egress.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_session_turn_locks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_settlement.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_slash_skills.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_spill_dynamic.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_spill_inventory.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_storage_backends.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_subagent_proto.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_subagent_trace_propagation.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_subagent_worker_paths.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_terminal.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_tool_def_schema.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_tool_integrity.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_tool_result_ingress.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_tool_shapers.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_usage.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_usage_migration.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_utterance_buffer.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_binding.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_inspector.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_judge.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_mailbox_lifecycle.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_verifier_sticky_nudge.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_worker_pool.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_workspace_extra_read_roots.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_workspace_layout.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_workspace_symlinks.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/test_workspace_write_scope.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/workspace/test_factory.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/workspace/test_local_storage.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/core/workspace/test_protocol_contract.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/eval_hook.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_read.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/tool_write.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/evals/test_verifier_port.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_app.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_deps.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_guardrails.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_manager.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_metrics.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_session.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/realtime/test_wire.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_attachments.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_config_reload.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/sse/test_session_bus.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_otel_fastapi.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_otel_lifespan.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_realtime_main.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_resolve_provider.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_sse_events.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/integration/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/integration/test_observability_integration.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/integration/test_prompt_caching_integration.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/conftest.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_init.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_instrumentation.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_loop_hook_spans.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_propagation.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_span_contract.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_spans.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_sqlite_exporter.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_truncate.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/observability/test_turn_complete_trace.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/conftest.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_anthropic_cache.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_anthropic_history.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_bedrock_converse.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_bedrock_estimate.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_gemini_history.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_gemini_live.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_gemini_usage.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_huggingface.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_model_capabilities.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_nvidia.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_ollama.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_openai_byte_budget.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_openai_compat_usage.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_openai_history.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_pricing.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_request_budget.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_sampling.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_sonnet5_sampling.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_source_grep_gates.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/providers/test_vertex_claude_history.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/scheduler/test_engine.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/scheduler/test_interval.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/skills/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/skills/test_generate_image_script.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/test_cold_start.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/test_packaging_config.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/test_release_script.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/todo_list/test_todo_list.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/web_search/__init__.py +0 -0
- {monkeybot-3.6.1 → monkeybot-3.8.0}/tests/web_search/test_web_search.py +0 -0
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: mb-retro
|
|
3
|
+
description: >-
|
|
4
|
+
Review one MonkeyBot session transcript and propose environment fixes
|
|
5
|
+
(checks, verifier criteria, AGENT.md pointers, tool access). Use ONLY when
|
|
6
|
+
the user explicitly asks for /mb-retro, a MonkeyBot retro, or to review a
|
|
7
|
+
MonkeyBot transcript for why the agent struggled. Do not run during ordinary
|
|
8
|
+
coding, and do not edit anything until the user picks a candidate.
|
|
9
|
+
disable-model-invocation: true
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# mb-retro
|
|
13
|
+
|
|
14
|
+
Look at one MonkeyBot session and propose changes to the agent's environment so the next run goes better. Propose only. Edit nothing until the user picks a candidate.
|
|
15
|
+
|
|
16
|
+
This is the MonkeyBot form of a session retro. It does not review the code the session produced. If the user wants a verdict on a diff, that is a code review, not this skill.
|
|
17
|
+
|
|
18
|
+
## Input
|
|
19
|
+
|
|
20
|
+
A session id, a session directory, or a `transcript.ndjson` path. Transcripts live under `{workspace}/.monkeybot/transcripts/` and exist only when `runtime.transcript_enabled` is true in `monkeybot.yaml`.
|
|
21
|
+
|
|
22
|
+
From the monkeybot repo:
|
|
23
|
+
|
|
24
|
+
```bash
|
|
25
|
+
uv run monkeybot trace list --cwd <agent-root>
|
|
26
|
+
uv run monkeybot trace digest <session-id-or-path> --cwd <agent-root>
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
If the user does not name a session, run `trace list` and suggest the session with the highest `score`. Say which one you are using. Do not retro every session.
|
|
30
|
+
|
|
31
|
+
## Read
|
|
32
|
+
|
|
33
|
+
1. Run `uv run monkeybot trace digest <id>`. That output is already resolved. Do not hand-expand `text_seq`, `result_seq`, `schema_seq`, `content_seq`, or `base_seq` diffs.
|
|
34
|
+
2. Open one record only when the digest line is not enough: `uv run monkeybot trace digest <id> --seq N`. Repeat `--seq` for a few records, not the whole file.
|
|
35
|
+
3. Subagent work is inlined under the `task` call that started it, from `{session}/subagents/`. Runs the digest cannot tie to a call appear under `Unlinked subagent runs`. If a line says `no child transcript`, say so and do not invent what the child did.
|
|
36
|
+
4. A `--seq` record with `text_error: diff_mismatch` was written by an older harness whose prompt diff cannot be rebuilt. Do not quote its text.
|
|
37
|
+
|
|
38
|
+
A smooth digest (score 0, short timeline, no interventions) has little to teach. Say that and stop.
|
|
39
|
+
|
|
40
|
+
## Find struggle moments
|
|
41
|
+
|
|
42
|
+
Every candidate must cite one or more `@seq` lines from this digest. Discard any candidate you cannot point at a specific moment. Do not fill categories with generic advice.
|
|
43
|
+
|
|
44
|
+
Look for:
|
|
45
|
+
|
|
46
|
+
- Tool errors, especially the same `error_kind` more than once
|
|
47
|
+
- `HarnessIntervention` (`doom_loop`, `truncated_batch`, `empty_completion`, `post_tool_empty`, `background_jobs_nudge`, `compaction_fallback`, `max_turns`, `verifier_replan`)
|
|
48
|
+
- Steers, verifier verdicts, empty assistant replies, context summaries
|
|
49
|
+
- Slow tools and repeated identical calls
|
|
50
|
+
- A long search before a fact that a pointer would have named
|
|
51
|
+
- A subagent that struggled while the parent looked fine
|
|
52
|
+
|
|
53
|
+
## Classify
|
|
54
|
+
|
|
55
|
+
Put each moment in one category. The category decides where the fix goes.
|
|
56
|
+
|
|
57
|
+
| What went wrong | Propose |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| Slow to find a fact | A navigation pointer in the agent's `AGENT.md`, a skill description, or a memory entry |
|
|
60
|
+
| A mechanical mistake | An inspector or `PRE_TOOL` hook, tighter tool-schema validation, `permissions.yaml` or a path grant, or a guard threshold |
|
|
61
|
+
| A judgement-call miss | A verifier criterion. The verifier is the reviewer. |
|
|
62
|
+
| Bloated `AGENT.md` or harness prompt (`src/monkeybot/core/prompts/harness_prompt.py`) | Move the steering into an on-demand skill, or delete the no-op lines |
|
|
63
|
+
| An expensive tool call | Trim tool output, spill it to a file, or load tools progressively |
|
|
64
|
+
| Missing information or access | An MCP server, a tool, or wider permissions |
|
|
65
|
+
| The agent behaved reasonably and the harness misbehaved | A code fix plus a regression test in `tests/`, or an eval scenario in `evals/scenarios/` |
|
|
66
|
+
|
|
67
|
+
## Rules
|
|
68
|
+
|
|
69
|
+
- A mechanical problem gets a check that can fail, never a sentence in a steering file.
|
|
70
|
+
- `AGENT.md` gets navigation pointers only. Do not add new standing rules there, and do not add them to a root `AGENTS.md` or `CLAUDE.md`.
|
|
71
|
+
- If a check already exists but is not wired up, the fix is to wire it, not to write a second one.
|
|
72
|
+
- A missing guardrail (no test or eval covers this failure) is its own finding.
|
|
73
|
+
- Rank by severity for the next session, not by how loud the log line was. A quiet expensive miss can outrank a noisy cheap one. Say that the order is a draft.
|
|
74
|
+
- Do not propose deleting lint rules, hooks, or CI jobs from other sessions. This skill sees one transcript.
|
|
75
|
+
|
|
76
|
+
## Output
|
|
77
|
+
|
|
78
|
+
Ranked candidates, most severe first. For each one:
|
|
79
|
+
|
|
80
|
+
1. **Moment** — quote the digest lines and their `@seq` numbers.
|
|
81
|
+
2. **Category** — one row from the table.
|
|
82
|
+
3. **Target** — the exact file or config key.
|
|
83
|
+
4. **Change** — the proposed check, pointer, criterion, or deletion, in a few lines. Not a patch yet.
|
|
84
|
+
|
|
85
|
+
Then stop and ask which candidates to apply. Do not edit files, install hooks, or change `monkeybot.yaml` before that.
|
|
@@ -35,7 +35,6 @@
|
|
|
35
35
|
### Infra
|
|
36
36
|
- **Postgres as production default** — backend exists; gateway still defaults to SQLite; decide when/if this becomes the default.
|
|
37
37
|
- **Firestore usage aggregation doesn't scale** — `FirestoreUsageStore.summary()`/`breakdown()` (agent-wide, no `thread_id`) stream the entire `turn_usage` collection into memory and aggregate in Python. Fine at small scale; revisit with a Firestore aggregation query or a scheduled rollup doc if `/usage` traffic or data volume grows.
|
|
38
|
-
- **Knowledge ANN index (sqlite-vec)** — deliberately deferred. The numpy matrix cache in `sqlite_vector.py` holds through ~50–100k chunks and query cost is embed-API bound, not local ANN. Revisit only if measured ANN p95 exceeds ~20–50 ms or the resident matrix causes RAM pressure; the true scale escape hatch is `store.type: pgvector`, not `sqlite-vec` packaging.
|
|
39
38
|
|
|
40
39
|
### MCP
|
|
41
40
|
- **MCP distro linkage** — confirm scaffolded `monkeybot.yaml` paths (`paths.mcp_config`, `paths.skills_path`) match deployment; smoke-test against real MCP servers beyond the bundled examples.
|
|
@@ -6,6 +6,54 @@ the project adheres to [Semantic Versioning](https://semver.org/).
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
### CLI
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `monkeybot trace list` and `monkeybot trace digest` turn a session transcript into a resolved timeline, with each subagent run shown under the `task` call that started it. In chat, `/export-trace` copies the whole session directory. The `mb-retro` skill proposes environment fixes from one hard session and does not edit anything until you pick a candidate.
|
|
14
|
+
|
|
15
|
+
## [core v3.8.0] - 2026-10-07
|
|
16
|
+
|
|
17
|
+
### Added
|
|
18
|
+
|
|
19
|
+
- Stored chat history can branch. Rows keep a stable `row_id`. `POST /sessions/{id}/branches` edits, regenerates, rewinds, or restores from an anchor; truncate shortens the active thread in place; fork copies a prefix into a new session. A summarized prefix stays read-only unless the cut keeps that summary. Queued follow-ups drain onto the branch that becomes active. Goal ledger and tracker state carry across a rewrite. Older databases rebuild `session_branches` on startup, including Postgres.
|
|
20
|
+
- Session transcripts record harness guard hits as `HarnessIntervention` (not sent on SSE) and write each subagent run under the parent session's `subagents/` directory when `runtime.transcript_enabled` is on.
|
|
21
|
+
|
|
22
|
+
### Fixed
|
|
23
|
+
|
|
24
|
+
- Transcript prompt diffs no longer drop changed lines that start with `--` or `++`, such as a removed `---` rule. Diffs already written that way are flagged as `text_error: diff_mismatch` when read instead of being rebuilt wrong.
|
|
25
|
+
- A background `run_command` in the sandbox keeps running after launch returns.
|
|
26
|
+
|
|
27
|
+
### Removed
|
|
28
|
+
|
|
29
|
+
- The workspace knowledge index and the `search` tool. Agents explore the workspace with `grep` and `glob`, then `read_file`. Memory search, web search, and browser DOM indexing are unchanged.
|
|
30
|
+
- The `knowledge-ast` and `knowledge-media` extras. Installs that still request them get an unknown-extra warning; drop them from agent deps.
|
|
31
|
+
- `numpy` is no longer a core dependency.
|
|
32
|
+
|
|
33
|
+
### Changed
|
|
34
|
+
|
|
35
|
+
- A leftover `knowledge:` section in `monkeybot.yaml` is warned once and ignored. Old index files (`index.sqlite`, `.monkeybot/knowledge/`) are no longer read and can be deleted.
|
|
36
|
+
- The `Evidence:` path guard moved to `core/hooks/evidence_guard.py` and is always registered by the gateway. Before, it ran only when `knowledge.enabled` was on.
|
|
37
|
+
|
|
38
|
+
## [core v3.7.0] - 2026-09-30
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- `run_command` can start a long command in the background and return `job_id` and `log_path` immediately. `await_command` pages its output until it exits, and `kill_command` stops it, on the local terminal and in the OpenSandbox executor. A turn cannot finish while a job is still running; leftover jobs are killed when the turn ends. The sandbox renews its lease while a job runs, up to the job time ceiling.
|
|
43
|
+
|
|
44
|
+
## [browser v0.8.1] - 2026-09-28
|
|
45
|
+
|
|
46
|
+
### Fixed
|
|
47
|
+
|
|
48
|
+
- The per-chat browser IPC router honors browser-harness 0.1.13's response timeout, so browser tools can drive the page again.
|
|
49
|
+
|
|
50
|
+
## [browser v0.8.0] - 2026-09-27
|
|
51
|
+
|
|
52
|
+
### Added
|
|
53
|
+
|
|
54
|
+
- Each Spaces chat gets its own browser daemon, tab registry, and lock, so simultaneous chats no longer restart each other or drop tab aliases. Local Chrome and AgentCore stay on one shared browser. An idle daemon stops after 15 minutes and keeps that chat's tab aliases for the next call.
|
|
55
|
+
- The per-chat tab cap is 10. When Spaces refuses a tab because the app-wide live-tab cap is full, the tool returns `tab_limit_reached` with `"scope": "app"` instead of this chat's limit.
|
|
56
|
+
|
|
9
57
|
## [core v3.6.1] - 2026-09-26
|
|
10
58
|
|
|
11
59
|
### Fixed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: monkeybot
|
|
3
|
-
Version: 3.
|
|
3
|
+
Version: 3.8.0
|
|
4
4
|
Summary: monkeybot agent harness — FastAPI SSE gateway, owned loop, SQLite, and MCP.
|
|
5
5
|
License: MIT
|
|
6
6
|
License-File: LICENSE
|
|
@@ -10,7 +10,6 @@ Requires-Dist: fastapi>=0.115.0
|
|
|
10
10
|
Requires-Dist: google-genai>=1.0.0
|
|
11
11
|
Requires-Dist: httpx>=0.27.0
|
|
12
12
|
Requires-Dist: mcp<2,>=1.27.1
|
|
13
|
-
Requires-Dist: numpy<2.5,>=1.26.0
|
|
14
13
|
Requires-Dist: pillow>=10.0.0
|
|
15
14
|
Requires-Dist: pydantic>=2.10.0
|
|
16
15
|
Requires-Dist: python-dotenv>=1.0.0
|
|
@@ -48,11 +47,6 @@ Provides-Extra: huggingface
|
|
|
48
47
|
Requires-Dist: openai>=1.0; extra == 'huggingface'
|
|
49
48
|
Requires-Dist: pypdf>=6.14.2; extra == 'huggingface'
|
|
50
49
|
Requires-Dist: tiktoken>=0.7.0; extra == 'huggingface'
|
|
51
|
-
Provides-Extra: knowledge-ast
|
|
52
|
-
Requires-Dist: tree-sitter-language-pack>=1.6; extra == 'knowledge-ast'
|
|
53
|
-
Provides-Extra: knowledge-media
|
|
54
|
-
Requires-Dist: pypdf>=6.14.2; extra == 'knowledge-media'
|
|
55
|
-
Requires-Dist: python-docx>=1.1.0; extra == 'knowledge-media'
|
|
56
50
|
Provides-Extra: memory
|
|
57
51
|
Requires-Dist: mempalace<4,>=3.7.0; extra == 'memory'
|
|
58
52
|
Provides-Extra: nvidia
|
|
@@ -41,7 +41,7 @@ _EDIT_TOOLS = frozenset(
|
|
|
41
41
|
{"write_file", "write", "edit_file", "apply_patch", "str_replace"}
|
|
42
42
|
)
|
|
43
43
|
_PATH_TOOLS = _READ_TOOLS | _EDIT_TOOLS
|
|
44
|
-
_SEARCH_TOOLS = frozenset({"grep", "
|
|
44
|
+
_SEARCH_TOOLS = frozenset({"grep", "web_search"})
|
|
45
45
|
_HINT_KEYS = frozenset(
|
|
46
46
|
{
|
|
47
47
|
"argv",
|
|
@@ -105,7 +105,7 @@ _SLASH_SPECS: tuple[tuple[str, str], ...] = (
|
|
|
105
105
|
("/timestamps", "Toggle turn timestamps"),
|
|
106
106
|
("/copy", "Copy last assistant reply"),
|
|
107
107
|
("/export", "Export transcript to a markdown file"),
|
|
108
|
-
("/export-trace", "Export
|
|
108
|
+
("/export-trace", "Export the debug trace directory (ndjson + subagents)"),
|
|
109
109
|
("/bye", "Exit chat"),
|
|
110
110
|
)
|
|
111
111
|
|
|
@@ -1686,10 +1686,10 @@ class ChatApp(App[int]):
|
|
|
1686
1686
|
)
|
|
1687
1687
|
return
|
|
1688
1688
|
ts = datetime.now().strftime("%Y%m%d_%H%M%S")
|
|
1689
|
-
dest = self.agent_root / "data" / f"trace_export_{ts}
|
|
1689
|
+
dest = self.agent_root / "data" / f"trace_export_{ts}"
|
|
1690
1690
|
try:
|
|
1691
1691
|
dest.parent.mkdir(parents=True, exist_ok=True)
|
|
1692
|
-
shutil.
|
|
1692
|
+
shutil.copytree(session_dir, dest)
|
|
1693
1693
|
except OSError as exc:
|
|
1694
1694
|
self._mount_system(f"Trace export failed: {exc}", error=True)
|
|
1695
1695
|
return
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
"""monkeybot trace — list and digest session transcripts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import argparse
|
|
6
|
+
import json
|
|
7
|
+
import sys
|
|
8
|
+
from pathlib import Path
|
|
9
|
+
|
|
10
|
+
from monkeybot.core.layout import resolve_workspace_root
|
|
11
|
+
from monkeybot.core.persistence.transcript import (
|
|
12
|
+
TRANSCRIPT_FILENAME,
|
|
13
|
+
resolve_session_artifact_dir,
|
|
14
|
+
)
|
|
15
|
+
from monkeybot.core.persistence.transcript_reader import (
|
|
16
|
+
build_digest,
|
|
17
|
+
digest_to_json,
|
|
18
|
+
iter_session_dirs,
|
|
19
|
+
records_by_seq,
|
|
20
|
+
render_digest_markdown,
|
|
21
|
+
scan_session_signals,
|
|
22
|
+
)
|
|
23
|
+
|
|
24
|
+
from monkeybot_cli.config_resolve import resolve_agent_root, resolve_config
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
def _workspace(args: argparse.Namespace) -> Path:
|
|
28
|
+
cwd = Path(args.cwd).expanduser().resolve() if args.cwd else None
|
|
29
|
+
config_path = resolve_config(args.config, cwd=cwd)
|
|
30
|
+
agent_root = resolve_agent_root(cwd=cwd, config_path=config_path)
|
|
31
|
+
return resolve_workspace_root(agent_root=agent_root, config_path=config_path)
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
def _transcripts_root(workspace: Path) -> Path:
|
|
35
|
+
return workspace / ".monkeybot" / "transcripts"
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def _resolve_target(raw: str | None, workspace: Path) -> Path | None:
|
|
39
|
+
"""Session directory from an id, a directory, or a transcript.ndjson path."""
|
|
40
|
+
if raw:
|
|
41
|
+
candidate = Path(raw).expanduser()
|
|
42
|
+
if candidate.is_file() and candidate.name == TRANSCRIPT_FILENAME:
|
|
43
|
+
return candidate.parent
|
|
44
|
+
if candidate.is_dir() and (candidate / TRANSCRIPT_FILENAME).is_file():
|
|
45
|
+
return candidate
|
|
46
|
+
session_dir = resolve_session_artifact_dir(workspace, raw)
|
|
47
|
+
if (session_dir / TRANSCRIPT_FILENAME).is_file():
|
|
48
|
+
return session_dir
|
|
49
|
+
return None
|
|
50
|
+
sessions = iter_session_dirs(_transcripts_root(workspace))
|
|
51
|
+
return sessions[0] if sessions else None
|
|
52
|
+
|
|
53
|
+
|
|
54
|
+
def _print_list(workspace: Path, *, as_json: bool) -> int:
|
|
55
|
+
sessions = iter_session_dirs(_transcripts_root(workspace))
|
|
56
|
+
rows = []
|
|
57
|
+
for session_dir in sessions:
|
|
58
|
+
signals = scan_session_signals(session_dir)
|
|
59
|
+
rows.append(
|
|
60
|
+
{
|
|
61
|
+
"dir": session_dir.name,
|
|
62
|
+
"path": str(session_dir),
|
|
63
|
+
"score": signals.score(),
|
|
64
|
+
"errors": sum(signals.tool_errors.values()),
|
|
65
|
+
"interventions": sum(signals.interventions.values()),
|
|
66
|
+
"steers": signals.steers,
|
|
67
|
+
"verdicts": signals.verdicts,
|
|
68
|
+
"empty": signals.empty_assistant,
|
|
69
|
+
"summaries": signals.summaries,
|
|
70
|
+
"slow": len(signals.slow_tools),
|
|
71
|
+
"repeated": len(signals.repeated_calls),
|
|
72
|
+
}
|
|
73
|
+
)
|
|
74
|
+
if as_json:
|
|
75
|
+
print(json.dumps(rows, indent=2))
|
|
76
|
+
return 0
|
|
77
|
+
if not rows:
|
|
78
|
+
print(f"No transcripts under {_transcripts_root(workspace)}")
|
|
79
|
+
return 0
|
|
80
|
+
for row in rows:
|
|
81
|
+
print(
|
|
82
|
+
f"{row['dir']} score={row['score']} errors={row['errors']} "
|
|
83
|
+
f"interventions={row['interventions']} steers={row['steers']} "
|
|
84
|
+
f"verdicts={row['verdicts']} empty={row['empty']} "
|
|
85
|
+
f"summaries={row['summaries']} slow={row['slow']} repeated={row['repeated']}"
|
|
86
|
+
)
|
|
87
|
+
return 0
|
|
88
|
+
|
|
89
|
+
|
|
90
|
+
def _read_failure(exc: OSError) -> int:
|
|
91
|
+
print(f"Transcript read failed: {exc}", file=sys.stderr)
|
|
92
|
+
return 1
|
|
93
|
+
|
|
94
|
+
|
|
95
|
+
def run_trace_list(args: argparse.Namespace) -> int:
|
|
96
|
+
try:
|
|
97
|
+
return _print_list(_workspace(args), as_json=bool(args.json))
|
|
98
|
+
except OSError as exc:
|
|
99
|
+
return _read_failure(exc)
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def run_trace_digest(args: argparse.Namespace) -> int:
|
|
103
|
+
workspace = _workspace(args)
|
|
104
|
+
try:
|
|
105
|
+
session_dir = _resolve_target(args.target, workspace)
|
|
106
|
+
if session_dir is None:
|
|
107
|
+
target = args.target or "(latest)"
|
|
108
|
+
print(f"No transcript found for {target}", file=sys.stderr)
|
|
109
|
+
return 1
|
|
110
|
+
seqs = args.seq or []
|
|
111
|
+
if seqs:
|
|
112
|
+
found = records_by_seq(session_dir, seqs)
|
|
113
|
+
missing = False
|
|
114
|
+
for seq in seqs:
|
|
115
|
+
record = found.get(seq)
|
|
116
|
+
if record is None:
|
|
117
|
+
print(f"No record with seq {seq} in {session_dir}", file=sys.stderr)
|
|
118
|
+
missing = True
|
|
119
|
+
continue
|
|
120
|
+
print(json.dumps(record, ensure_ascii=False, indent=2, default=str))
|
|
121
|
+
return 1 if missing else 0
|
|
122
|
+
digest = build_digest(session_dir, full=bool(args.full))
|
|
123
|
+
except OSError as exc:
|
|
124
|
+
return _read_failure(exc)
|
|
125
|
+
if args.json:
|
|
126
|
+
print(json.dumps(digest_to_json(digest), ensure_ascii=False, indent=2, default=str))
|
|
127
|
+
return 0
|
|
128
|
+
print(render_digest_markdown(digest, max_chars=args.max_chars))
|
|
129
|
+
return 0
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def register(subparsers: argparse._SubParsersAction[argparse.ArgumentParser]) -> None:
|
|
133
|
+
trace = subparsers.add_parser(
|
|
134
|
+
"trace",
|
|
135
|
+
help="List and digest session transcripts for debugging and retros",
|
|
136
|
+
)
|
|
137
|
+
sub = trace.add_subparsers(dest="trace_command", required=True)
|
|
138
|
+
common = argparse.ArgumentParser(add_help=False)
|
|
139
|
+
common.add_argument("--cwd", help="Agent project root")
|
|
140
|
+
common.add_argument("--config", help="Path to monkeybot.yaml")
|
|
141
|
+
|
|
142
|
+
listing = sub.add_parser(
|
|
143
|
+
"list",
|
|
144
|
+
parents=[common],
|
|
145
|
+
help="List captured sessions, newest first",
|
|
146
|
+
)
|
|
147
|
+
listing.add_argument("--json", action="store_true", help="JSON output")
|
|
148
|
+
listing.set_defaults(func=run_trace_list)
|
|
149
|
+
|
|
150
|
+
digest = sub.add_parser(
|
|
151
|
+
"digest",
|
|
152
|
+
parents=[common],
|
|
153
|
+
help="Condensed timeline of one session",
|
|
154
|
+
)
|
|
155
|
+
digest.add_argument(
|
|
156
|
+
"target",
|
|
157
|
+
nargs="?",
|
|
158
|
+
help="Session id, session directory, or transcript.ndjson path (default: newest)",
|
|
159
|
+
)
|
|
160
|
+
digest.add_argument("--json", action="store_true", help="JSON output")
|
|
161
|
+
digest.add_argument("--full", action="store_true", help="Do not clip excerpts")
|
|
162
|
+
digest.add_argument(
|
|
163
|
+
"--max-chars",
|
|
164
|
+
type=int,
|
|
165
|
+
default=0,
|
|
166
|
+
help="Cap markdown length (0 = no cap)",
|
|
167
|
+
)
|
|
168
|
+
digest.add_argument(
|
|
169
|
+
"--seq",
|
|
170
|
+
type=int,
|
|
171
|
+
action="append",
|
|
172
|
+
help="Print one resolved record instead of the digest (repeatable)",
|
|
173
|
+
)
|
|
174
|
+
digest.set_defaults(func=run_trace_digest)
|
|
@@ -5,7 +5,7 @@ from __future__ import annotations
|
|
|
5
5
|
import argparse
|
|
6
6
|
import sys
|
|
7
7
|
|
|
8
|
-
from monkeybot_cli.commands import chat, doctor, loop, new, refresh, run_cmd, talk, validate
|
|
8
|
+
from monkeybot_cli.commands import chat, doctor, loop, new, refresh, run_cmd, talk, trace, validate
|
|
9
9
|
from monkeybot_cli.runtime_python import RuntimeUpgradeError, report_runtime_upgrade_error
|
|
10
10
|
|
|
11
11
|
|
|
@@ -24,6 +24,7 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
24
24
|
chat.register(sub)
|
|
25
25
|
talk.register(sub)
|
|
26
26
|
loop.register(sub)
|
|
27
|
+
trace.register(sub)
|
|
27
28
|
return parser
|
|
28
29
|
|
|
29
30
|
|
{monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md
RENAMED
|
@@ -34,8 +34,9 @@ only. Pass `expected_origin` so a login cannot land on the wrong site, and check
|
|
|
34
34
|
the returned `origin` before reporting success.
|
|
35
35
|
|
|
36
36
|
Tabs use aliases (`t1`, `t2`, …). Reads (`get_elements`, `page_info`, `js`,
|
|
37
|
-
`read_tabs`) never move focus; actions do. At most
|
|
38
|
-
if you hit the cap, ask the user which to close, then `browser_close_tab`.
|
|
37
|
+
`read_tabs`) never move focus; actions do. At most 10 agent-controlled tabs —
|
|
38
|
+
if you hit the cap, ask the user which to close, then `browser_close_tab`. If the
|
|
39
|
+
error scope is `app`, the Spaces window is full across chats, not this chat's cap. Close
|
|
39
40
|
tabs you opened. `browser_login` still targets the tab the user has focused.
|
|
40
41
|
|
|
41
42
|
Finish browser sessions with `browser_stop`.
|
{monkeybot-3.6.1 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml
RENAMED
|
@@ -147,33 +147,6 @@ emission:
|
|
|
147
147
|
# (any value other than the terse-set means off).
|
|
148
148
|
style: off
|
|
149
149
|
|
|
150
|
-
# Unified knowledge layer: local FTS + ANN embeddings + note↔workspace links + search.
|
|
151
|
-
# Embeddings stay off by default until configured.
|
|
152
|
-
# Index path is always {root}/index.sqlite (not configurable).
|
|
153
|
-
knowledge:
|
|
154
|
-
enabled: true
|
|
155
|
-
search:
|
|
156
|
-
default_limit: 10
|
|
157
|
-
indexer:
|
|
158
|
-
chunk_tokens: 700
|
|
159
|
-
chunk_overlap_ratio: 0.12
|
|
160
|
-
embeddings:
|
|
161
|
-
enabled: false
|
|
162
|
-
# provider: nvidia | openai | voyage | gemini | openai_compatible
|
|
163
|
-
# model / dimensions / base_url are optional — per-provider defaults apply.
|
|
164
|
-
provider: nvidia
|
|
165
|
-
# model: nvidia/nemotron-3-embed-1b # openai → text-embedding-3-small
|
|
166
|
-
# dimensions: 1024 # openai → 1536; voyage → 512; gemini → 768
|
|
167
|
-
# base_url: https://integrate.api.nvidia.com/v1
|
|
168
|
-
# openai → https://api.openai.com/v1
|
|
169
|
-
# voyage → https://api.voyageai.com/v1
|
|
170
|
-
# openai_compatible → required (custom gateway)
|
|
171
|
-
batch_size: 32
|
|
172
|
-
# Auth env (by provider): NVIDIA_API_KEY | OPENAI_API_KEY | VOYAGE_API_KEY | GEMINI_API_KEY
|
|
173
|
-
store:
|
|
174
|
-
type: sqlite
|
|
175
|
-
path: .monkeybot/knowledge/vectors.sqlite
|
|
176
|
-
|
|
177
150
|
subagents:
|
|
178
151
|
timeout_sec: 600
|
|
179
152
|
max_turns: 1000
|
|
@@ -241,6 +214,14 @@ sandbox:
|
|
|
241
214
|
server_url: http://localhost:18080
|
|
242
215
|
image: python:3.12
|
|
243
216
|
ttl_seconds: 1800
|
|
217
|
+
# Background command caps. Jobs longer than max_job_seconds fail and should
|
|
218
|
+
# move to a broker-owned build. renew_interval_seconds extends the worker
|
|
219
|
+
# while a job is running (0 renews once at start). await_* bounds await_command.
|
|
220
|
+
max_background_jobs: 4
|
|
221
|
+
max_job_seconds: 3300
|
|
222
|
+
renew_interval_seconds: 300
|
|
223
|
+
await_default_wait_seconds: 300
|
|
224
|
+
await_max_wait_seconds: 600
|
|
244
225
|
# Set false only for a remote sandbox server with no shared filesystem. It
|
|
245
226
|
# then runs compute-only commands and refuses workspace/skills file access.
|
|
246
227
|
shared_filesystem: true
|
|
@@ -641,7 +641,7 @@ def test_slash_export_trace_no_session(tmp_path: Path) -> None:
|
|
|
641
641
|
async with app.run_test() as pilot:
|
|
642
642
|
app.query_one("#prompt", Composer).post_message(Composer.Submitted("/export-trace"))
|
|
643
643
|
await pilot.pause()
|
|
644
|
-
assert not list((tmp_path / "data").glob("trace_export_
|
|
644
|
+
assert not list((tmp_path / "data").glob("trace_export_*"))
|
|
645
645
|
|
|
646
646
|
asyncio.run(_run())
|
|
647
647
|
|
|
@@ -665,11 +665,20 @@ def test_slash_export_trace_copies_ndjson(tmp_path: Path) -> None:
|
|
|
665
665
|
(session_dir / "transcript.ndjson").write_text(
|
|
666
666
|
'{"seq":1,"type":"SessionManifest"}\n', encoding="utf-8"
|
|
667
667
|
)
|
|
668
|
+
child = session_dir / "subagents" / "child-1"
|
|
669
|
+
child.mkdir(parents=True)
|
|
670
|
+
(child / "transcript.ndjson").write_text(
|
|
671
|
+
'{"seq":1,"type":"UserMessage"}\n', encoding="utf-8"
|
|
672
|
+
)
|
|
668
673
|
app.query_one("#prompt", Composer).post_message(Composer.Submitted("/export-trace"))
|
|
669
674
|
await pilot.pause()
|
|
670
|
-
exports = list((tmp_path / "data").glob("trace_export_
|
|
675
|
+
exports = list((tmp_path / "data").glob("trace_export_*"))
|
|
671
676
|
assert len(exports) == 1
|
|
672
|
-
assert exports[0].
|
|
677
|
+
assert exports[0].is_dir()
|
|
678
|
+
assert (exports[0] / "transcript.ndjson").read_text(encoding="utf-8") == (
|
|
679
|
+
'{"seq":1,"type":"SessionManifest"}\n'
|
|
680
|
+
)
|
|
681
|
+
assert (exports[0] / "subagents" / "child-1" / "transcript.ndjson").is_file()
|
|
673
682
|
|
|
674
683
|
asyncio.run(_run())
|
|
675
684
|
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
"""CLI coverage for `monkeybot trace list` and `digest`."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
import json
|
|
6
|
+
from pathlib import Path
|
|
7
|
+
|
|
8
|
+
import pytest
|
|
9
|
+
|
|
10
|
+
from monkeybot_cli.main import main
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
def _session(tmp_path: Path) -> Path:
|
|
14
|
+
session = tmp_path / "workspace" / ".monkeybot" / "transcripts" / "20260101T000000Z_sess-1"
|
|
15
|
+
session.mkdir(parents=True)
|
|
16
|
+
records = [
|
|
17
|
+
{"type": "SessionManifest", "session_id": "sess-1", "model": "m"},
|
|
18
|
+
{"seq": 1, "type": "UserMessage", "content": "hello"},
|
|
19
|
+
{
|
|
20
|
+
"seq": 2,
|
|
21
|
+
"type": "HarnessIntervention",
|
|
22
|
+
"intervention": "doom_loop",
|
|
23
|
+
"detail": "stuck",
|
|
24
|
+
"inner_turn": 1,
|
|
25
|
+
},
|
|
26
|
+
{"seq": 3, "type": "ProviderResponse", "text": "recovered", "tool_requests": []},
|
|
27
|
+
]
|
|
28
|
+
(session / "transcript.ndjson").write_text(
|
|
29
|
+
"".join(json.dumps(row) + "\n" for row in records),
|
|
30
|
+
encoding="utf-8",
|
|
31
|
+
)
|
|
32
|
+
return session
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
def test_trace_list_digest_and_seq(tmp_path: Path, capsys: pytest.CaptureFixture[str]) -> None:
|
|
36
|
+
_session(tmp_path)
|
|
37
|
+
assert main(["trace", "list", "--cwd", str(tmp_path)]) == 0
|
|
38
|
+
listed = capsys.readouterr().out
|
|
39
|
+
assert "sess-1" in listed
|
|
40
|
+
assert "interventions=1" in listed
|
|
41
|
+
assert "score=1" in listed
|
|
42
|
+
|
|
43
|
+
assert main(["trace", "digest", "sess-1", "--cwd", str(tmp_path)]) == 0
|
|
44
|
+
digest = capsys.readouterr().out
|
|
45
|
+
assert "@seq 2" in digest
|
|
46
|
+
assert "doom_loop" in digest
|
|
47
|
+
assert "recovered" in digest
|
|
48
|
+
|
|
49
|
+
assert main(["trace", "digest", "sess-1", "--cwd", str(tmp_path), "--seq", "2"]) == 0
|
|
50
|
+
record = json.loads(capsys.readouterr().out)
|
|
51
|
+
assert record["intervention"] == "doom_loop"
|
|
52
|
+
assert record["detail"] == "stuck"
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
def test_trace_digest_missing_session(tmp_path: Path, capsys: pytest.CaptureFixture[str]) -> None:
|
|
56
|
+
assert main(["trace", "digest", "missing", "--cwd", str(tmp_path)]) == 1
|
|
57
|
+
err = capsys.readouterr().err
|
|
58
|
+
assert "No transcript found" in err
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_trace_read_failure_exits_nonzero(
|
|
62
|
+
tmp_path: Path, capsys: pytest.CaptureFixture[str]
|
|
63
|
+
) -> None:
|
|
64
|
+
session = _session(tmp_path)
|
|
65
|
+
ndjson = session / "transcript.ndjson"
|
|
66
|
+
ndjson.chmod(0)
|
|
67
|
+
try:
|
|
68
|
+
assert main(["trace", "digest", "sess-1", "--cwd", str(tmp_path)]) == 1
|
|
69
|
+
assert "Transcript read failed" in capsys.readouterr().err
|
|
70
|
+
assert main(["trace", "list", "--cwd", str(tmp_path)]) == 1
|
|
71
|
+
assert "Transcript read failed" in capsys.readouterr().err
|
|
72
|
+
finally:
|
|
73
|
+
ndjson.chmod(0o644)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
def test_trace_digest_unreadable_root_exits_nonzero(
|
|
77
|
+
tmp_path: Path, capsys: pytest.CaptureFixture[str]
|
|
78
|
+
) -> None:
|
|
79
|
+
root = _session(tmp_path).parent
|
|
80
|
+
root.chmod(0)
|
|
81
|
+
try:
|
|
82
|
+
assert main(["trace", "digest", "--cwd", str(tmp_path)]) == 1
|
|
83
|
+
assert "Transcript read failed" in capsys.readouterr().err
|
|
84
|
+
finally:
|
|
85
|
+
root.chmod(0o755)
|