@revotools/cli 0.2.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/LICENSE +21 -0
- package/README.md +198 -0
- package/dist/revo +3263 -0
- package/package.json +34 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2025 dean0x
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
# Revo
|
|
2
|
+
|
|
3
|
+
[](https://opensource.org/licenses/MIT)
|
|
4
|
+
|
|
5
|
+
Claude-first multi-repo workspace manager.
|
|
6
|
+
|
|
7
|
+
Revo is a fork of [Mars](https://github.com/dean0x/mars). It keeps everything
|
|
8
|
+
Mars gives you — tag-based filtering, coordinated branches, zero dependencies —
|
|
9
|
+
and adds features designed for working with coding agents:
|
|
10
|
+
|
|
11
|
+
- **`revo context`** scans your repos and writes a root-level `CLAUDE.md` so
|
|
12
|
+
Claude Code can understand the whole workspace at a glance.
|
|
13
|
+
- **`revo feature <name>`** creates a coordinated branch and shared context
|
|
14
|
+
file across matching repos.
|
|
15
|
+
- **`revo commit`**, **`revo push`**, **`revo pr`** let you commit, push, and
|
|
16
|
+
open PRs across the stack in one step.
|
|
17
|
+
- **`depends_on`** in `revo.yaml` feeds a topological sort into the generated
|
|
18
|
+
CLAUDE.md so the agent knows what to change first.
|
|
19
|
+
|
|
20
|
+
Pure bash 3.2+, works on macOS out of the box, no runtime dependencies beyond
|
|
21
|
+
`git` (and optionally `gh` for `revo pr`).
|
|
22
|
+
|
|
23
|
+
## Quick Start
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
mkdir my-project && cd my-project
|
|
27
|
+
revo init
|
|
28
|
+
|
|
29
|
+
revo add git@github.com:org/shared-types.git --tags shared
|
|
30
|
+
revo add git@github.com:org/backend.git --tags backend,api --depends-on shared-types
|
|
31
|
+
revo add git@github.com:org/frontend.git --tags frontend,web --depends-on backend
|
|
32
|
+
|
|
33
|
+
revo clone # CLAUDE.md is auto-generated after first clone
|
|
34
|
+
revo context # regenerate it any time repos change
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
Then point Claude Code at the workspace directory and it will read `CLAUDE.md`
|
|
38
|
+
on its own.
|
|
39
|
+
|
|
40
|
+
## Claude Code Workflow
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
revo init
|
|
44
|
+
↓
|
|
45
|
+
revo add (repos, with --depends-on)
|
|
46
|
+
↓
|
|
47
|
+
revo clone ── auto-generates CLAUDE.md
|
|
48
|
+
↓
|
|
49
|
+
Claude Code reads CLAUDE.md
|
|
50
|
+
↓
|
|
51
|
+
revo feature clock-student ── branch + .revo/features/clock-student.md
|
|
52
|
+
↓
|
|
53
|
+
Claude Code works across repos
|
|
54
|
+
↓
|
|
55
|
+
revo commit "wire up clock endpoint"
|
|
56
|
+
↓
|
|
57
|
+
revo push
|
|
58
|
+
↓
|
|
59
|
+
revo pr "Clock endpoint for students" ── coordinated PRs via gh
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
## Commands
|
|
63
|
+
|
|
64
|
+
### Workspace (from Mars)
|
|
65
|
+
|
|
66
|
+
| Command | Description |
|
|
67
|
+
|---------|-------------|
|
|
68
|
+
| `revo init` | Initialize a new workspace |
|
|
69
|
+
| `revo add <url> [--tags t1,t2] [--depends-on r1,r2]` | Add a repository to config |
|
|
70
|
+
| `revo clone [--tag TAG]` | Clone configured repositories |
|
|
71
|
+
| `revo list [--tag TAG]` | List configured repositories |
|
|
72
|
+
| `revo status [--tag TAG]` | Show status of all repositories |
|
|
73
|
+
| `revo sync [--tag TAG] [--rebase]` | Pull latest changes |
|
|
74
|
+
| `revo branch <name> [--tag TAG]` | Create branch on repositories |
|
|
75
|
+
| `revo checkout <branch> [--tag TAG]` | Checkout branch on repositories |
|
|
76
|
+
| `revo exec "<cmd>" [--tag TAG]` | Run command in each repository |
|
|
77
|
+
|
|
78
|
+
### Claude-first (new in Revo)
|
|
79
|
+
|
|
80
|
+
| Command | Description |
|
|
81
|
+
|---------|-------------|
|
|
82
|
+
| `revo context` | Scan repos and regenerate workspace `CLAUDE.md` |
|
|
83
|
+
| `revo feature <name> [--tag TAG]` | Coordinated feature branch + `.revo/features/<name>.md` |
|
|
84
|
+
| `revo commit <msg> [--tag TAG]` | Commit across dirty repos |
|
|
85
|
+
| `revo push [--tag TAG]` | Push branches across repos |
|
|
86
|
+
| `revo pr <title> [--tag TAG] [--body BODY]` | Create coordinated PRs via `gh` |
|
|
87
|
+
|
|
88
|
+
## Tag Filtering
|
|
89
|
+
|
|
90
|
+
Target subsets of repos using `--tag`:
|
|
91
|
+
|
|
92
|
+
```bash
|
|
93
|
+
# Only clone frontend repos
|
|
94
|
+
revo clone --tag frontend
|
|
95
|
+
|
|
96
|
+
# Create coordinated feature on backend repos only
|
|
97
|
+
revo feature auth-overhaul --tag backend
|
|
98
|
+
|
|
99
|
+
# Run npm install on all frontend repos
|
|
100
|
+
revo exec "npm install" --tag frontend
|
|
101
|
+
```
|
|
102
|
+
|
|
103
|
+
## Configuration
|
|
104
|
+
|
|
105
|
+
### revo.yaml
|
|
106
|
+
|
|
107
|
+
```yaml
|
|
108
|
+
version: 1
|
|
109
|
+
|
|
110
|
+
workspace:
|
|
111
|
+
name: "my-project"
|
|
112
|
+
|
|
113
|
+
repos:
|
|
114
|
+
- url: git@github.com:org/shared-types.git
|
|
115
|
+
tags: [shared, types]
|
|
116
|
+
|
|
117
|
+
- url: git@github.com:org/backend.git
|
|
118
|
+
path: api # optional custom path
|
|
119
|
+
tags: [backend, api]
|
|
120
|
+
depends_on: [shared-types] # optional — drives dep order in CLAUDE.md
|
|
121
|
+
|
|
122
|
+
- url: git@github.com:org/frontend.git
|
|
123
|
+
tags: [frontend, web]
|
|
124
|
+
depends_on: [backend]
|
|
125
|
+
|
|
126
|
+
defaults:
|
|
127
|
+
branch: main
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
`depends_on` references repos by their path basename (the bit derived from
|
|
131
|
+
the URL, or the explicit `path` if set).
|
|
132
|
+
|
|
133
|
+
Migrating from Mars? `mars.yaml` is still honored as a fallback, so `revo`
|
|
134
|
+
works in existing Mars workspaces without renaming anything.
|
|
135
|
+
|
|
136
|
+
## Workspace Structure
|
|
137
|
+
|
|
138
|
+
```
|
|
139
|
+
my-project/
|
|
140
|
+
├── revo.yaml # Workspace configuration
|
|
141
|
+
├── CLAUDE.md # Auto-generated by revo context
|
|
142
|
+
├── .gitignore # Contains 'repos/' and '.revo/'
|
|
143
|
+
├── .revo/ # Revo-local state (gitignored)
|
|
144
|
+
│ └── features/ # Feature context files
|
|
145
|
+
│ ├── clock-student.md
|
|
146
|
+
│ └── auth-overhaul.md
|
|
147
|
+
└── repos/ # Cloned repositories (gitignored)
|
|
148
|
+
├── shared-types/
|
|
149
|
+
├── backend/
|
|
150
|
+
└── frontend/
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
## Why not...
|
|
154
|
+
|
|
155
|
+
- **...a monorepo?** Because these repos are real, separately owned codebases
|
|
156
|
+
with their own CI, deploys, and histories. A monorepo forces a reorg Revo
|
|
157
|
+
doesn't need.
|
|
158
|
+
- **...plain sibling directories?** Because you lose tag filtering, coordinated
|
|
159
|
+
branches, coordinated PRs, and — most importantly — a shared `CLAUDE.md`
|
|
160
|
+
that the agent can actually read.
|
|
161
|
+
- **...a bespoke orchestrator?** Because Revo does nothing at runtime. It
|
|
162
|
+
doesn't build, deploy, or test. It just shapes the workspace.
|
|
163
|
+
|
|
164
|
+
## Installation
|
|
165
|
+
|
|
166
|
+
### Manual (recommended while pre-release)
|
|
167
|
+
|
|
168
|
+
```bash
|
|
169
|
+
git clone https://github.com/marcus.salinas/revo.git
|
|
170
|
+
cd revo
|
|
171
|
+
./build.sh
|
|
172
|
+
cp dist/revo ~/.local/bin/ # or anywhere in PATH
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Shell Script
|
|
176
|
+
|
|
177
|
+
```bash
|
|
178
|
+
curl -fsSL https://raw.githubusercontent.com/marcus.salinas/revo/main/install.sh | bash
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### npm
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
npm install -g revo-cli
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Contributing
|
|
188
|
+
|
|
189
|
+
See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup, architecture, and release process.
|
|
190
|
+
|
|
191
|
+
## Credits
|
|
192
|
+
|
|
193
|
+
Revo is a fork of [Mars](https://github.com/dean0x/mars) by [@dean0x](https://github.com/dean0x).
|
|
194
|
+
The workspace layer is Mars's work; Revo adds the Claude-first commands on top.
|
|
195
|
+
|
|
196
|
+
## License
|
|
197
|
+
|
|
198
|
+
MIT
|