Skip to content

public release#2

Merged
OEvortex merged 13 commits intomainfrom
xlm/tools
Dec 30, 2025
Merged

public release#2
OEvortex merged 13 commits intomainfrom
xlm/tools

Conversation

@OEvortex
Copy link
Copy Markdown
Owner

This pull request completes the rebranding and migration from "Mistral Vibe" to "ReVibe," updates all related references, and enhances documentation and configuration. The changes affect repository ownership, build/release workflows, code, packaging, and user-facing documentation. The most important changes are grouped below:

Rebranding and Ownership Migration

  • Changed repository and team references from mistralai/mistral-vibe to OEvortex/revibe in .github/CODEOWNERS, workflow files, and throughout the codebase. This includes updates to PyPI, Zed extension, and release URLs. [1] [2] [3] [4] [5]
  • Updated ACP agent metadata, CLI help, and onboarding to use "ReVibe" instead of "Mistral Vibe" or "vibe." [1] [2] [3]

Documentation and User Experience Improvements

  • Completely rewrote and modernized the README.md with clearer installation, setup, configuration, feature highlights, and usage instructions, reflecting the new ReVibe branding and directory structure.
  • Expanded the CHANGELOG.md with new features, improvements, and fixes, and clarified the migration from .vibe to .revibe directories.

Build and Packaging Updates

  • Fixed CLI and binary naming in workflow scripts and packaging specs to use revibe instead of vibe, ensuring consistency in builds and releases. [1] [2] [3]

Cleanup

  • Removed the obsolete chnageimade.md file, as its content is now reflected in the changelog and documentation.

- Skip API key screen for providers without api_key_env_var (ollama, llamacpp, qwencode)
- Show completion message after setup
- Update tests and documentation
- Remove unnecessary files
Signed-off-by: OEvortex <abhat8283@gmail.com>
- Updated all instances of "vibe" to "revibe" in paths, configuration, and tool descriptions.
- Modified the Grep tool to use ".revibeignore" instead of ".vibeignore".
- Adjusted installation scripts and test cases to reflect the new naming convention.
- Enhanced the QwenBackend class by simplifying authentication handling and improving error management.
- Added new model configurations and updated existing ones in model_config.py.
- Improved system prompt generation by modularizing tool prompt sections.
- Updated tests to ensure compatibility with the new naming and structure.

Signed-off-by: OEvortex <abhat8283@gmail.com>
- Add animated 'ReVibe' text logo to setup completion screen with gradient colors
- Extend provider help URLs to include Hugging Face and Cerebras
- Update CHANGELOG.md for version 0.2.0 with new features
- Change setup completion title to 'Setup Completed' with gradient animation
- Add Qwen installation and authentication instructions for qwencode provider
- Update README.md with qwencode setup instructions
- Refactor code to reduce nesting and improve maintainability
Signed-off-by: OEvortex <abhat8283@gmail.com>
Copilot AI review requested due to automatic review settings December 30, 2025 14:16
@OEvortex OEvortex merged commit a6a8cc0 into main Dec 30, 2025
3 of 12 checks passed
Copy link
Copy Markdown

Copilot AI left a comment

Choose a reason for hiding this comment

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

Pull request overview

This pull request completes a comprehensive rebrand from "Mistral Vibe" to "ReVibe," encompassing repository ownership migration, configuration directory restructuring, tool renaming, and extensive documentation updates. The changes affect all layers of the application including core configuration, CLI tools, build scripts, and user-facing documentation.

  • Complete migration from .vibe to .revibe configuration directories across the codebase
  • Repository ownership transfer from mistralai/mistral-vibe to OEvortex/revibe in all workflow files and documentation
  • Tool display name changes (grep → find) with enhanced documentation and multiple new HuggingFace models

Reviewed changes

Copilot reviewed 47 out of 49 changed files in this pull request and generated 21 comments.

Show a summary per file
File Description
uv.lock Version downgraded from 1.4.0 to 0.2.0 for the rebrand
tests/**/*.py Updated test fixtures to use .revibe instead of .vibe, patch paths updated for rebranding
revibe/core/paths/*.py Migrated all global and config path constants from VIBE_HOME to REVIBE_HOME and .vibe to .revibe
revibe/core/tools/builtins/grep.py Renamed tool display name to "Find", updated ignore file from .vibeignore to .revibeignore
revibe/core/tools/builtins/prompts/*.md Updated tool documentation with new branding and renamed grep to find
revibe/core/model_config.py Added 15+ new HuggingFace models, disambiguated duplicate model aliases with provider suffixes
revibe/core/llm/backend/qwen/handler.py Refactored streaming methods into smaller helper functions for improved maintainability
revibe/core/config.py Updated environment prefix from VIBE_ to REVIBE_, improved model/provider handling for dynamic loading
revibe/cli/**/*.py Updated CLI help text, widget logic, and entrypoint references to use .revibe paths
revibe/setup/**/*.py Enhanced onboarding UX with gradient animations, improved provider-specific API key handling
revibe/acp/acp_agent.py Updated ACP agent metadata from "Mistral Vibe" to "ReVibe"
scripts/install.sh Simplified installation flow, updated command names to revibe and revibe-acp
README.md Complete rewrite with modern formatting, clearer structure, and ReVibe branding
CHANGELOG.md Added comprehensive release notes for v0.2.0 including new features and breaking changes
.github/workflows/*.yml Updated repository references and binary names across CI, release, and build workflows
pyproject.toml Updated project URLs to point to OEvortex/revibe
revibe-acp.spec Updated PyInstaller spec with corrected data paths for the rebrand

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment on lines +85 to +95
def test_api_key_input_handles_no_env_var_provider() -> None:
provider = ProviderConfig(
name="anthropic",
api_base="https://api.anthropic.com",
api_key_env_var="ANTHROPIC_API_KEY",
name="ollama",
api_base="http://127.0.0.1:11434/v1",
api_key_env_var="", # No API key required
)
widget = ApiKeyInput(provider)

# Create env file with one existing key
initial_content = "OPENAI_API_KEY=sk-test-123\n"
temp_env_file.write_text(initial_content, encoding="utf-8")

# Append new key
new_key = "sk-ant-test-456"
env_var_line = f"{provider.api_key_env_var}={new_key}"
existing_content = temp_env_file.read_text(encoding="utf-8")
temp_env_file.write_text(existing_content + env_var_line + "\n", encoding="utf-8")

# Verify both keys are present
content = temp_env_file.read_text(encoding="utf-8")
assert "OPENAI_API_KEY=sk-test-123" in content
assert "ANTHROPIC_API_KEY=sk-ant-test-456" in content
# Check that the provider is set correctly
assert widget.provider.name == "ollama"
assert widget.provider.api_key_env_var == ""
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The removed test_append_new_api_key test validates the functionality of appending a new API key when other keys already exist in the .env file. This test case is completely removed and not replaced with equivalent coverage. The new test test_api_key_input_handles_no_env_var_provider tests a different scenario. Consider restoring this test or adding equivalent coverage for the append functionality.

Copilot uses AI. Check for mistakes.
Comment on lines +181 to +184
MAX_COMMAND_DISPLAY_LENGTH = 30
command = event.args.command.strip()
if len(command) > 30:
command = command[:27] + "..."
if len(command) > MAX_COMMAND_DISPLAY_LENGTH:
command = command[:MAX_COMMAND_DISPLAY_LENGTH - 3] + "..."
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The magic numbers 20 and 30 for maximum display length should be extracted as named constants for better maintainability. Consider defining them at the module level as MAX_PATTERN_DISPLAY_LENGTH and MAX_COMMAND_DISPLAY_LENGTH respectively.

Copilot uses AI. Check for mistakes.
Comment on lines 23 to 33
```xml
<tool_call>
<tool_name>grep</tool_name>
<tool_name>find</tool_name>
<parameters>
<pattern>your regex pattern</pattern>
<path>directory or file to search</path>
<pattern>your_regex_pattern</pattern>
<path>.</path>
<max_matches>100</max_matches>
<use_default_ignore>true</use_default_ignore>
</parameters>
</tool_call>
```
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The help text mentions "find" as the tool name in XML format examples, but the actual tool_name in the XML should be "grep" to match the tool registration. The disconnect between the display name "Find" and the actual tool name "grep" will cause confusion when users try to use the tool. Either update the XML examples to use <tool_name>grep</tool_name> or rename the tool registration to "find".

Copilot uses AI. Check for mistakes.
Comment on lines +53 to 88
<!-- Find function definition -->
<tool_call>
<tool_name>find</tool_name>
<parameters>
<pattern>def process_data</pattern>
<path>src</path>
</parameters>
</tool_call>

<!-- Search for class usage -->
<tool_call>
<tool_name>grep</tool_name>
<tool_name>find</tool_name>
<parameters>
<pattern>def build_payload</pattern>
<path>revibe/core</path>
<pattern>\bUserModel\b</pattern>
<path>.</path>
</parameters>
</tool_call>

<!-- Search for TODOs across repo -->
<!-- Find all TODO comments -->
<tool_call>
<tool_name>grep</tool_name>
<tool_name>find</tool_name>
<parameters>
<pattern>TODO</pattern>
<path>.</path>
<max_matches>50</max_matches>
</parameters>
</tool_call>

<!-- Find class usages with word boundaries -->
<!-- Search logs for errors -->
<tool_call>
<tool_name>grep</tool_name>
<tool_name>find</tool_name>
<parameters>
<pattern>\bToolManager\b</pattern>
<path>revibe</path>
<pattern>ERROR.*timeout</pattern>
<path>logs</path>
</parameters>
</tool_call>
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

All examples in this file use <tool_name>find</tool_name> but the actual tool name should be "grep" based on the class implementation. This will cause tool calls to fail. Update all tool_name references to match the registered tool name.

Copilot uses AI. Check for mistakes.
Comment on lines +144 to 147
codeignore_path = self.config.effective_workdir / self.config.ignore_file
if codeignore_path.is_file():
patterns.extend(self._load_codeignore_patterns(codeignore_path))

Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The variable name codeignore_path should be renamed to ignore_path to match the renamed configuration field ignore_file. This improves code consistency and clarity.

Copilot uses AI. Check for mistakes.
Comment on lines 102 to 105
description: ClassVar[str] = (
"Recursively search files for a regex pattern using ripgrep (rg) or grep. "
"Respects .gitignore and .codeignore files by default when using ripgrep."
"Respects .gitignore and .ignore files by default when using ripgrep."
)
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The description still mentions ".gitignore and .codeignore files" but the field was renamed to ignore_file with a different default value. Update the description to reflect the current implementation: "Respects .gitignore and .revibeignore files by default when using ripgrep."

Copilot uses AI. Check for mistakes.
name="zai-org/GLM-4.7-FP8",
name="zai-org/GLM-4.7",
provider="huggingface",
alias="glm-4.7",
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The model name was changed from "zai-org/GLM-4.7-FP8" to "zai-org/GLM-4.7", removing the "-FP8" suffix. This could be a breaking change if users have this model configured. Consider documenting this change in the CHANGELOG under a "Breaking Changes" section, and potentially providing migration guidance.

Suggested change
alias="glm-4.7",
alias="glm-4.7-fp8",

Copilot uses AI. Check for mistakes.
metavar="NAME",
default=None,
help="Load agent configuration from ~/.vibe/agents/NAME.toml",
help="Load agent configuration from ~/.revibe/agents/NAME.toml",
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The help message mentions "~/.revibe/agents/NAME.toml" for agent configuration, but this is buried in a command-line help text. Consider ensuring that this path is documented prominently in the README or a dedicated configuration guide, especially since this is part of a major rebrand from ".vibe" to ".revibe".

Suggested change
help="Load agent configuration from ~/.revibe/agents/NAME.toml",
help=(
"Load agent configuration from ~/.revibe/agents/NAME.toml "
"(replaces the legacy ~/.vibe/agents directory)."
),

Copilot uses AI. Check for mistakes.
description="Name of the file to read for additional exclusion patterns.",
ignore_file: str = Field(
default=".revibeignore",
description="Path to a file containing ignore patterns (glob format).",
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The configuration field codeignore_file was renamed to ignore_file but the default value changed from ".vibeignore" to ".revibeignore". Consider documenting this migration path for existing users, as files named ".vibeignore" will no longer be recognized after this change.

Suggested change
description="Path to a file containing ignore patterns (glob format).",
description=(
"Path to a file containing ignore patterns (glob format). "
"Previously this was configured via `codeignore_file` and "
"defaulted to `.vibeignore`. If you have an existing `.vibeignore` "
"file, either rename it to `.revibeignore` or set `ignore_file` "
"explicitly to `.vibeignore` for backward compatibility."
),

Copilot uses AI. Check for mistakes.
Comment on lines +160 to +192
async def _fetch_models_from_provider(
self, provider: ProviderConfigUnion, existing_names: set[tuple[str, str]]
) -> bool:
"""Fetch models from a single provider. Returns True if any models were added."""
from revibe.core.llm.backend.factory import BACKEND_FACTORY

try:
backend_cls = BACKEND_FACTORY.get(provider.backend)
if not backend_cls:
return False

model_names = await backend_cls(provider=provider).list_models()
if not model_names:
return False

added_any = False
for name in model_names:
key = (provider.name, name)
if key not in existing_names:
self.models.append(
ModelConfig(
name=name,
provider=provider.name,
alias=name,
)
)
existing_names.add(key)
added_any = True

return added_any
except Exception:
# Ignore failures per-provider so one bad provider doesn't block others
return False
Copy link

Copilot AI Dec 30, 2025

Choose a reason for hiding this comment

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

The extraction of _build_provider_map, _get_providers_to_query, _fetch_models_from_provider, and _fetch_models_from_providers helper methods improves maintainability significantly. However, _fetch_models_from_provider now doesn't use an async context manager for the backend, which could cause resource leaks if the backend needs cleanup. The old implementation used async with backend_cls(provider=provider) as backend:. Verify that backends properly implement cleanup in __aenter__ and __aexit__, or restore the context manager usage.

Copilot uses AI. Check for mistakes.
@OEvortex OEvortex deleted the xlm/tools branch January 2, 2026 09:58
@OEvortex OEvortex review requested due to automatic review settings March 23, 2026 21:58
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