repo-nexus 0.6.16 → 0.7.0
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.
- package/CHANGELOG.md +22 -20
- package/README.md +13 -2
- package/docs/CLI.md +93 -0
- package/docs/FAQ.md +180 -0
- package/docs/ai-instructions.sample.md +25 -0
- package/docs/cli/index.md +4 -4
- package/docs/cli/tooling.md +3 -2
- package/docs/cli/workspace.md +27 -39
- package/docs/examples/local-overrides.md +2 -2
- package/docs/faq/index.md +1 -1
- package/docs/guide/architecture.md +1 -1
- package/docs/guide/configuration.md +4 -4
- package/docs/guide/workflows.md +1 -1
- package/docs/plugins/authoring.md +2 -2
- package/docs/plugins/index.md +2 -2
- package/docs/plugins/karpathy-llm.md +25 -25
- package/docs/rnex.example.yaml +160 -0
- package/lib/ai.sh +62 -41
- package/lib/commands/completion.sh +52 -7
- package/lib/commands/init.sh +6 -1
- package/lib/commands/plugin.sh +5 -5
- package/lib/commands/status.sh +38 -7
- package/lib/commands/sync.sh +135 -285
- package/lib/commands/system.sh +22 -8
- package/lib/core.sh +4 -4
- package/lib/hooks.sh +175 -56
- package/lib/plugins.sh +9 -5
- package/lib/repos.sh +5 -1
- package/lib/workspace.sh +39 -0
- package/package.json +3 -3
- package/rnex +39 -16
- package/templates/ai-instructions.sample.md +25 -0
- package/templates/rnex.example.yaml +5 -5
- package/toolkit/plugins/karpathy-llm/README.md +30 -29
- package/toolkit/plugins/karpathy-llm/agents/rnex-wiki-curator.agent.md +1 -1
- package/toolkit/plugins/karpathy-llm/hooks/after_init.sh +6 -0
- package/toolkit/plugins/karpathy-llm/hooks/after_sync.sh +76 -0
- package/toolkit/plugins/karpathy-llm/hooks/git_post-commit.sh +51 -0
- package/toolkit/plugins/karpathy-llm/hooks/git_post-merge.sh +51 -0
- package/toolkit/plugins/karpathy-llm/hooks/git_pre-commit.sh +51 -0
- package/toolkit/plugins/karpathy-llm/hooks/git_pre-push.sh +49 -0
- package/toolkit/plugins/karpathy-llm/instructions/rnex-scaffolding-meta-prompt.md +16 -16
- package/toolkit/plugins/karpathy-llm/instructions/rnex-wiki-architecture.md +4 -4
- package/toolkit/plugins/karpathy-llm/instructions.md +48 -0
- package/toolkit/plugins/karpathy-llm/plugin.yaml +9 -4
- package/toolkit/plugins/karpathy-llm/skills/rnex-wiki-ingest/SKILL.md +3 -3
- package/toolkit/plugins/karpathy-llm/skills/rnex-wiki-lint/SKILL.md +4 -4
- package/toolkit/plugins/karpathy-llm/workflows/rnex-wiki-ingest.md +5 -5
- package/toolkit/plugins/karpathy-llm/workflows/rnex-wiki-lint.md +4 -4
- package/toolkit/prompts/rnex-workspace-audit.md +1 -1
- package/toolkit/skills/rnex-workspace-audit/SKILL.md +1 -1
- package/toolkit/workflows/rnex-workspace-audit.md +1 -1
- package/lib/commands/fix.sh +0 -7
- package/templates/AGENTS.sample.md +0 -17
package/CHANGELOG.md
CHANGED
|
@@ -7,28 +7,30 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
10
|
+
## [0.6.16] - 2026-10-14
|
|
11
|
+
|
|
12
|
+
### Removed
|
|
13
|
+
- **`rnex fix` and `rnex status --fix`**: Removed in favor of `rnex sync` as the sole reconciliation command.
|
|
14
|
+
- **Legacy Sample Instructions**: Removed `docs/AGENTS.sample.md` and replaced it with `docs/ai-instructions.sample.md` (and root `templates/ai-instructions.sample.md`).
|
|
15
|
+
- **Core Plugin Decoupling**: Removed all hardcoded plugin references from `./rnex` core so the CLI is strictly plugin-agnostic.
|
|
16
16
|
|
|
17
17
|
### Added
|
|
18
|
-
- **
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
18
|
+
- **Plugin Lifecycle Hooks & Contract**: Added `before_<cmd>` and `after_<cmd>` hook execution across all mutating commands (`init`, `install`, `add`, `clone`, `exec`, `remove`, `enable`, `disable`, `rnex-dir`, `sync`, `update`, `hooks`, `plugin`) while bypassing read-only commands (`status`, `list`, `completion`).
|
|
19
|
+
- **Compiled AI Instructions (`.rnex/ai-instructions.md`)**: `rnex sync` now compiles a unified instruction file inside `.rnex/` from the merged 2-level config (`rnex.yaml` + `.local.rnex.yaml`), base AI instructions template, and active plugin fragments.
|
|
20
|
+
- **Event-Driven Auto-Sync**: Added checksum-based config drift detection (`.rnex/.sync_stamp`) that automatically runs `rnex sync --quiet` on any `rnex` CLI command or new AI session start without background file watchers. Includes shell prompt hook (`_rnex_auto_sync`) in `rnex completion` and Git hooks (`post-merge`, `post-checkout`, `pre-commit`).
|
|
21
|
+
- **Contribution Guide**: Added `CONTRIBUTION.md` documenting POSIX shell standards, plugin contract rules, and test workflows.
|
|
22
|
+
- **Modular Test Suite Architecture**: Decomposed monolithic test runner into modular test suites under `tests/suites/` (`01_core_cli.sh` through `06_plugins_advanced.sh`) with shared harness `tests/test_helper.sh`.
|
|
23
|
+
- **Maintainer Release Hooks Relocation**: Relocated maintainer Git hooks from `.githooks/` into `scripts/githooks/` to ensure workspace root strictly encapsulates internal state in `.rnex/`.
|
|
24
|
+
|
|
25
|
+
### Changed
|
|
26
|
+
- **`rnex sync` Scope**: Synchronizes `rnex-*` prompts from `toolkit/prompts/` and `.rnex/` directories in both the nexus root and enabled member repositories (`repos/<name>/.rnex/`).
|
|
27
|
+
- **Root AI Provider Files (`AGENTS.md`, `CLAUDE.md`)**: Simplified to contain only a single strict directive instructing agents to read and follow `.rnex/ai-instructions.md`.
|
|
28
|
+
- **`karpathy-llm` Plugin Defaults & Hooks**: Migrated `karpathy-llm` to lifecycle hooks and changed default paths from `/wiki/` to `.rnex/wiki` (curated knowledge base) and from `/raw/` to `./docs` (raw intake).
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
- Unified GitHub repository URLs across `README.md`, `scripts/install.sh`, and the documentation site to canonical `unoxen/repo-nexus`.
|
|
32
|
+
- Removed legacy `symlinks` references from repository metadata.
|
|
33
|
+
|
|
32
34
|
|
|
33
35
|
## [0.6.7] - 2026-10-12
|
|
34
36
|
|
package/README.md
CHANGED
|
@@ -14,7 +14,7 @@ A **simple, lightweight Virtual Meta-Repo companion** for multi-repo workspaces
|
|
|
14
14
|
- **Two-Level Configuration as Source of Truth**: Shared team manifest in `rnex.yaml` with machine-specific overrides in `.local.rnex.yaml` (highest priority).
|
|
15
15
|
- **One Command Team Onboarding**: Teammates clone the meta-repo and run `rnex clone` to clone and configure all member repos in seconds.
|
|
16
16
|
- **Cross-Repo Batch Operations**: Run arbitrary commands across all active repositories with `rnex exec <command>`.
|
|
17
|
-
- **Scoped Plugins & Context Packs**: Modular plugin packages scoped under `.rnex/plugins/<plugin-name>/` with support for domain directories (e.g. `
|
|
17
|
+
- **Scoped Plugins & Context Packs**: Modular plugin packages scoped under `.rnex/plugins/<plugin-name>/` with support for domain directories (e.g. `.rnex/wiki` and `./docs` for `karpathy-llm`).
|
|
18
18
|
- **Zero Dependencies**: Pure POSIX shell CLI (`rnex`). Works out of the box across macOS, Linux, and Windows (WSL/Git Bash).
|
|
19
19
|
|
|
20
20
|
> 📖 **Documentation & Guides**
|
|
@@ -38,6 +38,7 @@ A **simple, lightweight Virtual Meta-Repo companion** for multi-repo workspaces
|
|
|
38
38
|
- [Quick Start](#quick-start)
|
|
39
39
|
- [Project Structure](#project-structure)
|
|
40
40
|
- [Running Tests](#running-tests)
|
|
41
|
+
- [Contributing](#contributing)
|
|
41
42
|
- [License](#license)
|
|
42
43
|
|
|
43
44
|
---
|
|
@@ -137,8 +138,9 @@ repo-nexus/
|
|
|
137
138
|
├── rnex # CLI executable (POSIX shell)
|
|
138
139
|
├── AGENTS.md # Routing-only universal AI instructions
|
|
139
140
|
├── CHANGELOG.md # Release history and migration notes
|
|
141
|
+
├── CONTRIBUTION.md # POSIX standards, testing setup, and plugin contract
|
|
140
142
|
├── templates/
|
|
141
|
-
│ ├──
|
|
143
|
+
│ ├── ai-instructions.sample.md # Base template for .rnex/ai-instructions.md
|
|
142
144
|
│ └── rnex.example.yaml # Full config reference with examples
|
|
143
145
|
├── docs/
|
|
144
146
|
│ ├── guide/ # Architecture, workflows, and getting started
|
|
@@ -148,6 +150,9 @@ repo-nexus/
|
|
|
148
150
|
│ └── faq/ # Frequently Asked Questions
|
|
149
151
|
├── .github/
|
|
150
152
|
│ └── workflows/ci.yml # GitHub Actions CI workflow
|
|
153
|
+
├── scripts/
|
|
154
|
+
│ ├── install.sh # Zero-dependency standalone installer
|
|
155
|
+
│ └── githooks/ # Repository maintainer release hooks
|
|
151
156
|
├── tests/
|
|
152
157
|
│ ├── test_cli.sh # Main test runner
|
|
153
158
|
│ ├── test_helper.sh # Shared test harness and utilities
|
|
@@ -170,6 +175,12 @@ repo-nexus/
|
|
|
170
175
|
|
|
171
176
|
---
|
|
172
177
|
|
|
178
|
+
## Contributing
|
|
179
|
+
|
|
180
|
+
Contributions are welcome! Please read [CONTRIBUTION.md](CONTRIBUTION.md) for coding standards (pure POSIX shell, ShellCheck compliance), local development & maintainer Git hooks setup, automated test workflows, and plugin authoring guidelines.
|
|
181
|
+
|
|
182
|
+
---
|
|
183
|
+
|
|
173
184
|
## License
|
|
174
185
|
|
|
175
186
|
[MIT](LICENSE)
|
package/docs/CLI.md
ADDED
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Repo Nexus (`rnex`) — Command Line Interface Reference
|
|
2
|
+
|
|
3
|
+
Lightweight zero-dependency Virtual Meta-Repo companion for multi-repo workspaces and shared AI context.
|
|
4
|
+
|
|
5
|
+
## Core Commands
|
|
6
|
+
|
|
7
|
+
| Command | Syntax | Description |
|
|
8
|
+
|:---|:---|:---|
|
|
9
|
+
| `init` | `rnex init [-y] [--claude] [--copilot] [--gemini] [--cursor] [--windsurf] [--code-workspace]` | Initialize a new workspace, create `rnex.yaml`, `.rnex/`, `.ignore`, and minimal AI instructions. |
|
|
10
|
+
| `sync` | `rnex sync [-y] [--quiet]` | **Single reconciliation command**: syncs prompts, `.rnex/` harness, plugins, and compiles `.rnex/ai-instructions.md`. |
|
|
11
|
+
| `status` | `rnex status` | **Strictly read-only**: inspect workspace health, active repos, loaded config, git hooks, sync stamp, and plugins. |
|
|
12
|
+
| `add` | `rnex add <name> <git-url> [--local]` | Register a new member repository and clone into `./repos/<name>`. |
|
|
13
|
+
| `clone` | `rnex clone` | Clone all declared member repositories missing from disk. |
|
|
14
|
+
| `exec` | `rnex exec <command>` | Run an arbitrary shell command across all active member repositories. |
|
|
15
|
+
| `list` | `rnex list` | List all member repositories and their active status. |
|
|
16
|
+
| `enable` | `rnex enable <name> [--local]` | Enable a member repository in active workspace. |
|
|
17
|
+
| `disable` | `rnex disable <name> [--local]` | Disable a member repository in active workspace. |
|
|
18
|
+
| `remove` | `rnex remove <name> [-y]` | Unregister repository and remove its clone from disk. |
|
|
19
|
+
| `rnex-dir`| `rnex rnex-dir <enable\|disable> <name>` | Toggle `.rnex/` harness inside a member repository. |
|
|
20
|
+
| `update` | `rnex update [-y] [--quiet]` | Check configuration version and upgrade to latest schema (delegates to `sync`). |
|
|
21
|
+
| `hooks` | `rnex hooks <install\|uninstall\|status>` | Manage automated workspace Git hooks. |
|
|
22
|
+
| `plugin` | `rnex plugin <list\|info\|enable\|disable\|update>` | Manage workspace plugins. |
|
|
23
|
+
| `completion` | `rnex completion <bash\|zsh\|fish>` | Generate shell completions with event-driven auto-sync hooks. |
|
|
24
|
+
|
|
25
|
+
---
|
|
26
|
+
|
|
27
|
+
## Reconciliation Command: `rnex sync`
|
|
28
|
+
|
|
29
|
+
`rnex sync` is the sole reconciliation command (`rnex fix` and `rnex status --fix` have been removed).
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
rnex sync [-y|--yes] [-q|--quiet]
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### Reconciliation Actions
|
|
36
|
+
1. **Config Version Upgrade**: Detects schema drift and non-destructively upgrades `rnex.yaml` if older than the installed CLI version.
|
|
37
|
+
2. **Git Ignore & Search Indexing**: Reconciles `.gitignore` (ignoring `repos/*` and `.local.rnex.yaml`) and `.ignore` (un-ignoring `repos/*` for search tools).
|
|
38
|
+
3. **Plugin Sync**: Prunes disabled plugins and deterministically copies enabled plugin assets, rules, workflows, templates, and executable lifecycle hooks into `.rnex/plugins/<plugin-name>/`.
|
|
39
|
+
4. **Compiled AI Instructions**: Compiles `.rnex/ai-instructions.md` by combining the base template with active configuration and all enabled plugin `instructions.md` fragments. Top-level provider files (`AGENTS.md`, `CLAUDE.md`, etc.) receive only a single strict directive pointing to `.rnex/ai-instructions.md`.
|
|
40
|
+
5. **Prompt Sync**: Copies all operational prompts matching `rnex-*` from `toolkit/prompts/` into configured AI assistant directories (Claude, Gemini, Cursor, Windsurf, Copilot) and workspace prompt directories.
|
|
41
|
+
6. **Harness Sync**: Reconciles root `.rnex/` and member repository harnesses (`repos/<name>/.rnex/`) for all enabled member repositories where `rnex_dir: true`.
|
|
42
|
+
7. **Git Hooks**: Installs or reconciles workspace Git hooks in `.rnex/hooks` when `git_hooks: true`.
|
|
43
|
+
8. **Multi-Root Workspace**: Synchronizes `.code-workspace` folder mappings when `code_workspace: true`.
|
|
44
|
+
9. **Event-Driven Auto-Sync Scripts & Stamp**: Generates `.rnex/bin/auto-sync.sh` and updates `.rnex/.sync_stamp`.
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Plugin Contract & Lifecycle Hooks
|
|
49
|
+
|
|
50
|
+
Repo Nexus core is 100% agnostic of specific plugins. All mutating commands dispatch lifecycle hooks before and after execution.
|
|
51
|
+
|
|
52
|
+
### Action Command Hook Dispatcher
|
|
53
|
+
All state-changing commands (`init`, `add`, `clone`, `exec`, `remove`, `enable`, `disable`, `rnex-dir`, `sync`, `update`, `hooks`, `plugin`) trigger:
|
|
54
|
+
- `before_<cmd>` hook
|
|
55
|
+
- `after_<cmd>` hook
|
|
56
|
+
|
|
57
|
+
Read-only commands (`status`, `list`, `completion`, `--help`, `--version`) bypass lifecycle hooks.
|
|
58
|
+
|
|
59
|
+
### Plugin Manifest & File Layout
|
|
60
|
+
Plugins are authored in `toolkit/plugins/<plugin-name>/` and synced into `.rnex/plugins/<plugin-name>/`:
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
toolkit/plugins/<plugin-name>/
|
|
64
|
+
├── plugin.yaml # Manifest (name, version, description, default config)
|
|
65
|
+
├── instructions.md # Optional AI instruction fragment merged during rnex sync
|
|
66
|
+
├── hooks/ # POSIX /bin/sh hook scripts (chmod +x)
|
|
67
|
+
│ ├── after_sync.sh # Executes after workspace reconciliation
|
|
68
|
+
│ ├── after_init.sh # Executes after workspace initialization
|
|
69
|
+
│ └── before_remove.sh # Executes before member repo removal
|
|
70
|
+
├── rules/ # AI assistant behavioral rules
|
|
71
|
+
├── workflows/ # Standardized agent workflow procedures
|
|
72
|
+
└── templates/ # Default files and scaffold templates
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Environment Context Passed to Hooks
|
|
76
|
+
Every lifecycle hook receives the following environment variables:
|
|
77
|
+
|
|
78
|
+
| Variable | Description |
|
|
79
|
+
|:---|:---|
|
|
80
|
+
| `RNEX_ROOT` | Absolute path to the Repo Nexus workspace root directory. |
|
|
81
|
+
| `RNEX_CONFIG_MERGED` | Path to the active workspace configuration (`rnex.yaml`). |
|
|
82
|
+
| `RNEX_PLUGIN_DIR` | Path to the scoped plugin directory (`.rnex/plugins/<plugin-name>`). |
|
|
83
|
+
| `RNEX_CMD` | The command being executed (e.g., `sync`, `init`, `add`). |
|
|
84
|
+
| `RNEX_ARGS` | Arguments passed to the command. |
|
|
85
|
+
| `RNEX_QUIET` | Set to `1` when `--quiet` was passed, `0` otherwise. |
|
|
86
|
+
|
|
87
|
+
### Karpathy LLM Wiki Plugin
|
|
88
|
+
The `karpathy-llm` plugin uses lifecycle hooks to manage its domain directories:
|
|
89
|
+
- **Default curated knowledge base (`wiki_dir`)**: `.rnex/wiki`
|
|
90
|
+
- **Default append-only raw intake (`raw_dir`)**: `./docs`
|
|
91
|
+
- **Master navigation index**: `.rnex/wiki/index.md`
|
|
92
|
+
- **Rolling orientation cache**: `.rnex/wiki/hot.md`
|
|
93
|
+
- **Operation log**: `.rnex/wiki/_log.md`
|
package/docs/FAQ.md
ADDED
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Frequently Asked Questions
|
|
3
|
+
description: Comprehensive FAQ for Repo Nexus, covering architecture, Git internals, submodule pitfalls, two-level config, AI context routing, and system requirements.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Frequently Asked Questions (FAQ)
|
|
7
|
+
|
|
8
|
+
This document answers common architectural, operational, and technical questions about **Repo Nexus (`rnex`)**, why it exists, how it works as a **Virtual Meta-Repo for AI Agents**, how it handles Git autonomy, and how to use it effectively.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
## General Setup & Philosophy
|
|
13
|
+
|
|
14
|
+
### What is repo-nexus?
|
|
15
|
+
|
|
16
|
+
It is a zero-dependency **Virtual Meta-Repo companion** that organizes multiple independent Git repositories into a unified development workspace with shared AI routing context.
|
|
17
|
+
|
|
18
|
+
---
|
|
19
|
+
|
|
20
|
+
### How does it differ from traditional monorepo orchestrators?
|
|
21
|
+
|
|
22
|
+
Unlike heavy monorepo tools (such as Nx, Turborepo, or Bazel) that take over build pipelines, require unified lockfiles, and impose cross-package dependency graphs, `repo-nexus` acts strictly as an architectural companion. It does not replace your compiler, test runner, package manager, or build tooling.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
### Does it require Git Submodules?
|
|
27
|
+
|
|
28
|
+
**No.** Member repositories are physically cloned into `./repos/<name>`. The workspace root `.gitignore` strictly ignores `repos/`. Each repository remains a 100% normal, autonomous Git repository with its own `.git` directory, remotes, branches, and commit history. There are no `.gitmodules`, no detached HEADs, and no submodule pointer commits.
|
|
29
|
+
|
|
30
|
+
---
|
|
31
|
+
|
|
32
|
+
### Why do I need rnex?
|
|
33
|
+
|
|
34
|
+
Modern AI coding assistants (Claude Code, Cursor, GitHub Copilot, Codex, Antigravity) are designed around a single project root. In real-world software development, applications are rarely confined to a single repository—they are split across frontends, backend APIs, shared packages, and infrastructure.
|
|
35
|
+
|
|
36
|
+
This creates two major frictions:
|
|
37
|
+
1. **Siloed Context**: Opening one repository in an AI tool leaves the AI blind to API contracts, types, or services in other repositories, leading to hallucinations.
|
|
38
|
+
2. **Onboarding Friction**: New team members must manually find and clone 5–10 repos, set up local folder structures, and configure tools.
|
|
39
|
+
|
|
40
|
+
**`rnex` solves both**:
|
|
41
|
+
- It unites repositories under one Virtual Meta-Repo root so AI assistants see the whole stack.
|
|
42
|
+
- It enables 1-command onboarding: teammates run `rnex clone` and every repository is cloned and wired up in seconds.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
### Why not just use a monorepo or Git submodules?
|
|
47
|
+
|
|
48
|
+
| Solution | Drawbacks | How `rnex` compares |
|
|
49
|
+
| :--- | :--- | :--- |
|
|
50
|
+
| **Git Monorepo** | Heavy migration effort, combined CI/CD pipelines, complex permissions, slow checkouts. | **Zero migration**: Repositories remain completely independent with their own remotes and CI/CD pipelines. |
|
|
51
|
+
| **Git Submodules** | Detached HEAD states, tricky merge conflicts, complex multi-step commits, rigid coupling. | **Zero submodule friction**: Root Git ignores `repos/`. Repos are completely normal autonomous clones. |
|
|
52
|
+
| **Manual Multi-Window** | Juggling 5 IDE windows, copy-pasting API types, fragmented AI reasoning. | **Unified Workspace**: AI agents see the entire system from the meta-repo root. |
|
|
53
|
+
|
|
54
|
+
---
|
|
55
|
+
|
|
56
|
+
## Architecture & Mechanics
|
|
57
|
+
|
|
58
|
+
### How does the Virtual Meta-Repo work?
|
|
59
|
+
|
|
60
|
+
When you initialize a workspace (`rnex init`), `rnex` creates:
|
|
61
|
+
1. `rnex.yaml` (declaring member repository URLs and active plugins).
|
|
62
|
+
2. Root `.gitignore` (ignoring `repos/` and `.local.rnex.yaml`).
|
|
63
|
+
3. Routing-only `AGENTS.md` (directing AI assistants to configuration and plugins).
|
|
64
|
+
4. `.rnex/` (strictly encapsulating all internal rnex assets and scoped plugins).
|
|
65
|
+
|
|
66
|
+
When you run `rnex add <name> <git-url>` or `rnex clone`, member repositories are cloned directly into `./repos/<name>`.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### Why use physical clones in `./repos/` instead of symlinks?
|
|
71
|
+
|
|
72
|
+
1. **Universal Portability**: Zero symlink fragility. Works 100% natively on macOS, Linux, and Windows without elevated permissions or Developer Mode.
|
|
73
|
+
2. **File Watcher & Tool Compatibility**: Native folders avoid known symlink bugs in IDE file watchers, bundlers, and linters.
|
|
74
|
+
3. **Intuitive Simplicity**: Every project is right where you expect it in `./repos/<name>`.
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
### Can I use Git commands (pull, push, commit) on member repos?
|
|
79
|
+
|
|
80
|
+
**Yes.** Git operates completely normally.
|
|
81
|
+
When you or your IDE navigate into `repos/<name>/` and run `git status`, `git commit`, `git pull`, or `git push`, Git operates directly against that repository's own branches and remotes.
|
|
82
|
+
|
|
83
|
+
---
|
|
84
|
+
|
|
85
|
+
### Can AI agents create and modify files inside member repos?
|
|
86
|
+
|
|
87
|
+
**Yes.** Any file created or modified under `repos/<name>/...` (e.g. `repos/backend/src/api.ts`) is a real file inside that repository, immediately tracked by that repo's Git.
|
|
88
|
+
|
|
89
|
+
---
|
|
90
|
+
|
|
91
|
+
### Will rnex interfere with Git branches, remotes, or commit histories?
|
|
92
|
+
|
|
93
|
+
**No.** The workspace root `.gitignore` ignores `repos/`. The workspace Git repository never commits or interferes with member repository contents.
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### How does batch execution (rnex exec) work?
|
|
98
|
+
|
|
99
|
+
Running `rnex exec <command>` iterates through every active, enabled repository in `./repos/` and executes the command within that directory. For example:
|
|
100
|
+
|
|
101
|
+
```bash
|
|
102
|
+
rnex exec git status -s
|
|
103
|
+
rnex exec npm test
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Configuration & AI Context Routing
|
|
109
|
+
|
|
110
|
+
### What is the two-level configuration model?
|
|
111
|
+
|
|
112
|
+
1. **Repo Config (`rnex.yaml`)**: Shared team manifest committed to Git. Declares repo URLs, default enabled states, and plugins.
|
|
113
|
+
2. **Local Config (`.local.rnex.yaml`)**: Machine-specific file ignored by Git. Takes **highest priority** and overrides repo settings.
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
### How does the enabled/disabled setting work?
|
|
118
|
+
|
|
119
|
+
Repositories support an `enabled: true|false` setting:
|
|
120
|
+
- **Default State**: Enabled (`true`). If omitted, the repository is automatically considered enabled.
|
|
121
|
+
- **Local Overrides**: If a team has 10 repos, but a developer only works on two, they can set `enabled: false` for the other eight in `.local.rnex.yaml`.
|
|
122
|
+
- **Disabled Repositories**: Skipped by `rnex clone`, `rnex exec`, and excluded from AI agent tasks.
|
|
123
|
+
|
|
124
|
+
CLI commands:
|
|
125
|
+
```bash
|
|
126
|
+
rnex disable analytics --local # disable locally
|
|
127
|
+
rnex enable analytics # re-enable
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
### What is the routing-only instructions pattern in AGENTS.md?
|
|
133
|
+
|
|
134
|
+
Top-level AI instructions (`AGENTS.md`, `CLAUDE.md`, etc.) do not include sprawling inlined rules or tool text. Instead, they act as **lean navigation routers**:
|
|
135
|
+
1. Mandate reading `.local.rnex.yaml` (highest priority) and `rnex.yaml` first.
|
|
136
|
+
2. Route agents to `.rnex/plugins/<plugin-name>/` for scoped plugin rules.
|
|
137
|
+
3. Route agents to `repos/<name>/.rnex/` for member-specific instructions.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
### What is the member repository `.rnex/` directory?
|
|
142
|
+
|
|
143
|
+
Repo Nexus initializes an isolated `.rnex/` folder inside each member repository (`repos/<name>/.rnex/`):
|
|
144
|
+
- Encapsulates Repo Nexus metadata and scoped plugin rules for that repository.
|
|
145
|
+
- Keeps member repository roots clean and untouched.
|
|
146
|
+
- Can be disabled at any time with `rnex rnex-dir disable <name>`.
|
|
147
|
+
|
|
148
|
+
---
|
|
149
|
+
|
|
150
|
+
### How are plugins structured and scoped?
|
|
151
|
+
|
|
152
|
+
Plugins are strictly scoped under `.rnex/plugins/<plugin-name>/`.
|
|
153
|
+
For example, the built-in `karpathy-llm` plugin places its rules, workflows, and instructions in `.rnex/plugins/karpathy-llm/`, while instantiating domain directories (`./docs` for intake documents and `.rnex/wiki` for curated knowledge) as specified by its architecture.
|
|
154
|
+
|
|
155
|
+
---
|
|
156
|
+
|
|
157
|
+
## Platforms & Setup
|
|
158
|
+
|
|
159
|
+
### What are the system requirements? Does it work on Windows?
|
|
160
|
+
|
|
161
|
+
`rnex` is written in POSIX shell script (`/bin/sh`). It runs natively on:
|
|
162
|
+
- **macOS**
|
|
163
|
+
- **Linux**
|
|
164
|
+
- **Windows** (via WSL2, Git Bash, or MSYS2)
|
|
165
|
+
|
|
166
|
+
Because `rnex` uses standard physical folders and `git clone` instead of symlinks, it has zero symlink permission limitations on Windows.
|
|
167
|
+
|
|
168
|
+
---
|
|
169
|
+
|
|
170
|
+
### Does rnex have external runtime dependencies?
|
|
171
|
+
|
|
172
|
+
**No.** The `rnex` executable has zero external dependencies—no Node.js runtime, Python, or external package managers are required to execute the CLI.
|
|
173
|
+
|
|
174
|
+
---
|
|
175
|
+
|
|
176
|
+
### What files should be committed to Git?
|
|
177
|
+
|
|
178
|
+
In your Repo Nexus workspace Git repository:
|
|
179
|
+
- **Commit**: `rnex.yaml`, `AGENTS.md`, `docs/`, `toolkit/`, and `.gitignore`.
|
|
180
|
+
- **Do NOT Commit**: `repos/` and `.local.rnex.yaml` (both are strictly ignored by `.gitignore`).
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Multi-Repo AI Workspace Context
|
|
2
|
+
|
|
3
|
+
This workspace operates as a **Repo Nexus Virtual Meta-Repo** uniting independent repositories.
|
|
4
|
+
|
|
5
|
+
## Routing Protocol for AI Assistants
|
|
6
|
+
|
|
7
|
+
### Mandatory Session Startup
|
|
8
|
+
Execute in sequence before task execution:
|
|
9
|
+
1. **Read Configuration First (Highest Priority)**: Read `.local.rnex.yaml` (if present) and `rnex.yaml` to identify active member repositories (`repos/`) and enabled plugins.
|
|
10
|
+
2. **Plugin & Skill Routing**: Inspect active plugin instructions under `.rnex/plugins/<plugin-name>/`, and tools under `.rnex/skills/` and `.rnex/workflows/` when relevant.
|
|
11
|
+
3. **Targeted Member Repository Access Only**: Navigate directly to specific files in `repos/<name>/` relevant to the user request. Avoid blind repository-wide scans or unbounded searches across `repos/`.
|
|
12
|
+
|
|
13
|
+
## Subagents
|
|
14
|
+
Autonomous subagents are defined under `.rnex/agents/` and active plugin agents under `.rnex/plugins/<plugin-name>/agents/`.
|
|
15
|
+
|
|
16
|
+
## Member Repositories (`repos/<name>/`)
|
|
17
|
+
Each member repository is an autonomous Git repository. For repository-specific instructions, inspect `repos/<name>/.rnex/`. Inspect only targeted files required for the task.
|
|
18
|
+
|
|
19
|
+
## Workspace Maintenance
|
|
20
|
+
When workspace configuration, routing blocks, plugin assets, or member repository structures require reconciliation or schema upgrades:
|
|
21
|
+
- Run `rnex sync` (or `rnex status` to check workspace health).
|
|
22
|
+
- Use `rnex sync -y` to non-destructively apply configuration version upgrades automatically.
|
|
23
|
+
|
|
24
|
+
## Git Operations
|
|
25
|
+
Commit and push changes directly within the respective member repository root (`repos/<name>/`).
|
package/docs/cli/index.md
CHANGED
|
@@ -12,9 +12,9 @@ description: Fast reference cheatsheet for rnex commands, global options, enviro
|
|
|
12
12
|
| Command | Category | Description |
|
|
13
13
|
|:---|:---|:---|
|
|
14
14
|
| [`rnex init`](workspace.md#rnex-init) | Workspace | Initialize a new Repo Nexus workspace. |
|
|
15
|
-
| [`rnex
|
|
16
|
-
| [`rnex
|
|
17
|
-
| [`rnex update` / `upgrade`](workspace.md#rnex-update-alias-upgrade) | Workspace |
|
|
15
|
+
| [`rnex sync`](workspace.md#rnex-sync) | Workspace | Single reconciliation command: sync prompts, .rnex/ harness, and compile AI instructions. |
|
|
16
|
+
| [`rnex status`](workspace.md#rnex-status) | Workspace | Strictly read-only: inspect workspace health, active repos, loaded config, and plugins. |
|
|
17
|
+
| [`rnex update` / `upgrade`](workspace.md#rnex-update-alias-upgrade) | Workspace | Check configuration version and upgrade schema (delegates to `rnex sync`). |
|
|
18
18
|
| [`rnex install`](workspace.md#rnex-install) | Workspace | Symlink `rnex` to `~/.local/bin`. |
|
|
19
19
|
| [`rnex completion`](workspace.md#rnex-completion) | Workspace | Generate shell auto-completion for Zsh, Bash, or Fish. |
|
|
20
20
|
| [`rnex version`](workspace.md#rnex-version) | Workspace | Display current installed CLI version. |
|
|
@@ -49,7 +49,7 @@ rnex [global-options] <command> [command-options] [arguments]
|
|
|
49
49
|
|
|
50
50
|
## Standardized Prompts Catalog
|
|
51
51
|
|
|
52
|
-
Repo Nexus provides a standardized suite of operational prompt templates in `toolkit/prompts/` that sync
|
|
52
|
+
Repo Nexus provides a standardized suite of operational prompt templates in `toolkit/prompts/` that sync during `rnex sync` or `rnex init`.
|
|
53
53
|
|
|
54
54
|
AI assistants navigate workflows via the catalog index at `.rnex/prompts/index.md`:
|
|
55
55
|
|
package/docs/cli/tooling.md
CHANGED
|
@@ -21,9 +21,10 @@ rnex hooks install [--local]
|
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
#### Installed Hooks:
|
|
24
|
-
* **`post-merge`**: Runs `rnex sync
|
|
24
|
+
* **`post-merge`**: Runs `rnex sync -y --quiet` automatically whenever `git pull` or upstream merges change `rnex.yaml`, ensuring newly added repositories and plugin updates sync instantly.
|
|
25
|
+
* **`post-checkout`**: Runs `rnex sync -y --quiet` automatically whenever `rnex.yaml` changes across branch checkouts.
|
|
25
26
|
* **`post-commit`**: Alerts the user if documentation or wiki files were committed without running maintenance linters.
|
|
26
|
-
* **`pre-commit`**: Runs
|
|
27
|
+
* **`pre-commit`**: Runs `rnex sync -y --quiet` when configuration files are staged, and triggers plugin validation.
|
|
27
28
|
* **`pre-push`**: Runs pre-push validation triggers before pushing to remote.
|
|
28
29
|
|
|
29
30
|
### `rnex hooks status`
|
package/docs/cli/workspace.md
CHANGED
|
@@ -47,35 +47,9 @@ rnex init -y --claude --hooks
|
|
|
47
47
|
|
|
48
48
|
Performs comprehensive diagnostic and health checks across the workspace.
|
|
49
49
|
|
|
50
|
-
### Syntax
|
|
51
|
-
```sh
|
|
52
|
-
rnex status
|
|
53
|
-
```
|
|
54
|
-
|
|
55
|
-
### What It Reports
|
|
56
|
-
* **Configuration State**: Location and schema version of `rnex.yaml` and `.local.rnex.yaml`.
|
|
57
|
-
* **Git Status**: Validation that `.gitignore` ignores `repos/` and local files, and whether `core.hooksPath` points to `.rnex/hooks`.
|
|
58
|
-
* **AI Routing**: Status of universal `AGENTS.md`, `.rnex/skills/`, `.rnex/workflows/`, and provider prompts directories.
|
|
59
|
-
* **Member Clones**: Health, branches, and `.rnex` state of every member repository.
|
|
60
|
-
|
|
61
|
-
```bash
|
|
62
|
-
rnex status
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
```text
|
|
66
|
-
[rnex] Workspace root: /workspace
|
|
67
|
-
[rnex] Config: rnex.yaml (.local.rnex.yaml loaded)
|
|
68
|
-
[rnex] Repositories: 2 active, 0 disabled
|
|
69
|
-
```
|
|
70
|
-
|
|
71
|
-
---
|
|
72
|
-
|
|
73
50
|
## `rnex sync`
|
|
74
51
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- **Audit Mode (Default)**: When run without `--fix`, inspects workspace configuration, Git ignores, routing blocks, plugin assets, and member repositories, logging any issues or inconsistencies without mutating files.
|
|
78
|
-
- **Reconcile Mode (`--fix`)**: Reconciles configuration schema, updates instruction files, synchronizes skills/workflows, mirrors operational prompts, and fixes inconsistencies.
|
|
52
|
+
Reconciles workspace configuration, prompts, plugins, `.rnex/` harness directories, and compiles `.rnex/ai-instructions.md`. `rnex sync` is the sole reconciliation command in Repo Nexus (`rnex fix` and `rnex status --fix` are removed).
|
|
79
53
|
|
|
80
54
|
### Syntax
|
|
81
55
|
```sh
|
|
@@ -85,27 +59,41 @@ rnex sync [options]
|
|
|
85
59
|
### Options
|
|
86
60
|
| Option | Shorthand | Type | Default | Description |
|
|
87
61
|
|:---|:---|:---|:---|:---|
|
|
88
|
-
| `--
|
|
89
|
-
| `--yes` | `-y` | boolean | `false` | Automatically confirm schema upgrades if prompted (used with `--fix`). |
|
|
62
|
+
| `--yes` | `-y` | boolean | `false` | Automatically confirm schema upgrades if prompted. |
|
|
90
63
|
| `--quiet` | `-q` | boolean | `false` | Quiet mode; suppresses non-error informational messages (ideal for hooks). |
|
|
91
|
-
| `--upgrade` | | boolean | `false` | Explicitly trigger version upgrade reconciliation (implies `--fix`). |
|
|
92
64
|
|
|
93
|
-
### Reconciliation Actions
|
|
65
|
+
### Reconciliation Actions
|
|
94
66
|
1. Upgrades configuration schema non-destructively if an older version is detected.
|
|
95
67
|
2. Re-verifies `.gitignore` rules for `repos/` and local configs, and ensures `.ignore` contains `!repos/*`.
|
|
96
|
-
3.
|
|
97
|
-
4. Syncs
|
|
98
|
-
5.
|
|
99
|
-
6.
|
|
68
|
+
3. Compiles `.rnex/ai-instructions.md` by combining the base template with active configuration and all enabled plugin `instructions.md` fragments. Writes single strict directive to top-level provider files (`AGENTS.md`, `CLAUDE.md`, etc.).
|
|
69
|
+
4. Syncs operational prompts matching `rnex-*` from `toolkit/prompts/` to workspace and configured AI assistant prompt directories.
|
|
70
|
+
5. Re-syncs enabled plugin assets into `.rnex/plugins/` and member `repos/<name>/.rnex/`.
|
|
71
|
+
6. Dispatches plugin lifecycle hooks (`before_sync`, `after_sync`).
|
|
100
72
|
7. Reconciles automated Git hooks in `.rnex/hooks/` against `git_hooks` config.
|
|
101
|
-
8. Re-creates member `.rnex/` scaffolding in active repositories.
|
|
73
|
+
8. Re-creates member `.rnex/` scaffolding in active repositories (`rnex_dir: true`).
|
|
102
74
|
9. Updates multi-root `.code-workspace` folder mappings if configured.
|
|
75
|
+
10. Generates `.rnex/bin/auto-sync.sh` and updates the checksum stamp in `.rnex/.sync_stamp`.
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
## `rnex status`
|
|
80
|
+
|
|
81
|
+
Inspects workspace health and diagnostic information. `rnex status` is **strictly read-only** with no `--fix` flag.
|
|
82
|
+
|
|
83
|
+
### Syntax
|
|
84
|
+
```sh
|
|
85
|
+
rnex status
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
### Execution
|
|
89
|
+
* **Strictly Read-Only**: Inspects workspace health, active repos, loaded config files (`rnex.yaml` and `.local.rnex.yaml`), git hooks, and plugins.
|
|
90
|
+
* **Sync Diagnostics**: Compares current config checksums against `.rnex/.sync_stamp` and suggests running `rnex sync` if configuration drift is detected.
|
|
103
91
|
|
|
104
92
|
---
|
|
105
93
|
|
|
106
94
|
## `rnex update` (alias: `upgrade`)
|
|
107
95
|
|
|
108
|
-
Runs version verification and invokes
|
|
96
|
+
Runs version verification and invokes `rnex sync` to upgrade workspace configuration and routing instructions to match the installed CLI version.
|
|
109
97
|
|
|
110
98
|
### Syntax
|
|
111
99
|
```sh
|
|
@@ -120,9 +108,9 @@ rnex upgrade [options]
|
|
|
120
108
|
| `--quiet` | `-q` | boolean | `false` | Suppress non-error informational messages. |
|
|
121
109
|
|
|
122
110
|
### Relationship with `rnex sync`
|
|
123
|
-
`rnex update`
|
|
111
|
+
`rnex update` delegates directly to `rnex sync`:
|
|
124
112
|
* **Upfront Version Diagnostics**: Compares `version:` in `rnex.yaml` against the installed CLI version. If already matching, it reports that the workspace is up to date.
|
|
125
|
-
* **Unified Reconciliation**: Delegates directly to `rnex sync
|
|
113
|
+
* **Unified Reconciliation**: Delegates directly to `rnex sync`, ensuring configuration schema upgrades, instruction updates (`AGENTS.md`, `.rnex/ai-instructions.md`), prompts, and plugin reconciliation occur in a single, idempotent pass.
|
|
126
114
|
* **Non-Destructive Migration**: Upgrades schema keys while preserving comments, indentation, and custom configurations.
|
|
127
115
|
|
|
128
116
|
---
|
package/docs/faq/index.md
CHANGED
|
@@ -150,7 +150,7 @@ Repo Nexus initializes an isolated `.rnex/` folder inside each member repository
|
|
|
150
150
|
### How are plugins structured and scoped?
|
|
151
151
|
|
|
152
152
|
Plugins are strictly scoped under `.rnex/plugins/<plugin-name>/`.
|
|
153
|
-
For example, the built-in `karpathy-llm` plugin places its rules, workflows, and instructions in `.rnex/plugins/karpathy-llm/`, while instantiating
|
|
153
|
+
For example, the built-in `karpathy-llm` plugin places its rules, workflows, and instructions in `.rnex/plugins/karpathy-llm/`, while instantiating domain directories (`./docs` for intake documents and `.rnex/wiki` for curated knowledge) as specified by its architecture.
|
|
154
154
|
|
|
155
155
|
---
|
|
156
156
|
|
|
@@ -79,7 +79,7 @@ This workspace operates as a Repo Nexus Virtual Meta-Repo uniting independent re
|
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
::: tip Preserving Custom Instructions
|
|
82
|
-
Any custom guidelines, rules, or documentation authored outside the `<!-- REPO-NEXUS:START -->` and `<!-- REPO-NEXUS:END -->` markers are strictly preserved during `rnex sync
|
|
82
|
+
Any custom guidelines, rules, or documentation authored outside the `<!-- REPO-NEXUS:START -->` and `<!-- REPO-NEXUS:END -->` markers are strictly preserved during `rnex sync` or plugin synchronization.
|
|
83
83
|
:::
|
|
84
84
|
|
|
85
85
|
### 5. Multi-Root IDE Workspaces
|
|
@@ -90,7 +90,7 @@ plugins:
|
|
|
90
90
|
| `version` | string | Current CLI version | Schema version compatibility check. |
|
|
91
91
|
| `repos_dir` | string | `./repos` | Relative or absolute path where member repos are cloned. |
|
|
92
92
|
| `code_workspace` | boolean \| string | `false` | Enables `.code-workspace` generation. Pass a string for custom filename. |
|
|
93
|
-
| `git_hooks` | boolean | `true` | Configures `.rnex/hooks` as `core.hooksPath` during `rnex sync
|
|
93
|
+
| `git_hooks` | boolean | `true` | Configures `.rnex/hooks` as `core.hooksPath` during `rnex sync`. |
|
|
94
94
|
| `repos` | map | `{}` | Map of member repository specifications keyed by name. |
|
|
95
95
|
| `plugins` | map | `{}` | Map of enabled plugins and their configuration options. |
|
|
96
96
|
|
|
@@ -124,9 +124,9 @@ plugins:
|
|
|
124
124
|
After modifying configuration files directly, reconcile the workspace state:
|
|
125
125
|
|
|
126
126
|
```bash
|
|
127
|
-
rnex sync
|
|
127
|
+
rnex sync
|
|
128
128
|
```
|
|
129
129
|
|
|
130
|
-
::: tip
|
|
131
|
-
Running `rnex
|
|
130
|
+
::: tip Status & Auto-Sync
|
|
131
|
+
Running `rnex status` inspects workspace health and checks if configuration is in sync with `.rnex/.sync_stamp`. Running `rnex sync` applies full reconciliation and updates the sync stamp. Workspace commands (like `rnex list`) also automatically trigger auto-sync whenever configuration changes.
|
|
132
132
|
:::
|
package/docs/guide/workflows.md
CHANGED
|
@@ -66,7 +66,7 @@ If a command fails in any repository, `rnex exec` exits immediately with that co
|
|
|
66
66
|
Repo Nexus includes an automated hook runner configured via `core.hooksPath = .rnex/hooks`.
|
|
67
67
|
|
|
68
68
|
### Core Automated Hooks
|
|
69
|
-
1. **`post-merge`**: When you pull updates to the meta-repo (`git pull`), the hook automatically executes `rnex sync --
|
|
69
|
+
1. **`post-merge`**: When you pull updates to the meta-repo (`git pull`), the hook automatically executes `rnex sync -y --quiet` if `rnex.yaml` changed to:
|
|
70
70
|
* Clone newly declared member repositories.
|
|
71
71
|
* Update AI routing instructions (`AGENTS.md`, etc.).
|
|
72
72
|
* Sync plugin changes.
|