Skip to content

Fixes the installation process for Bob's evolve-full mode#123

Open
visahak wants to merge 3 commits intoAgentToolkit:mainfrom
visahak:evolve-full
Open

Fixes the installation process for Bob's evolve-full mode#123
visahak wants to merge 3 commits intoAgentToolkit:mainfrom
visahak:evolve-full

Conversation

@visahak
Copy link
Copy Markdown
Collaborator

@visahak visahak commented Apr 1, 2026

Changes

  • Moved configuration files: Relocated Evolve-export.yaml from docs/integrations/roo-code/ to platform-integrations/bob/evolve-full/custom_modes.yaml for better organization
  • Created dedicated testing guide: Added platform-integrations/bob/evolve-full/TESTING.md with instructions specific to Bob's full mode
  • Fixed install script: Updated platform-integrations/install.sh to:
    • Only install lite mode components (lib, skills, commands) when mode is "lite"
    • Install both mcp.json and custom_modes.yaml for full mode
    • Properly merge the "Evolve" custom mode (not "evolve-lite") for full mode
    • Uninstall both lite and full mode custom modes during cleanup
  • Updated custom mode instructions: Added clarification about including function_call/function_response objects in trajectory content

Testing

Follow the instructions in platform-integrations/bob/evolve-full/TESTING.md to 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

    • Removed Roo Code integration guide
    • Added a testing guide for Bob’s Evolve Full Mode
  • Chores

    • Install/uninstall flow updated to support both lite and full Bob configuration modes
  • Tests

    • Preservation test split into separate lite and full mode tests to validate mode-specific install and preservation behaviors

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Apr 1, 2026

📝 Walkthrough

Walkthrough

Adds 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

Cohort / File(s) Summary
Docs — removed & added
docs/integrations/roo-code/index.md, platform-integrations/bob/evolve-full/TESTING.md
Removed Roo Code Evolve setup guide; added Bob Evolve Full Mode testing instructions detailing workflow, tool-call order, and rejection logic.
Bob custom modes
platform-integrations/bob/evolve-full/custom_modes.yaml
Updated guidance for save_trajectory() to require tool calls be represented as function_call / function_response objects inside message content.
Installer scripts
platform-integrations/install.sh
Refactored install_bob()/uninstall_bob() to support mode=lite (copy shared libs, skills, commands, merge lite custom mode slug) and mode=full (use evolve-full source, upsert MCP evolve server entry, merge "Evolve" custom mode); uninstall removes both mode entries.
Tests
tests/platform_integrations/test_preservation.py
Split original preservation test into test_preserves_all_bob_content_together_lite and _full; assertions adjusted for mode-specific artifacts (slugs evolve-lite vs Evolve, MCP evolve server presence for full).

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~20 minutes

Suggested reviewers

  • vinodmut
  • illeatmyhat

Poem

🐰 I hopped through scripts and docs today,
Merged modes of lite and full along the way,
Tests split paths, configs set just right,
Evolve and install dance into the night,
A joyful thump — the rabbit’s code delight!

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'Fixes the installation process for Bob's evolve-full mode' directly and accurately describes the main change: fixing installation for Bob's evolve-full mode with proper configuration merging and MCP setup.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 | 🟠 Major

Full-mode Bob installs now skip the base assets.

Lines 505-549 move evolve-lib, skills/evolve-learn, skills/evolve-recall, and commands/ under mode == "lite", so install --platform bob --mode full now only writes mcp.json and custom_modes.yaml. That leaves the Bob install incomplete relative to the existing full-mode contract.

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}")
Based on learnings Bob full mode installation must include MCP server setup in addition to lite mode components.
🤖 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 the save_trajectory() payload shape.

Lines 168-172 first show content as a plain string, then say tool calls should be represented as function_call / function_response objects 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.evolve entry and one managed Evolve block.

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.
Based on learnings Multiple full mode installs of Bob platform must produce identical results with no duplicate MCP entries.
🤖 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

📥 Commits

Reviewing files that changed from the base of the PR and between 6945ce1 and 81d05ac.

📒 Files selected for processing (4)
  • docs/integrations/roo-code/index.md
  • platform-integrations/bob/evolve-full/TESTING.md
  • platform-integrations/bob/evolve-full/custom_modes.yaml
  • platform-integrations/install.sh
💤 Files with no reviewable changes (1)
  • docs/integrations/roo-code/index.md

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🧹 Nitpick comments (1)
tests/platform_integrations/test_preservation.py (1)

111-114: Consider adding assertion for evolve-recall skill directory.

The lite mode test verifies evolve-learn is installed but omits checking evolve-recall. While the individual test_preserves_existing_skills test 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/ and skills/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

📥 Commits

Reviewing files that changed from the base of the PR and between 81d05ac and 2ba2e73.

📒 Files selected for processing (1)
  • tests/platform_integrations/test_preservation.py

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants