Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 8 additions & 28 deletions .github/workflows/code-qa.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,26 +28,15 @@ jobs:
- name: Dependency review
uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5.0.0

invisible-chars:
static-analysis:
runs-on: ubuntu-latest
# Reject invisible / homoglyph Unicode that GitHub's diff UI renders
# invisibly and most editors hide. These compile fine, which is the
# risk: identifier-splitting, string-literal injection, and the
# "Trojan Source" bidi-override attack (U+202A-U+202E). Scanning raw
# bytes catches them in strings, identifiers, and comments alike.
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
with:
# This job never pushes — don't persist the GITHUB_TOKEN.
persist-credentials: false
- name: Reject invisible / homoglyph Unicode
run: |
# zero-width (U+200B-200F), word joiner (U+2060), BOM (U+FEFF),
# bidi overrides (U+202A-202E), soft hyphen (U+00AD).
# Covers source, release-adjacent executable scripts
# (*.sh / *.cjs / *.cts / *.mts), and the executable shell
# blocks inside GitHub workflow/action YAML.
if grep -rnP '[\x{200B}-\x{200F}\x{202A}-\x{202E}\x{2060}\x{FEFF}\x{00AD}]' \
--include='*.ts' --include='*.tsx' --include='*.js' --include='*.mjs' \
--include='*.cjs' --include='*.cts' --include='*.mts' --include='*.sh' \
Expand All @@ -58,16 +47,12 @@ jobs:
echo "::error::Found invisible or homoglyph Unicode characters (zero-width / bidi-override / BOM / soft hyphen)"
exit 1
fi

check-translations:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
- name: Verify all translations are complete
run: node scripts/find-missing-translations.js
- name: Run knip checks
run: pnpm knip

audit-dependencies:
runs-on: ubuntu-latest
Expand All @@ -79,16 +64,6 @@ jobs:
- name: Run pnpm audit
run: pnpm audit --audit-level=high

knip:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
- name: Setup Node.js and pnpm
uses: ./.github/actions/setup-node-pnpm
- name: Run knip checks
run: pnpm knip

compile:
runs-on: ubuntu-latest
steps:
Expand All @@ -115,6 +90,11 @@ jobs:
name: windows-latest
codecov-flag: windows
upload-coverage: false
# Windows runners are only triggered on manual dispatch because they
# are significantly slower than Linux runners and provide marginal
# additional signal for unit-test feedback. Linux coverage already
# provides sufficient confidence for automated CI runs.
if: ${{ matrix.os != 'windows-latest' || github.event_name == 'workflow_dispatch' }}
steps:
- name: Checkout code
uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4
Expand Down
321 changes: 90 additions & 231 deletions .roomodes

Large diffs are not rendered by default.

31 changes: 27 additions & 4 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,32 @@
# Roo+ Changelog

## [3.75.1] — 2026-07-29

### Patch — Zoo Gateway Removal & Full CI Pipeline Cleanup

#### 🐛 Bug Fixes

- **Zoo Gateway Provider Fully Removed** — Deleted 8 unused Zoo Gateway files (provider, fetcher, auth service, credentials sync, 3 webview UI components, 1 hook). Pruned stale type references in `modelCache.ts`. Removed `getZooCodeAuthUrl` from webview OAuth URLs. (Closes: #81)
- **Test Suite Cleanup** — Removed 4 empty test stubs leftover from Zoo Gateway removal; rewrote `handleUri.spec.ts` for simplified `/auth-callback` handler; removed stale `zoo-gateway` references from `ClineProvider.spec.ts` and `webviewMessageHandler.spec.ts` router model tests; removed stale `roo-plus-auth` mocks from both files
- **Semble Provider Test Fixed** — Added `extensionPath` to mock context so `downloadSemble`'s third parameter matches reality
- **Knip Cleanup** — Added `ignoreBinaries: ["build"]` to knip config to fix "unlisted binaries" error

#### ✅ Quality

- **knip** passes (0 error-level issues) after removing 8 unused files
- **Lint** passes (0 errors, 0 warnings) after pruning stale eslint suppressions
- **Type checks** pass across all 13 packages
- **All 6992 source tests pass** (420 files), 38 skipped — zero failures
- Invisible-chars, translation, and dependency audit CI checks all pass

#### 🔧 Chores

- Pruned stale eslint suppressions with `--prune-suppressions`
- Removed unused `validateApiConfiguration` import from webview-ui test
- Updated CHANGELOG.md and synced to src/CHANGELOG.md

---

## [3.75.0] — 2026-07-28

### Minor — Bulk Install Modes in Marketplace
Expand All @@ -20,10 +47,6 @@
- 12 source files modified, 1 new file created (`BulkInstallModal.tsx`)
- 2 locale files updated (en backend + en frontend)

#### Co-Authors

- Hanneke de Vries <dhanneke204@gmail.com>

---

## [3.74.0] — 2026-07-27
Expand Down
108 changes: 108 additions & 0 deletions DEBT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
# Roo+ Technical Debt Register

This document tracks known technical debt, areas for improvement, and maintenance tasks that have been deferred or are in progress.

---

## 🔴 High Priority

### 1. CLI `README.md` References Upstream Repository

**Location**: [`apps/cli/README.md`](apps/cli/README.md)
**Issue**: The CLI README still references `https://github.com/RooCodeInc/Roo-Code` (upstream Zoo Code) for installation scripts, links, and documentation. As a fork, Roo+ should either mirror the CLI install infrastructure or clearly document the fork divergence.
**Impact**: Users following the CLI install script may end up installing upstream Zoo Code instead of Roo+.
**Suggested Fix**: Either:

- Fork the install script to the Roo+ org and update URLs, or
- Add a clear warning that the CLI README is inherited from upstream and the install script points to Zoo Code.

### 2. Upstream Merge Drift

**Location**: [`Merge upstream/main into master (sync fork)`](https://github.com/xavier-arosemena/roo-plus/commits/master)
**Issue**: The fork has diverged significantly from upstream Zoo Code. Each merge requires resolving conflicts across 50+ files. The `Merge remote-tracking branch 'origin/master'` pattern in git history shows manual merge overhead.
**Impact**: Integrating upstream security fixes and features requires significant manual effort per merge.
**Suggested Fix**: Consider using `git merge --squash` for upstream syncs, or set up automated merge conflict detection.

---

## 🟡 Medium Priority

### 3. Package CHANGELOGs Out of Sync

**Locations**:

- [`packages/types/CHANGELOG.md`](packages/types/CHANGELOG.md) — Only contains `0.0.1` with one change
- [`packages/core/CHANGELOG.md`](packages/core/CHANGELOG.md) — Only contains `0.0.1`
- [`packages/ipc/CHANGELOG.md`](packages/ipc/CHANGELOG.md) — Only contains `0.0.1`
- [`packages/telemetry/CHANGELOG.md`](packages/telemetry/CHANGELOG.md) — Only contains `0.0.1`

**Issue**: Shared package CHANGELOGs (types, core, ipc, telemetry) are stubs with `0.0.1` version and minimal entries. These packages receive regular changes but their changelogs are not maintained.
**Impact**: Developers and downstream consumers of these packages cannot track historical changes.
**Suggested Fix**: Automate changelog generation for packages using changesets or a commit-based generator.

### 4. `apps/cli/CHANGELOG.md` Stale Since March 2026

**Location**: [`apps/cli/CHANGELOG.md`](apps/cli/CHANGELOG.md)
**Issue**: The CLI changelog stops at `0.1.17` (2026-03-04). Multiple CLI features (zoo command, autonomous orchestrator, autonomous mode coverage) have been added since but are not documented.
**Impact**: CLI users cannot track what's new.
**Suggested Fix**: Audit CLI commits since March 2026 and update the changelog, or automate from git history.

### 5. Duplicate README Files

**Locations**: [`README.md`](README.md) and [`src/README.md`](src/README.md)
**Issue**: The root and `src/` README files are nearly identical (both document the full custom modes library, project structure, etc.). The `src/` copy exists because VS Code extension packaging includes `src/` as the root. However, this creates a maintenance burden — both must be updated in lockstep.
**Impact**: Documentation drift is likely; the `src/` copy was already behind the root on the Option 0 marketplace instructions.
**Suggested Fix**: Consider consolidating the `src/README.md` to reference the root README, or add a build step that copies `README.md` → `src/README.md`.

---

## 🟢 Low Priority

### 6. CI Test Coverage Threshold

**Issue**: While test counts are reported in changelogs (e.g., "All 7087 source tests pass"), there is no CI-enforced minimum code coverage threshold.
**Impact**: Coverage could regress between releases without visibility.
**Suggested Fix**: Add a `coverage` threshold in vitest config (e.g., 80% branch coverage) and enforce in CI.

### 7. Locale README Files Out of Sync

**Locations**: `locales/*/README.md` (17 locale directories)
**Issue**: Localized README files exist but are not maintained in lockstep with the English root README. The agent count, feature list, and installation instructions may be stale in non-English READMEs.
**Impact**: Non-English users may see outdated documentation.
**Suggested Fix**: Add a CI check that compares locale README structure against the English README, or generate locale READMEs from templates.

### 8. `scripts/` Directory Documentation

**Location**: `scripts/` directory
**Issue**: Several utility scripts exist (`bundle-semble.sh`, `sync-custom-modes.mjs`, `generate-catalog.mjs`, `find-missing-i18n-key.js`, etc.) but there is no single document explaining what each script does, when to run it, and its dependencies.
**Impact**: New contributors and maintainers must read script source to understand purpose.
**Suggested Fix**: Add a `scripts/README.md` with a table of scripts, their purpose, and usage.

### 9. `.roomodes` Is Auto-Generated but Committed

**Location**: [`.roomodes`](.roomodes)
**Issue**: The `.roomodes` file is auto-generated by `scripts/sync-custom-modes.mjs` but is committed to the repository. This is intentional (ensures pre-loaded modes are versioned), but there's no CI check that `.roomodes` is in sync with `custom-modes/manifest.json` and agent YAMLs.
**Impact**: The committed `.roomodes` could drift from the manifest, causing mode inconsistencies.
**Suggested Fix**: Add a CI step that runs `sync:custom-modes` in dry-run mode and fails if `.roomodes` would change.

### 10. Hardcoded `SEMBLE_VERSION` in Downloader

**Location**: [`src/services/code-index/semble/semble-downloader.ts`](src/services/code-index/semble/semble-downloader.ts)
**Issue**: The semble binary version is hardcoded as a constant. While a "latest" mode and configurable binary path were added in v3.72.1, the default version is still a compile-time constant.
**Impact**: Version bumps require a source code change even when "latest" mode is available as an opt-in.
**Suggested Fix**: Make "latest" the default behavior for the semble download version.

---

## ✅ Recently Resolved Debt

| Debt | Resolution | Version |
| ---------------------------------------------------- | ------------------------------------------------------------------------ | ------- |
| Roo Code Cloud dead code (`packages/cloud/`) | Removed entirely (~400 lines) | v3.74.0 |
| Semble binary download 404 (hardcoded single source) | Added multi-source fallback, configurable binary path, checksum manifest | v3.72.1 |
| 46 Dependabot advisories + 7 code scanning alerts | Resolved via dependency updates and code fixes | v3.72.0 |
| Dead code and unused exports | Knip configured and dead code removed | v3.72.0 |
| "Zoo's Changes" in diff tab (rebrand incomplete) | Renamed to "Roo+'s Changes" | v3.70.3 |
| Mode Marketplace not documented as primary install | READMEs updated with marketplace instructions | v3.70.2 |
| Pre-installed modes not seeded on first activation | Bundled `pre-installed-modes.yml` and seeded on first run | v3.70.1 |
| Sync-custom-modes not in VSIX build pipeline | Integrated into `vscode:prepublish` | v3.70.1 |
32 changes: 19 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,18 @@

Roo+ extends the incredible foundation of Zoo Code with **90 custom modes** (curated from a total of 233 specialized agents available), **enhanced features**, and a personalized configuration tailored for modern development workflows.

| Feature | Description |
| ----------------------------- | --------------------------------------------------------------- |
| 🎯 **Custom Modes Library** | **90 specialized agents** pre-loaded for every task |
| 🤖 **AI Agent Team** | Multiple AI agents working together in your editor |
| 🔌 **MCP Support** | Full Model Context Protocol integration |
| 🌍 **Multi-Provider** | Works with Anthropic, OpenAI, Gemini, Ollama, and 25+ providers |
| 🛠️ **Terminal Integration** | Smart terminal with shell integration |
| 📁 **Tree-Sitter Code Index** | Intelligent code understanding for 30+ languages |
| 🔒 **Atomic File Writing** | Safe, crash-proof file operations |
| 🌐 **Localization** | Available in 18+ languages |
| Feature | Description |
| ----------------------------- | -------------------------------------------------------------------------------------------------------------------------- |
| 🎯 **Custom Modes Library** | **90 specialized agents** pre-loaded for every task |
| 🤖 **AI Agent Team** | Multiple AI agents working together in your editor |
| 🔌 **MCP Support** | Full Model Context Protocol integration |
| 🌍 **Multi-Provider** | Works with Anthropic, OpenAI, Gemini, Ollama, and 25+ providers |
| 📦 **Bulk Mode Install** | Install multiple modes at once from the Mode Marketplace with checkboxes, scope selection, and progress tracking (v3.75.0) |
| 🏷️ **Mode Subtitles** | All 97 pre-loaded modes display descriptive subtitles in the mode selector UI (v3.73.0) |
| 🛠️ **Terminal Integration** | Smart terminal with shell integration |
| 📁 **Tree-Sitter Code Index** | Intelligent code understanding for 30+ languages |
| 🔒 **Atomic File Writing** | Safe, crash-proof file operations |
| 🌐 **Localization** | Available in 18+ languages |

<br/>

Expand Down Expand Up @@ -152,11 +154,15 @@ The quickest way to add new modes is directly from the **Mode Marketplace** insi

1. Click the **Mode Marketplace** button in the mode selector (bottom of the VS Code window) or the marketplace tab
2. Browse available modes — search by name, filter by tags, or sort by popularity
3. Click **Install** on any mode you want to add, or **select multiple modes** with checkboxes and click **Install N Modes** to install them all at once
4. Choose whether to install **globally** (available in all projects) or to the **current project**
3. For single installs — click **Install** on any mode you want to add
4. For **bulk installs** (v3.75.0+) — switch to the **Modes** tab, select multiple modes with checkboxes, and click **Install N Modes** to install them all at once
- A sticky action bar shows the selection count
- Choose installation **scope**: global (all projects) or project-only
- A progress bar tracks each installation step
- A result summary shows per-item success/failure
5. The mode(s) are immediately available in your mode selector — no reload needed

The marketplace also supports **MCP servers** and includes bundled modes from the curated 233-agent library. For bulk operations, switch to the **Modes** tab where checkboxes enable multi-select for batch installation.
The marketplace also supports **MCP servers** and includes bundled modes from the curated 233-agent library.

**Option A — Add via manifest (recommended for multiple agents):**

Expand Down
Loading
Loading