Fixes the installation process for Bob's evolve-full mode#123
Fixes the installation process for Bob's evolve-full mode#123visahak wants to merge 3 commits intoAgentToolkit:mainfrom
Conversation
📝 WalkthroughWalkthroughAdds Bob "evolve-full" documentation and testing, updates Bob custom_modes guidance for tool-call representation, and extends install/uninstall scripts to support both "lite" and "full" Bob installation modes; splits a preservation test into separate lite/full variants and removes a Roo Code doc page. Changes
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~20 minutes Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 3✅ Passed checks (3 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
platform-integrations/install.sh (1)
505-549:⚠️ Potential issue | 🟠 MajorFull-mode Bob installs now skip the base assets.
Lines 505-549 move
evolve-lib,skills/evolve-learn,skills/evolve-recall, andcommands/undermode == "lite", soinstall --platform bob --mode fullnow only writesmcp.jsonandcustom_modes.yaml. That leaves the Bob install incomplete relative to the existing full-mode contract.Based on learnings Bob full mode installation must include MCP server setup in addition to lite mode components.Suggested fix
- if mode == "lite": - # Shared lib (entity_io) — single source of truth lives in the Claude plugin - shared_lib = Path(source_dir) / "platform-integrations" / "claude" / "plugins" / "evolve-lite" / "lib" - if not shared_lib.is_dir(): - error(f"Shared lib not found: {shared_lib} — is the Claude plugin present in the source tree?") - sys.exit(1) - copy_tree(shared_lib, bob_target / "evolve-lib") - success("Copied Bob lib") - - # Skills - copy_tree(bob_source_lite / "skills" / "evolve-learn", bob_target / "skills" / "evolve-learn") - copy_tree(bob_source_lite / "skills" / "evolve-recall", bob_target / "skills" / "evolve-recall") - success("Copied Bob skills") - - # Commands - copy_tree(bob_source_lite / "commands", bob_target / "commands") - success("Copied Bob commands") - - # custom_modes.yaml + # Shared lib (entity_io) — required in both lite and full modes + shared_lib = Path(source_dir) / "platform-integrations" / "claude" / "plugins" / "evolve-lite" / "lib" + if not shared_lib.is_dir(): + error(f"Shared lib not found: {shared_lib} — is the Claude plugin present in the source tree?") + sys.exit(1) + copy_tree(shared_lib, bob_target / "evolve-lib") + success("Copied Bob lib") + + # Skills + copy_tree(bob_source_lite / "skills" / "evolve-learn", bob_target / "skills" / "evolve-learn") + copy_tree(bob_source_lite / "skills" / "evolve-recall", bob_target / "skills" / "evolve-recall") + success("Copied Bob skills") + + # Commands + copy_tree(bob_source_lite / "commands", bob_target / "commands") + success("Copied Bob commands") + + if mode == "lite": + # custom_modes.yaml source_modes_yaml = bob_source_lite / "custom_modes.yaml" target_modes_yaml = bob_target / "custom_modes.yaml" merge_yaml_custom_mode(source_modes_yaml, target_modes_yaml, BOB_SLUG) success(f"Merged custom mode '{BOB_SLUG}' into {target_modes_yaml}")🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@platform-integrations/install.sh` around lines 505 - 549, The full-mode branch currently only upserts MCP and merges custom_modes.yaml, omitting the shared lib and Bob assets (evolve-lib, skills/evolve-learn, skills/evolve-recall, commands) that lite mode installs; update the block under elif mode == "full" (around bob_source_full, bob_target) to also copy the same assets as the lite branch by invoking copy_tree for the shared lib path (same source as shared_lib/evolve-lite but adjusted for full layout if needed), copy_tree for skills/evolve-learn and skills/evolve-recall, and copy_tree for commands, or factor the repeated installation steps into a helper (e.g., reuse the lite-install logic) so full-mode performs MCP upsert via upsert_json_key and also installs evolve-lib and the skills/commands before calling merge_yaml_custom_mode.
🧹 Nitpick comments (2)
platform-integrations/bob/evolve-full/custom_modes.yaml (1)
168-172: Clarify thesave_trajectory()payload shape.Lines 168-172 first show
contentas a plain string, then say tool calls should be represented asfunction_call/function_responseobjects inside that same field. Please replace the string-only example with the actual mixed-content shape here; otherwise the instructions still leave room for malformed trajectory payloads.Suggested wording
- - save_trajectory() requires OpenAI JSON format: [{"role": - "user/assistant", "content": "..."}] - - - When tool calls occur, include them as function_call/function_response - objects in the content field + - save_trajectory() requires OpenAI JSON format. `content` may be a + string or a structured list, e.g. [{"role":"assistant","content":[ + {"type":"text","text":"..."}, + {"type":"function_call", ...}, + {"type":"function_response", ...} + ]}]🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@platform-integrations/bob/evolve-full/custom_modes.yaml` around lines 168 - 172, The save_trajectory() documentation currently shows the message "content" as a plain string; update the example in custom_modes.yaml so the payload demonstrates the actual mixed-content message shape: an array of OpenAI-style messages (objects with "role" and "content") where "content" can be either a plain string or a structured object representing tool interactions (e.g., objects tagged as "function_call" or "function_response" with their respective fields). Specifically modify the save_trajectory() example to include at least one message with string content and at least one message whose content is a function_call/function_response object so consumers see the correct mixed payload format.platform-integrations/bob/evolve-full/TESTING.md (1)
5-19: Add a reinstall/idempotency check to this guide.This checklist only validates the runtime workflow. It will not catch the install regression class this PR is touching: rerunning Bob full-mode install should still leave exactly one
mcpServers.evolveentry and one managedEvolveblock.Based on learnings Multiple full mode installs of Bob platform must produce identical results with no duplicate MCP entries.Suggested addition
+## Test Reinstall / Idempotency + +1. Run the full-mode installer twice against the same target directory. +2. Verify `.bob/mcp.json` still contains exactly one `mcpServers.evolve` entry. +3. Verify `.bob/custom_modes.yaml` still contains a single managed `Evolve` block.🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@platform-integrations/bob/evolve-full/TESTING.md` around lines 5 - 19, Add an idempotency/reinstall check to the TESTING.md guide: instruct testers to rerun the Bob full-mode install (the same install command used for initial setup) and then verify there is exactly one mcpServers.evolve entry and exactly one managed Evolve block (no duplicates), and to describe how to inspect these (e.g., config file or UI location where mcpServers.evolve and the managed Evolve block appear) and what to do if duplicates are found; reference "mcpServers.evolve" and "Evolve" in the steps and make the check explicit so install regressions are caught.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Outside diff comments:
In `@platform-integrations/install.sh`:
- Around line 505-549: The full-mode branch currently only upserts MCP and
merges custom_modes.yaml, omitting the shared lib and Bob assets (evolve-lib,
skills/evolve-learn, skills/evolve-recall, commands) that lite mode installs;
update the block under elif mode == "full" (around bob_source_full, bob_target)
to also copy the same assets as the lite branch by invoking copy_tree for the
shared lib path (same source as shared_lib/evolve-lite but adjusted for full
layout if needed), copy_tree for skills/evolve-learn and skills/evolve-recall,
and copy_tree for commands, or factor the repeated installation steps into a
helper (e.g., reuse the lite-install logic) so full-mode performs MCP upsert via
upsert_json_key and also installs evolve-lib and the skills/commands before
calling merge_yaml_custom_mode.
---
Nitpick comments:
In `@platform-integrations/bob/evolve-full/custom_modes.yaml`:
- Around line 168-172: The save_trajectory() documentation currently shows the
message "content" as a plain string; update the example in custom_modes.yaml so
the payload demonstrates the actual mixed-content message shape: an array of
OpenAI-style messages (objects with "role" and "content") where "content" can be
either a plain string or a structured object representing tool interactions
(e.g., objects tagged as "function_call" or "function_response" with their
respective fields). Specifically modify the save_trajectory() example to include
at least one message with string content and at least one message whose content
is a function_call/function_response object so consumers see the correct mixed
payload format.
In `@platform-integrations/bob/evolve-full/TESTING.md`:
- Around line 5-19: Add an idempotency/reinstall check to the TESTING.md guide:
instruct testers to rerun the Bob full-mode install (the same install command
used for initial setup) and then verify there is exactly one mcpServers.evolve
entry and exactly one managed Evolve block (no duplicates), and to describe how
to inspect these (e.g., config file or UI location where mcpServers.evolve and
the managed Evolve block appear) and what to do if duplicates are found;
reference "mcpServers.evolve" and "Evolve" in the steps and make the check
explicit so install regressions are caught.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: ba3675de-83bd-4e03-876e-d5c88dca5f34
📒 Files selected for processing (4)
docs/integrations/roo-code/index.mdplatform-integrations/bob/evolve-full/TESTING.mdplatform-integrations/bob/evolve-full/custom_modes.yamlplatform-integrations/install.sh
💤 Files with no reviewable changes (1)
- docs/integrations/roo-code/index.md
There was a problem hiding this comment.
🧹 Nitpick comments (1)
tests/platform_integrations/test_preservation.py (1)
111-114: Consider adding assertion forevolve-recallskill directory.The lite mode test verifies
evolve-learnis installed but omits checkingevolve-recall. While the individualtest_preserves_existing_skillstest covers both, adding the check here would make this "all together" test more complete and catch potential partial installation bugs.🔧 Suggested addition for completeness
# Assert: Evolve lite content is added bob_dir = temp_project_dir / ".bob" file_assertions.assert_dir_exists(bob_dir / "skills" / "evolve-learn") + file_assertions.assert_dir_exists(bob_dir / "skills" / "evolve-recall") file_assertions.assert_sentinel_block_exists(custom_modes, "evolve-lite")Based on learnings: "Bob lite mode installation must copy
skills/evolve-learn/andskills/evolve-recall/to.bob/skills/"🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@tests/platform_integrations/test_preservation.py` around lines 111 - 114, Add an assertion to this test to verify the `evolve-recall` skill directory is also copied into the `.bob` skills folder: after computing `bob_dir = temp_project_dir / ".bob"`, call `file_assertions.assert_dir_exists(bob_dir / "skills" / "evolve-recall")` (mirroring the existing `evolve-learn` assertion) and ensure `file_assertions.assert_sentinel_block_exists(custom_modes, "evolve-lite")` remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@tests/platform_integrations/test_preservation.py`:
- Around line 111-114: Add an assertion to this test to verify the
`evolve-recall` skill directory is also copied into the `.bob` skills folder:
after computing `bob_dir = temp_project_dir / ".bob"`, call
`file_assertions.assert_dir_exists(bob_dir / "skills" / "evolve-recall")`
(mirroring the existing `evolve-learn` assertion) and ensure
`file_assertions.assert_sentinel_block_exists(custom_modes, "evolve-lite")`
remains unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: defaults
Review profile: CHILL
Plan: Pro
Run ID: bb5f2f85-fed0-4ad0-8975-748ba730ca24
📒 Files selected for processing (1)
tests/platform_integrations/test_preservation.py
Changes
Evolve-export.yamlfromdocs/integrations/roo-code/toplatform-integrations/bob/evolve-full/custom_modes.yamlfor better organizationplatform-integrations/bob/evolve-full/TESTING.mdwith instructions specific to Bob's full modeplatform-integrations/install.shto:mcp.jsonandcustom_modes.yamlfor full modeTesting
Follow the instructions in
platform-integrations/bob/evolve-full/TESTING.mdto verify the Evolve mode workflow.Related Issues
Fixes issues with Bob evolve-full mode installation where custom modes and MCP configuration were not being properly installed.
Summary by CodeRabbit
Documentation
Chores
Tests