monkeybot 3.7.0__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.7.0 → monkeybot-3.8.0}/BACKLOG.md +0 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/CHANGELOG.md +29 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/PKG-INFO +1 -7
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_tool_display.py +1 -1
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/main.py +2 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/providers.py +0 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/monkeybot.example.yaml +0 -27
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/cli/uv.lock +8 -91
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/docs/verifier-agent-design.md +2 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/TEST_COVERAGE.md +2 -3
- {monkeybot-3.7.0 → monkeybot-3.8.0}/pyproject.toml +4 -13
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/catalog.py +15 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/freeze.py +5 -10
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/resolve.py +2 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/store.py +19 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/bootstrap.py +9 -27
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/config/runtime_env.py +20 -11
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/config/snapshot.py +2 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/config/validation.py +2 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/__init__.py +17 -42
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_result_ingress.py +0 -5
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_shapers.py +2 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/hooks/__init__.py +2 -0
- {monkeybot-3.7.0/src/monkeybot/core/knowledge → monkeybot-3.8.0/src/monkeybot/core/hooks}/evidence_guard.py +9 -13
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/llm/provider.py +5 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/messages/tool_integrity.py +4 -3
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/messages/transform_context.py +4 -3
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/__init__.py +0 -8
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore.py +282 -27
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/goal_ledger.py +111 -3
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/history.py +118 -42
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/sqlite.py +159 -38
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/sqlite_backend.py +11 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/thread_summary.py +152 -61
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/src/monkeybot/core/prompts/harness_prompt.py +2 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/events.py +73 -0
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_hooks.py +2 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_usage.py +2 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/realtime_loop.py +6 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/tool_dispatch.py +17 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/turn_loop.py +62 -13
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/subagents/subagent_worker.py +52 -33
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/core_tool_executor.py +20 -82
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/sandbox_executor.py +8 -11
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/tool_kind.py +0 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/ledger.py +149 -1
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/tracker.py +37 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/manager.py +35 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/routes.py +24 -8
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/app.py +27 -85
- monkeybot-3.8.0/src/monkeybot/gateway/sse/history_routes.py +294 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/models.py +45 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/routes.py +75 -13
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_background_jobs.py +60 -0
- monkeybot-3.8.0/tests/core/test_branch_store_backends.py +185 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_config_extensions.py +18 -4
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_context.py +0 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_core_tool_executor.py +38 -81
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_doom_loop.py +8 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_empty_completion.py +13 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_events.py +30 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_evidence_guard.py +2 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_goals.py +30 -0
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/tests/core/test_thread_summary_wire.py +51 -1
- {monkeybot-3.7.0 → 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.7.0 → 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.7.0 → monkeybot-3.8.0}/tests/evals/scenario_runner.py +0 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/test_agent_behavior.py +0 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/sse/test_create_session_model.py +57 -0
- {monkeybot-3.7.0 → 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.7.0 → monkeybot-3.8.0}/tests/gateway/sse/test_routes.py +11 -1
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/sse/test_transcript_wiring.py +53 -2
- {monkeybot-3.7.0 → monkeybot-3.8.0}/uv.lock +5 -87
- monkeybot-3.7.0/docs/knowledge-layer-fixes.md +0 -274
- monkeybot-3.7.0/docs/memory-graph-split-plan.md +0 -231
- monkeybot-3.7.0/docs/workspace-index-design.md +0 -996
- monkeybot-3.7.0/src/monkeybot/core/knowledge/__init__.py +0 -18
- monkeybot-3.7.0/src/monkeybot/core/knowledge/captions.py +0 -202
- monkeybot-3.7.0/src/monkeybot/core/knowledge/chunking.py +0 -880
- monkeybot-3.7.0/src/monkeybot/core/knowledge/config.py +0 -274
- monkeybot-3.7.0/src/monkeybot/core/knowledge/embeddings/__init__.py +0 -25
- monkeybot-3.7.0/src/monkeybot/core/knowledge/embeddings/base.py +0 -248
- monkeybot-3.7.0/src/monkeybot/core/knowledge/embeddings/factory.py +0 -206
- monkeybot-3.7.0/src/monkeybot/core/knowledge/embeddings/gemini.py +0 -149
- monkeybot-3.7.0/src/monkeybot/core/knowledge/embeddings/nvidia.py +0 -69
- monkeybot-3.7.0/src/monkeybot/core/knowledge/embeddings/openai_compat.py +0 -116
- monkeybot-3.7.0/src/monkeybot/core/knowledge/embeddings/sanitize.py +0 -27
- monkeybot-3.7.0/src/monkeybot/core/knowledge/extractors.py +0 -364
- monkeybot-3.7.0/src/monkeybot/core/knowledge/fusion.py +0 -419
- monkeybot-3.7.0/src/monkeybot/core/knowledge/hook.py +0 -417
- monkeybot-3.7.0/src/monkeybot/core/knowledge/indexer.py +0 -680
- monkeybot-3.7.0/src/monkeybot/core/knowledge/links.py +0 -175
- monkeybot-3.7.0/src/monkeybot/core/knowledge/salience.py +0 -207
- monkeybot-3.7.0/src/monkeybot/core/knowledge/sqlite_index.py +0 -767
- monkeybot-3.7.0/src/monkeybot/core/knowledge/subsystem.py +0 -298
- monkeybot-3.7.0/src/monkeybot/core/knowledge/tool.py +0 -29
- monkeybot-3.7.0/src/monkeybot/core/knowledge/types.py +0 -127
- monkeybot-3.7.0/src/monkeybot/core/persistence/sqlite_vector.py +0 -481
- monkeybot-3.7.0/tests/core/test_knowledge_chunking.py +0 -283
- monkeybot-3.7.0/tests/core/test_knowledge_chunking_rank.py +0 -86
- monkeybot-3.7.0/tests/core/test_knowledge_config.py +0 -189
- monkeybot-3.7.0/tests/core/test_knowledge_embeddings.py +0 -332
- monkeybot-3.7.0/tests/core/test_knowledge_fts.py +0 -218
- monkeybot-3.7.0/tests/core/test_knowledge_fusion.py +0 -475
- monkeybot-3.7.0/tests/core/test_knowledge_fusion_ann.py +0 -166
- monkeybot-3.7.0/tests/core/test_knowledge_hook.py +0 -71
- monkeybot-3.7.0/tests/core/test_knowledge_indexer.py +0 -955
- monkeybot-3.7.0/tests/core/test_knowledge_links.py +0 -106
- monkeybot-3.7.0/tests/core/test_knowledge_media.py +0 -375
- monkeybot-3.7.0/tests/core/test_knowledge_salience.py +0 -211
- monkeybot-3.7.0/tests/core/test_knowledge_single_writer.py +0 -291
- monkeybot-3.7.0/tests/core/test_knowledge_subsystem.py +0 -102
- monkeybot-3.7.0/tests/core/test_knowledge_vectors.py +0 -283
- monkeybot-3.7.0/tests/evals/scenarios/tool_search_knowledge.yaml +0 -17
- monkeybot-3.7.0/tests/evals/test_memory_knowledge_routing.py +0 -70
- {monkeybot-3.7.0 → monkeybot-3.8.0}/.dockerignore +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/.github/workflows/ci.yml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/.github/workflows/live-eval-smoke.yml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/.github/workflows/prepare-release.yml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/.github/workflows/publish-release.yml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/.gitignore +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/.pre-commit-config.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/CONTRIBUTING.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/LICENSE +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/README.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/pyproject.toml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/skills/monkeybot/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/skills/monkeybot/references/config-sections.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_file_index.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_local_shell.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_renderer.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_session.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_status_bar.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_theme.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/chat_tui_widgets.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/chat.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/doctor.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/loop.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/new.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/refresh.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/run_cmd.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/talk.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/commands/validate.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/compat.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/config_resolve.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/exit_commands.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/extras_catalog.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/gateway_health.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/opensandbox_lifecycle.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/output.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/process_tree.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/audio_io.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/client.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/gateway_manager.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/push_to_talk.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/session.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/session_controller.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/talk_ui.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/realtime/wire_encode.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/runtime_python.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/AGENT.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/Dockerfile +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/browser/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/command_allowlist.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/dockerignore +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/env.example +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/goal/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/image-generator/generate_image.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/loop/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/mcp.json +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/opensandbox.docker.toml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/otel-collector.example.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/scaffold_defaults/permissions.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/session_controller.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/src/monkeybot_cli/terminal_markdown.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_continue.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_e2e.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_errors.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_file_index.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_grounding.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_local_shell.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_renderer_parity.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_session.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_status_bar.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_theme.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_chat_tool_display.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_cli.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_config_resolve.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_doctor.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_extras_catalog.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_gateway_health.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_opensandbox_lifecycle.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_realtime_session_controller.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_run_cmd.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_runtime_python.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_scaffold.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/cli/tests/test_terminal_markdown.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docker/Dockerfile +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docker/demo-model.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docker/demo.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docker/docker-compose.sandbox.yml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docker/opensandbox.docker.toml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docker/sandbox.Dockerfile +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docker-compose.yml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/agent-layout.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/assets/logo.png +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/browser-mcp-perf-baseline.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/browser-mcp-performance-plan.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/browser-mcp.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/cloud-deployment-design.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/deploy-aws-agentcore.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/deploy-pattern-a-container.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/deploy-pattern-b-serverless.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/deploy-pattern-c-agent-platform.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/deploy-pattern-d-realtime.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/getting-started.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/live-evals.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/mcp.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/migrations/agent-scope-namespacing.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/migrations/memory-outbox.sql +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/observability-runbook.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/ollama-local.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/otel-collector.example.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/progressive-loop-tools.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/progressive-mcp-tools.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/skills.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/spill-dynamic-design.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/docs/sse-gateway-ui.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/assertions.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/baselines/smoke.json +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/baselines/smoke.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/diff.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/eval_config.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/models.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/persistence.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/report.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/runner.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenario_loader.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/context/summarization_trigger.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/drift/declares_done.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/drift/path_constraint.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/drift/preempt.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/drift/repeat_correction.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/drift/supersession.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/mcp/get_prompt.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/mcp/list_resources.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/mcp/tool_invoke.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/memory/recall_cross_session.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/memory/recall_single_session.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/multi_turn/task_tracking.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/skills/skill_invocation.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/subagents/dispatch_complete.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/tools/core_read.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/tools/core_read_error.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/tools/core_run_command.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/tools/core_run_command_sandbox.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scenarios/tools/core_write.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/scorer.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/.env.example +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/.gitignore +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/fixture_mcp_server.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/AGENT.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/command_allowlist.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/mcp.json +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/monkeybot.verifier-on.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/monkeybot.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/monkeybot_config/permissions.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/pyproject.toml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/skills/browser/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/uv.lock +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/workspace/.gitkeep +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/smoke_agent/workspace/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/suites/drift.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/suites/smoke.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/test_assertions.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/test_diff.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/test_judge.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/test_report.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/test_runner_sse.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/evals/test_scorer.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/README.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/agentcore/handler.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/agentcore/runtime_app.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/agentengine/handler.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/cloud-functions/main.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/lambda/handler.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/ollama/PrefixStable.Modelfile +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/skills/browser/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/skills/browser/playbooks/.gitkeep +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/skills/diagnostics/README.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/skills/diagnostics/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/skills/diagnostics/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/skills/diagnostics/diagnostics.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/skills/image-generator/SKILL.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/examples/skills/image-generator/generate_image.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/pyproject.toml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/agentcore_smoke.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/dump_tool_surface.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/scripts/perf_bench.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/actions.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/agentcore.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/app.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/NOTICE.md +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/dom_tree.js +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/assets/pa_driver.js +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/backend.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/chat_context.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/chat_scope.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/dom_indexing.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/in_app_cdp.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/login.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/observe.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/perf.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/playbooks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/playwright_helpers.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/results.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/screenshots.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/server.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tab_ops.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tabs.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/batch.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/capture.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/interact.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/navigate.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/playbook.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/read.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/src/browser_mcp/tools/tab_control.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/conftest.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/api.json +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/article.html +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/cards.html +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/form.html +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/long_list.html +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/spa.html +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/fixtures/tool_surface.json +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/conftest.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_act_observe.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_driver_persist.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_intent_tools.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_multi_tab.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_observation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_run_playbook.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/integration/test_wait_for.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_act.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_agentcore.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_chat_isolation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_chat_scope.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_dom_indexing.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_fill_form.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_in_app_cdp.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_indexed_tools.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_observe.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_observe_after.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_perf.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playbook_flows.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playbooks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_playwright_helpers.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_screenshots.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_server_shutdown.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_tabs.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_tool_surface.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/tests/test_wait_tools.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/integrations/browser-mcp/uv.lock +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/pytest.ini +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/scripts/create_schema.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/scripts/precommit-pytest.sh +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/scripts/release.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/scripts/smoke_global_cli.sh +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/cli/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/cli/__main__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/cli/audio_io.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/cli/gateway_manager.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/cli/main.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/cli/push_to_talk.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/cli/realtime_client.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/computer/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/computer/approvals.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/computer/permissions.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/computer/safety.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/computer/tools.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/config.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/image_preview.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/text.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/attachments/tools.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/config/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/config/realtime_config.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/config/settings.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/config/yaml_loader.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/campaign_context.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/common.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/epoch.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/secret_egress.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/slash_skills.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/context/tool_output_policy.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/goals/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/goals/service.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/layout.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/llm/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/llm/realtime_provider.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/llm/usage.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/lockfile_names.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/logging_utils.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/mcp/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/mcp/mcp_client.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/mcp/ports_mcp.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/config.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/hook.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/ids.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/ingest.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/migrate_layout.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/observability.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/outbox.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/palace.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/subsystem.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/uri.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/memory/writer.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/messages/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/messages/convert_provider.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/path_safety.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/db.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/durable_runs.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/errors.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore.indexes.json +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/firestore_scheduled_loops.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/runs.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/scheduled_loops.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/session_turn_locks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/usage.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/persistence/usage_buckets.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/prompts/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/prompts/headings.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/prompts/prompt.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/context_budget.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/doom_loop.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/input_admission.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_messages.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/loop_ports.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/provider_stream_mapper.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/tool_batch.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/runtime/utterance_buffer.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/subagents/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/subagents/progress_publish.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/subagents/subagent_proto.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/subagents/worker_pool.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/subprocess_groups.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/testing/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/testing/mocks_provider.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/testing/mocks_realtime_provider.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/ask_user.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/background_jobs.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/command_executor.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/fs_isolation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/grant_store.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/inspector.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/loop_inspector.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/patch.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/path_grant_inspector.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/permission.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/spill_inventory.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/terminal.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/text_normalize.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/tool_hint.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/types.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/tools/workspace_service.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/types/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/types/content_blocks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/types/interfaces.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/types/types_tools.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/actuator.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/binding.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/classify.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/inspector.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/intervention.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/judge.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/mailbox.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/port.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/verifier/severity.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/workspace/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/workspace/factory.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/workspace/gcs.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/workspace/local.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/workspace/protocol.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/workspace/s3.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/core/workspace_layout.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/bootstrap.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/main.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/pending_response_bus.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/app.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/deps.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/errors.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/guardrails.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/metrics.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/session.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime/wire.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/realtime_main.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/goal_routes.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/loop_port.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/reload.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/reply_body.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/request_storage.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/scheduler_routes.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/scheduler_wiring.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/session_bus.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/sse.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/gateway/sse/workspace_layout.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/observability/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/observability/_state.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/observability/instrumentation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/observability/propagation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/observability/spans.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/observability/sqlite_exporter.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/_bedrock_converse.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/_openai_compat.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/_utils.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/bedrock.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/claude.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/gemini.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/gemini_live.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/huggingface.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/model_capabilities.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/nvidia.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/ollama.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/openai.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/openrouter.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/pricing.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/request_budget.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/sampling.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/providers/vertex_claude.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/scaffold/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/scheduler/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/scheduler/__main__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/scheduler/engine.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/scheduler/http_invoker.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/scheduler/interval.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/scheduler/tick_result.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/scheduler/worker.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/subagents/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/subagents/worker/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/subagents/worker/__main__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/todo_list/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/todo_list/store.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/todo_list/tool.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/web_search/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/duckduckgo.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/firecrawl.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/web_search/backends/tavily.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/web_search/protocol.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/src/monkeybot/web_search/tool.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/acceptance/test_observability_acceptance.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/cli/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/cli/test_gateway_manager.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/cli/test_main.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/cli/test_push_to_talk.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/cli/test_realtime_client.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/computer/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/computer/test_approvals.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/computer/test_computer_tools.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/computer/test_package_init.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/computer/test_path_policy.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/computer/test_permissions.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/computer/test_subagent_exclusion.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/computer/test_wiring.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/conftest.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/fixtures/bitbucket_dc_style_pr.diff +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/memory/helpers.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/memory/in_memory_palace.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/memory/test_mempalace.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/memory/test_review_fixes.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_agent_layout.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_ask_user.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_attachment_freeze.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_attachment_store.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_bootstrap.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_content_blocks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_context_budget.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_context_epoch.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_durable_events.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_durable_runs.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_env_map_grep_gates.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_firestore_history.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_firestore_scheduled_loops.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_firestore_usage.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_fs_isolation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_gemini_history_replay.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_goal_ledger.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_goal_persistence.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_grant_store.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_harness_prompt.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_history_compaction_split.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_hooks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_image_preview.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_input_admission.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_inspector.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_layout.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_logging_utils.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_loop.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_loop_hooks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_loop_observability.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_loop_transcript.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_mcp_client.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_memory_layout_migrate.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_message_pipeline.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_mocks_realtime_provider.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_patch.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_path_grant_inspector.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_path_safety.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_permission.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_pricing.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_progress_publish.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_progress_tracker.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_prompt.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_provider_contract.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_provider_stream_mapper.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_realtime_loop.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_replace_fuzzy.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_run_command_parse.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_runs.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_runtime_config_snapshot.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_runtime_env.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_sandbox_executor.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_scheduled_loops.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_secret_egress.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_session_turn_locks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_settlement.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_slash_skills.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_spill_dynamic.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_spill_inventory.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_storage_backends.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_subagent_proto.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_subagent_trace_propagation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_subagent_worker_paths.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_terminal.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_tool_def_schema.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_tool_integrity.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_tool_result_ingress.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_tool_shapers.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_usage.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_usage_migration.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_utterance_buffer.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_verifier_binding.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_verifier_inspector.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_verifier_judge.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_verifier_mailbox_lifecycle.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_verifier_sticky_nudge.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_worker_pool.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_workspace_extra_read_roots.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_workspace_layout.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_workspace_symlinks.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/test_workspace_write_scope.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/workspace/test_factory.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/workspace/test_local_storage.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/core/workspace/test_protocol_contract.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/eval_hook.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/memory_wake_up_large.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/memory_write_inject.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/subagent_roundtrip.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_glob_grep.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_load_file.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_loops.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_read.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_replace_apply_patch.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_run_command.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_search_memory.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_todo_list.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_web_search.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/tool_write.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/scenarios/turn_completion.yaml +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/evals/test_verifier_port.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/test_app.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/test_deps.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/test_guardrails.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/test_manager.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/test_metrics.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/test_routes_client_text.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/test_session.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/realtime/test_wire.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/sse/test_attachments.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/sse/test_config_reload.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/sse/test_scheduler_routes.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/sse/test_session_bus.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/test_otel_fastapi.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/test_otel_lifespan.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/test_pending_response_endpoints.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/test_realtime_main.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/test_resolve_provider.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/test_sse_events.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/gateway/test_subagent_event_publisher.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/integration/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/integration/test_mb_e2e_simple_reply.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/integration/test_observability_integration.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/integration/test_prompt_caching_integration.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/conftest.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_init.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_instrumentation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_loop_hook_spans.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_propagation.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_span_contract.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_spans.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_sqlite_exporter.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_truncate.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/observability/test_turn_complete_trace.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/conftest.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_anthropic_cache.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_anthropic_history.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_bedrock_converse.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_bedrock_estimate.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_gemini_history.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_gemini_live.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_gemini_usage.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_huggingface.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_model_capabilities.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_nvidia.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_ollama.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_openai_byte_budget.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_openai_compat_usage.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_openai_history.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_pricing.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_request_budget.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_safe_parse_tool_args.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_sampling.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_sonnet5_sampling.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_source_grep_gates.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/providers/test_vertex_claude_history.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/scheduler/test_engine.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/scheduler/test_interval.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/skills/__init__.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/skills/test_generate_image_script.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/test_cold_start.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/test_packaging_config.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/test_release_script.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/todo_list/test_todo_list.py +0 -0
- {monkeybot-3.7.0 → monkeybot-3.8.0}/tests/web_search/__init__.py +0 -0
- {monkeybot-3.7.0 → 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,35 @@ 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
|
+
|
|
9
38
|
## [core v3.7.0] - 2026-09-30
|
|
10
39
|
|
|
11
40
|
### Added
|
|
@@ -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.7.0 → 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
|
|
@@ -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)
|