cc-mirror 1.4.2 → 1.6.1
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/README.md +212 -167
- package/dist/cc-mirror.mjs +191 -65
- package/dist/skills/orchestration/references/tools.md +13 -13
- package/dist/tui.mjs +49 -51
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -10,55 +10,129 @@
|
|
|
10
10
|
<a href="https://twitter.com/nummanali"><img src="https://img.shields.io/twitter/follow/nummanali?style=social" alt="Twitter Follow"></a>
|
|
11
11
|
</p>
|
|
12
12
|
|
|
13
|
+
<h2 align="center">Claude Code, Unshackled</h2>
|
|
14
|
+
|
|
13
15
|
<p align="center">
|
|
14
|
-
|
|
16
|
+
Pre-configured Claude Code variants with multi-agent orchestration,<br>
|
|
17
|
+
custom providers, and battle-tested enhancements.<br><br>
|
|
18
|
+
<strong>One command. Instant power-up.</strong>
|
|
15
19
|
</p>
|
|
16
20
|
|
|
17
21
|
---
|
|
18
22
|
|
|
19
|
-
##
|
|
23
|
+
## The Unlock
|
|
24
|
+
|
|
25
|
+
Claude Code has a hidden multi-agent capability. CC-MIRROR enables it.
|
|
20
26
|
|
|
21
27
|
```
|
|
22
|
-
|
|
23
|
-
│
|
|
24
|
-
│
|
|
25
|
-
│
|
|
26
|
-
│
|
|
27
|
-
│
|
|
28
|
-
│ │
|
|
29
|
-
│
|
|
30
|
-
│
|
|
31
|
-
│
|
|
32
|
-
│
|
|
33
|
-
│
|
|
34
|
-
│
|
|
35
|
-
│
|
|
36
|
-
│
|
|
37
|
-
|
|
38
|
-
└────────────────────────────────────────────────────────────────────────────────┘
|
|
28
|
+
┌─────────────────────────────────────────────────────────────────────────────┐
|
|
29
|
+
│ │
|
|
30
|
+
│ BEFORE AFTER │
|
|
31
|
+
│ ══════ ═════ │
|
|
32
|
+
│ │
|
|
33
|
+
│ ┌─────────────────┐ ┌─────────────────────────────────┐ │
|
|
34
|
+
│ │ Claude Code │ │ YOUR Claude Code │ │
|
|
35
|
+
│ │ │ CC-MIRROR │ │ │
|
|
36
|
+
│ │ • Single │ ─────────► │ ✓ Multi-Agent Orchestration │ │
|
|
37
|
+
│ │ config │ │ ✓ Task-based Coordination │ │
|
|
38
|
+
│ │ • No team │ │ ✓ Background Agent Spawning │ │
|
|
39
|
+
│ │ mode │ │ ✓ Battle-tested Skill │ │
|
|
40
|
+
│ │ │ │ ✓ Isolated Config │ │
|
|
41
|
+
│ └─────────────────┘ └─────────────────────────────────┘ │
|
|
42
|
+
│ │
|
|
43
|
+
└─────────────────────────────────────────────────────────────────────────────┘
|
|
39
44
|
```
|
|
40
45
|
|
|
41
|
-
|
|
46
|
+
**What gets unlocked:**
|
|
47
|
+
|
|
48
|
+
| Tool | Purpose |
|
|
49
|
+
| ------------ | -------------------------------------------------------- |
|
|
50
|
+
| `TaskCreate` | Create tasks with subject, description, and dependencies |
|
|
51
|
+
| `TaskGet` | Retrieve full task details by ID |
|
|
52
|
+
| `TaskUpdate` | Update status, add comments, set blockers |
|
|
53
|
+
| `TaskList` | List all tasks with summary info |
|
|
54
|
+
|
|
55
|
+
Plus a **battle-tested orchestrator skill** — refined through millions of tokens of iteration — that teaches Claude how to effectively coordinate multiple agents working in parallel.
|
|
42
56
|
|
|
43
57
|
---
|
|
44
58
|
|
|
45
|
-
##
|
|
59
|
+
## Quick Start
|
|
46
60
|
|
|
47
61
|
```bash
|
|
48
|
-
#
|
|
49
|
-
npx cc-mirror
|
|
62
|
+
# Fastest path to multi-agent Claude Code
|
|
63
|
+
npx cc-mirror quick --provider mirror --name mclaude
|
|
50
64
|
|
|
51
|
-
#
|
|
52
|
-
|
|
65
|
+
# Run it
|
|
66
|
+
mclaude
|
|
53
67
|
```
|
|
54
68
|
|
|
69
|
+
That's it. You now have Claude Code with team mode enabled.
|
|
70
|
+
|
|
55
71
|
<p align="center">
|
|
56
72
|
<img src="./assets/cc-mirror-home.png" alt="CC-MIRROR Home Screen" width="600">
|
|
57
73
|
</p>
|
|
58
74
|
|
|
75
|
+
### Or use the interactive wizard
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
npx cc-mirror
|
|
79
|
+
```
|
|
80
|
+
|
|
59
81
|
---
|
|
60
82
|
|
|
61
|
-
##
|
|
83
|
+
## What is CC-MIRROR?
|
|
84
|
+
|
|
85
|
+
CC-MIRROR is an **opinionated Claude Code distribution**. We did the hacking — you get the superpowers.
|
|
86
|
+
|
|
87
|
+
At its core, CC-MIRROR:
|
|
88
|
+
|
|
89
|
+
1. **Clones** Claude Code into isolated instances
|
|
90
|
+
2. **Patches** the CLI to enable hidden features (team mode)
|
|
91
|
+
3. **Installs** battle-tested skills (orchestrator, browser automation)
|
|
92
|
+
4. **Configures** provider-specific enhancements
|
|
93
|
+
5. **Packages** everything into a single command
|
|
94
|
+
|
|
95
|
+
Each variant is completely isolated — its own config, sessions, MCP servers, and credentials. Your main Claude Code installation stays untouched.
|
|
96
|
+
|
|
97
|
+
```
|
|
98
|
+
┌─────────────────────────────────────────────────────────────────────────┐
|
|
99
|
+
│ ~/.cc-mirror/ │
|
|
100
|
+
│ │
|
|
101
|
+
│ ├── mclaude/ ← Mirror Claude (team mode) │
|
|
102
|
+
│ │ ├── npm/ Claude Code installation │
|
|
103
|
+
│ │ ├── config/ API keys, sessions, MCP servers │
|
|
104
|
+
│ │ │ ├── tasks/<team>/ Team task storage │
|
|
105
|
+
│ │ │ └── skills/orchestration/ Orchestrator skill │
|
|
106
|
+
│ │ ├── tweakcc/ Theme customization │
|
|
107
|
+
│ │ └── variant.json Metadata │
|
|
108
|
+
│ │ │
|
|
109
|
+
│ ├── zai/ ← Z.ai variant (GLM models) │
|
|
110
|
+
│ └── minimax/ ← MiniMax variant (M2.1) │
|
|
111
|
+
│ │
|
|
112
|
+
│ Wrappers: ~/.local/bin/mclaude, ~/.local/bin/zai, ... │
|
|
113
|
+
└─────────────────────────────────────────────────────────────────────────┘
|
|
114
|
+
```
|
|
115
|
+
|
|
116
|
+
---
|
|
117
|
+
|
|
118
|
+
## Providers
|
|
119
|
+
|
|
120
|
+
### Mirror Claude (Recommended)
|
|
121
|
+
|
|
122
|
+
The purest path to multi-agent Claude Code. No proxy, no model changes — just Claude with superpowers.
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
npx cc-mirror quick --provider mirror --name mclaude
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
- **Direct Anthropic API** — No proxy, authenticate normally (OAuth or API key)
|
|
129
|
+
- **Team mode enabled** — The hidden tools, unlocked
|
|
130
|
+
- **Orchestrator skill** — Battle-tested multi-agent coordination
|
|
131
|
+
- **Isolated config** — Experiment without affecting your main setup
|
|
132
|
+
|
|
133
|
+
### Alternative Providers
|
|
134
|
+
|
|
135
|
+
Want to use different models? CC-MIRROR supports multiple providers, all with team mode:
|
|
62
136
|
|
|
63
137
|
| Provider | Models | Auth | Best For |
|
|
64
138
|
| -------------- | ---------------------- | ---------- | ------------------------------- |
|
|
@@ -66,7 +140,6 @@ npx cc-mirror quick --provider zai --api-key "$Z_AI_API_KEY"
|
|
|
66
140
|
| **MiniMax** | MiniMax-M2.1 | API Key | Unified model experience |
|
|
67
141
|
| **OpenRouter** | 100+ models | Auth Token | Model flexibility, pay-per-use |
|
|
68
142
|
| **CCRouter** | Ollama, DeepSeek, etc. | Optional | Local-first development |
|
|
69
|
-
| **Mirror** | Claude (native) | OAuth/Key | Pure Claude with team mode |
|
|
70
143
|
|
|
71
144
|
```bash
|
|
72
145
|
# Z.ai (GLM Coding Plan)
|
|
@@ -77,78 +150,126 @@ npx cc-mirror quick --provider minimax --api-key "$MINIMAX_API_KEY"
|
|
|
77
150
|
|
|
78
151
|
# OpenRouter (100+ models)
|
|
79
152
|
npx cc-mirror quick --provider openrouter --api-key "$OPENROUTER_API_KEY" \
|
|
80
|
-
--model-sonnet "anthropic/claude-
|
|
153
|
+
--model-sonnet "anthropic/claude-sonnet-4-20250514"
|
|
81
154
|
|
|
82
155
|
# Claude Code Router (local LLMs)
|
|
83
156
|
npx cc-mirror quick --provider ccrouter
|
|
84
|
-
|
|
85
|
-
# Mirror Claude (pure Claude with team mode)
|
|
86
|
-
npx cc-mirror quick --provider mirror --name mclaude
|
|
87
157
|
```
|
|
88
158
|
|
|
89
159
|
---
|
|
90
160
|
|
|
91
|
-
##
|
|
161
|
+
## The Orchestrator Skill
|
|
162
|
+
|
|
163
|
+
When team mode is enabled, CC-MIRROR installs an **orchestrator skill** that teaches Claude how to coordinate work effectively.
|
|
164
|
+
|
|
165
|
+
### The Conductor Identity
|
|
92
166
|
|
|
93
|
-
|
|
167
|
+
Claude becomes "The Conductor" — a warm, capable orchestrator who transforms ambitious requests into elegant execution:
|
|
94
168
|
|
|
95
169
|
```
|
|
96
|
-
|
|
97
|
-
│
|
|
98
|
-
│
|
|
99
|
-
│
|
|
100
|
-
│
|
|
101
|
-
│
|
|
102
|
-
│
|
|
103
|
-
│
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
170
|
+
┌─────────────────────────────────────────────────────────────────┐
|
|
171
|
+
│ │
|
|
172
|
+
│ You are the Conductor. Users bring the vision. │
|
|
173
|
+
│ You orchestrate the symphony of agents that makes it real. │
|
|
174
|
+
│ │
|
|
175
|
+
│ Complex work should feel effortless. │
|
|
176
|
+
│ That's your gift to every user. │
|
|
177
|
+
│ │
|
|
178
|
+
└─────────────────────────────────────────────────────────────────┘
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
### What It Provides
|
|
182
|
+
|
|
183
|
+
| Aspect | What Claude Learns |
|
|
184
|
+
| ---------------------- | ------------------------------------------------ |
|
|
185
|
+
| **Task Graph** | Decompose work into tasks with dependencies |
|
|
186
|
+
| **Parallel Execution** | Fan-out, pipeline, map-reduce patterns |
|
|
187
|
+
| **Background Agents** | Spawn agents that work while you continue |
|
|
188
|
+
| **Smart Prompting** | Context, scope, constraints, output expectations |
|
|
189
|
+
| **Progress Updates** | Milestone celebrations, warm professional tone |
|
|
190
|
+
|
|
191
|
+
### Example Flow
|
|
192
|
+
|
|
193
|
+
```
|
|
194
|
+
User: "Build me a REST API for todo management with tests"
|
|
195
|
+
|
|
196
|
+
Claude (The Conductor):
|
|
197
|
+
├── Clarifies requirements (AskUserQuestion with rich options)
|
|
198
|
+
├── Creates task graph with dependencies
|
|
199
|
+
├── Spawns background agents for parallel work:
|
|
200
|
+
│ ├── Agent 1: Database schema
|
|
201
|
+
│ ├── Agent 2: API routes (blocked by schema)
|
|
202
|
+
│ └── Agent 3: Test setup
|
|
203
|
+
├── Continues working while agents execute
|
|
204
|
+
├── Synthesizes results
|
|
205
|
+
└── Delivers unified output
|
|
114
206
|
```
|
|
115
207
|
|
|
116
|
-
|
|
208
|
+
> [Full Team Mode Documentation](docs/features/team-mode.md)
|
|
209
|
+
|
|
210
|
+
---
|
|
211
|
+
|
|
212
|
+
## Project-Scoped Tasks
|
|
213
|
+
|
|
214
|
+
Tasks are automatically isolated by project folder — no cross-project pollution:
|
|
117
215
|
|
|
118
216
|
```bash
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
217
|
+
cd ~/projects/api && mclaude # Team: mclaude-api
|
|
218
|
+
cd ~/projects/frontend && mclaude # Team: mclaude-frontend
|
|
219
|
+
|
|
220
|
+
# Multiple teams in the same project
|
|
221
|
+
TEAM=backend mclaude # Team: mclaude-myproject-backend
|
|
222
|
+
TEAM=frontend mclaude # Team: mclaude-myproject-frontend
|
|
223
|
+
```
|
|
224
|
+
|
|
225
|
+
### CLI Task Management
|
|
226
|
+
|
|
227
|
+
Manage team tasks from the command line:
|
|
228
|
+
|
|
229
|
+
```bash
|
|
230
|
+
npx cc-mirror tasks # List open tasks
|
|
231
|
+
npx cc-mirror tasks --ready # List ready tasks (open + not blocked)
|
|
232
|
+
npx cc-mirror tasks --json # JSON output for automation
|
|
233
|
+
npx cc-mirror tasks show 18 # Show task details
|
|
234
|
+
npx cc-mirror tasks create # Create new task
|
|
235
|
+
npx cc-mirror tasks update 5 --status resolved
|
|
236
|
+
npx cc-mirror tasks graph # Visualize dependencies
|
|
237
|
+
npx cc-mirror tasks graph --json # Graph as JSON for programmatic use
|
|
238
|
+
npx cc-mirror tasks clean --resolved # Cleanup done tasks
|
|
122
239
|
```
|
|
123
240
|
|
|
124
241
|
---
|
|
125
242
|
|
|
126
|
-
##
|
|
243
|
+
## Disabling Team Mode
|
|
244
|
+
|
|
245
|
+
Team mode is enabled by default on all variants. If you want vanilla Claude Code behavior:
|
|
246
|
+
|
|
247
|
+
```bash
|
|
248
|
+
# Create without team mode
|
|
249
|
+
npx cc-mirror create --provider mirror --name vanilla --no-team-mode
|
|
250
|
+
|
|
251
|
+
# Disable on existing variant
|
|
252
|
+
npx cc-mirror update myvariant --disable-team-mode
|
|
253
|
+
```
|
|
127
254
|
|
|
128
|
-
|
|
129
|
-
| -------------------------- | -------------------------------------------------------------------------------------- |
|
|
130
|
-
| **🔌 Multiple Providers** | Z.ai, MiniMax, OpenRouter, CCRouter, Mirror, or custom endpoints |
|
|
131
|
-
| **📁 Complete Isolation** | Each variant has its own config, sessions, and credentials |
|
|
132
|
-
| **🎨 Brand Themes** | Custom color schemes per provider via [tweakcc](https://github.com/Piebald-AI/tweakcc) |
|
|
133
|
-
| **📝 Prompt Packs** | Enhanced system prompts for Z.ai and MiniMax |
|
|
134
|
-
| **🤖 Team Mode** | Multi-agent collaboration with shared task management |
|
|
135
|
-
| **📋 Tasks CLI** | Manage, archive, and visualize task dependencies from command line |
|
|
136
|
-
| **🔄 One-Command Updates** | Update all variants when Claude Code releases |
|
|
255
|
+
Or toggle via the TUI: **Manage Variants → Toggle Team Mode**
|
|
137
256
|
|
|
138
257
|
---
|
|
139
258
|
|
|
140
|
-
##
|
|
259
|
+
## All Commands
|
|
141
260
|
|
|
142
261
|
```bash
|
|
143
262
|
# Create & manage variants
|
|
144
|
-
npx cc-mirror
|
|
263
|
+
npx cc-mirror # Interactive TUI
|
|
145
264
|
npx cc-mirror quick [options] # Fast setup with defaults
|
|
265
|
+
npx cc-mirror create [options] # Full configuration wizard
|
|
146
266
|
npx cc-mirror list # List all variants
|
|
147
267
|
npx cc-mirror update [name] # Update one or all variants
|
|
148
268
|
npx cc-mirror remove <name> # Delete a variant
|
|
149
269
|
npx cc-mirror doctor # Health check all variants
|
|
270
|
+
npx cc-mirror tweak <name> # Launch tweakcc customization
|
|
150
271
|
|
|
151
|
-
# Task management
|
|
272
|
+
# Task management
|
|
152
273
|
npx cc-mirror tasks # List open tasks
|
|
153
274
|
npx cc-mirror tasks show <id> # Show task details
|
|
154
275
|
npx cc-mirror tasks create # Create new task
|
|
@@ -159,133 +280,57 @@ npx cc-mirror tasks clean # Bulk cleanup
|
|
|
159
280
|
npx cc-mirror tasks graph # Visualize dependencies
|
|
160
281
|
|
|
161
282
|
# Launch your variant
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
283
|
+
mclaude # Run Mirror Claude
|
|
284
|
+
zai # Run Z.ai variant
|
|
285
|
+
minimax # Run MiniMax variant
|
|
165
286
|
```
|
|
166
287
|
|
|
167
288
|
---
|
|
168
289
|
|
|
169
|
-
##
|
|
290
|
+
## CLI Options
|
|
170
291
|
|
|
171
292
|
```
|
|
172
|
-
--provider <name> zai | minimax | openrouter | ccrouter |
|
|
293
|
+
--provider <name> mirror | zai | minimax | openrouter | ccrouter | custom
|
|
173
294
|
--name <name> Variant name (becomes the CLI command)
|
|
174
295
|
--api-key <key> Provider API key
|
|
175
296
|
--base-url <url> Custom API endpoint
|
|
176
|
-
--model-sonnet <name> Map to sonnet model
|
|
177
|
-
--model-opus <name> Map to opus model
|
|
178
|
-
--model-haiku <name> Map to haiku model
|
|
297
|
+
--model-sonnet <name> Map to sonnet model
|
|
298
|
+
--model-opus <name> Map to opus model
|
|
299
|
+
--model-haiku <name> Map to haiku model
|
|
179
300
|
--brand <preset> Theme: auto | zai | minimax | openrouter | ccrouter | mirror
|
|
180
|
-
--
|
|
301
|
+
--no-team-mode Disable team mode (not recommended)
|
|
181
302
|
--no-tweak Skip tweakcc theme
|
|
182
|
-
--no-prompt-pack Skip prompt pack
|
|
303
|
+
--no-prompt-pack Skip provider prompt pack
|
|
183
304
|
```
|
|
184
305
|
|
|
185
306
|
---
|
|
186
307
|
|
|
187
|
-
##
|
|
308
|
+
## Brand Themes
|
|
188
309
|
|
|
189
|
-
Each provider includes a custom color theme:
|
|
310
|
+
Each provider includes a custom color theme via [tweakcc](https://github.com/Piebald-AI/tweakcc):
|
|
190
311
|
|
|
191
312
|
| Brand | Style |
|
|
192
313
|
| -------------- | -------------------------------- |
|
|
314
|
+
| **mirror** | Silver/chrome with electric blue |
|
|
193
315
|
| **zai** | Dark carbon with gold accents |
|
|
194
316
|
| **minimax** | Coral/red/orange spectrum |
|
|
195
317
|
| **openrouter** | Teal/cyan gradient |
|
|
196
318
|
| **ccrouter** | Sky blue accents |
|
|
197
|
-
| **mirror** | Silver/chrome with electric blue |
|
|
198
|
-
|
|
199
|
-
---
|
|
200
|
-
|
|
201
|
-
## 🤖 Team Mode
|
|
202
|
-
|
|
203
|
-
Enable multi-agent collaboration with shared task management:
|
|
204
|
-
|
|
205
|
-
```bash
|
|
206
|
-
# Enable on any variant
|
|
207
|
-
npx cc-mirror create --provider zai --name zai-team --enable-team-mode
|
|
208
|
-
|
|
209
|
-
# Mirror Claude has team mode by default
|
|
210
|
-
npx cc-mirror quick --provider mirror --name mclaude
|
|
211
|
-
```
|
|
212
|
-
|
|
213
|
-
Team mode enables: `TaskCreate`, `TaskGet`, `TaskUpdate`, `TaskList` tools plus an **orchestrator skill** that teaches Claude effective multi-agent coordination patterns.
|
|
214
|
-
|
|
215
|
-
### Tasks CLI (v1.4.0+)
|
|
216
|
-
|
|
217
|
-
Manage team tasks from the command line:
|
|
218
|
-
|
|
219
|
-
```bash
|
|
220
|
-
# List open tasks
|
|
221
|
-
npx cc-mirror tasks
|
|
222
|
-
|
|
223
|
-
# View across all teams
|
|
224
|
-
npx cc-mirror tasks --all
|
|
225
|
-
|
|
226
|
-
# Create and update tasks
|
|
227
|
-
npx cc-mirror tasks create --subject "Add auth" --description "JWT implementation"
|
|
228
|
-
npx cc-mirror tasks update 5 --status resolved --add-comment "Done"
|
|
229
|
-
|
|
230
|
-
# Cleanup resolved tasks
|
|
231
|
-
npx cc-mirror tasks clean --resolved --dry-run
|
|
232
|
-
npx cc-mirror tasks clean --resolved --force
|
|
233
|
-
|
|
234
|
-
# Archive instead of delete (preserves task history)
|
|
235
|
-
npx cc-mirror tasks archive 5
|
|
236
|
-
|
|
237
|
-
# Visualize dependency graph
|
|
238
|
-
npx cc-mirror tasks graph
|
|
239
|
-
```
|
|
240
|
-
|
|
241
|
-
### Project-Scoped Tasks (v1.2.0+)
|
|
242
|
-
|
|
243
|
-
Tasks are automatically scoped by project folder — no cross-project pollution:
|
|
244
|
-
|
|
245
|
-
```bash
|
|
246
|
-
# Run in different project folders - tasks stay isolated
|
|
247
|
-
cd ~/projects/api && mc # Team: mc-api
|
|
248
|
-
cd ~/projects/frontend && mc # Team: mc-frontend
|
|
249
|
-
|
|
250
|
-
# Multiple teams in the same project
|
|
251
|
-
TEAM=backend mc # Team: mc-myproject-backend
|
|
252
|
-
TEAM=frontend mc # Team: mc-myproject-frontend
|
|
253
|
-
```
|
|
254
|
-
|
|
255
|
-
→ [Team Mode Documentation](docs/features/team-mode.md)
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
## 🪞 Mirror Claude
|
|
260
|
-
|
|
261
|
-
A pure Claude Code variant with enhanced features:
|
|
262
|
-
|
|
263
|
-
- **No proxy** — Connects directly to Anthropic's API
|
|
264
|
-
- **Team mode** — Enabled by default
|
|
265
|
-
- **Isolated config** — Experiment without affecting your main setup
|
|
266
|
-
- **Custom theme** — Silver/chrome aesthetic
|
|
267
|
-
|
|
268
|
-
```bash
|
|
269
|
-
npx cc-mirror quick --provider mirror --name mclaude
|
|
270
|
-
mclaude # Authenticate via OAuth or API key
|
|
271
|
-
```
|
|
272
|
-
|
|
273
|
-
→ [Mirror Claude Documentation](docs/features/mirror-claude.md)
|
|
274
319
|
|
|
275
320
|
---
|
|
276
321
|
|
|
277
|
-
##
|
|
322
|
+
## Documentation
|
|
278
323
|
|
|
279
|
-
| Document | Description
|
|
280
|
-
| ----------------------------------------------- |
|
|
281
|
-
| [Team Mode](docs/features/team-mode.md) | Multi-agent collaboration
|
|
282
|
-
| [Mirror Claude](docs/features/mirror-claude.md) | Pure Claude Code with
|
|
283
|
-
| [Architecture](docs/architecture/overview.md) | How
|
|
284
|
-
| [Full Documentation](docs/README.md) | Complete documentation index
|
|
324
|
+
| Document | Description |
|
|
325
|
+
| ----------------------------------------------- | ----------------------------------- |
|
|
326
|
+
| [Team Mode](docs/features/team-mode.md) | Multi-agent collaboration deep dive |
|
|
327
|
+
| [Mirror Claude](docs/features/mirror-claude.md) | Pure Claude Code with superpowers |
|
|
328
|
+
| [Architecture](docs/architecture/overview.md) | How CC-MIRROR works under the hood |
|
|
329
|
+
| [Full Documentation](docs/README.md) | Complete documentation index |
|
|
285
330
|
|
|
286
331
|
---
|
|
287
332
|
|
|
288
|
-
##
|
|
333
|
+
## Related Projects
|
|
289
334
|
|
|
290
335
|
- [tweakcc](https://github.com/Piebald-AI/tweakcc) — Theme and customize Claude Code
|
|
291
336
|
- [Claude Code Router](https://github.com/musistudio/claude-code-router) — Route Claude Code to any LLM
|
|
@@ -293,7 +338,7 @@ mclaude # Authenticate via OAuth or API key
|
|
|
293
338
|
|
|
294
339
|
---
|
|
295
340
|
|
|
296
|
-
##
|
|
341
|
+
## Contributing
|
|
297
342
|
|
|
298
343
|
Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for development setup.
|
|
299
344
|
|
|
@@ -301,7 +346,7 @@ Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for development se
|
|
|
301
346
|
|
|
302
347
|
---
|
|
303
348
|
|
|
304
|
-
##
|
|
349
|
+
## License
|
|
305
350
|
|
|
306
351
|
MIT — see [LICENSE](LICENSE)
|
|
307
352
|
|
package/dist/cc-mirror.mjs
CHANGED
|
@@ -92,34 +92,40 @@ var printHelp = () => {
|
|
|
92
92
|
console.log(`
|
|
93
93
|
\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557
|
|
94
94
|
\u2551 CC-MIRROR \u2551
|
|
95
|
-
\u2551
|
|
95
|
+
\u2551 Claude Code, Unshackled \u2551
|
|
96
96
|
\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D
|
|
97
97
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
98
|
+
Pre-configured Claude Code variants with multi-agent orchestration,
|
|
99
|
+
custom providers, and battle-tested enhancements.
|
|
100
|
+
|
|
101
|
+
One command. Instant power-up.
|
|
102
|
+
|
|
103
|
+
THE UNLOCK
|
|
104
|
+
Claude Code has a hidden multi-agent capability. CC-MIRROR enables it.
|
|
105
|
+
Team mode unlocks: TaskCreate, TaskGet, TaskUpdate, TaskList tools
|
|
106
|
+
plus a battle-tested orchestrator skill for coordinating agents.
|
|
102
107
|
|
|
103
108
|
QUICK START
|
|
104
|
-
npx cc-mirror quick
|
|
105
|
-
npx cc-mirror
|
|
109
|
+
npx cc-mirror quick --provider mirror # Fastest path to multi-agent
|
|
110
|
+
npx cc-mirror quick --provider zai # Z.ai with GLM models
|
|
111
|
+
npx cc-mirror # Interactive TUI
|
|
106
112
|
|
|
107
113
|
COMMANDS
|
|
108
|
-
|
|
109
|
-
|
|
114
|
+
quick [options] Fast setup: provider \u2192 ready in 30s
|
|
115
|
+
create [options] Full configuration wizard
|
|
110
116
|
list List all variants
|
|
111
117
|
update [name] Update to latest Claude Code
|
|
112
118
|
remove <name> Remove a variant
|
|
113
119
|
doctor Health check all variants
|
|
114
120
|
tweak <name> Launch tweakcc customization
|
|
115
|
-
tasks [operation] Manage team tasks (list, show, create, update, delete, clean)
|
|
121
|
+
tasks [operation] Manage team tasks (list, show, create, update, delete, clean, graph)
|
|
116
122
|
|
|
117
123
|
OPTIONS (create/quick)
|
|
118
124
|
--name <name> Variant name (becomes CLI command)
|
|
119
|
-
--provider <name> Provider: zai | minimax | openrouter | ccrouter
|
|
125
|
+
--provider <name> Provider: mirror | zai | minimax | openrouter | ccrouter
|
|
120
126
|
--api-key <key> Provider API key
|
|
121
|
-
--brand <preset> Theme: auto | none | zai | minimax
|
|
122
|
-
--
|
|
127
|
+
--brand <preset> Theme: auto | none | mirror | zai | minimax
|
|
128
|
+
--no-team-mode Disable team mode (not recommended)
|
|
123
129
|
--tui / --no-tui Force TUI on/off
|
|
124
130
|
|
|
125
131
|
OPTIONS (advanced)
|
|
@@ -131,13 +137,19 @@ OPTIONS (advanced)
|
|
|
131
137
|
--bin-dir <path> Wrapper install dir (default: ~/.local/bin)
|
|
132
138
|
--no-tweak Skip tweakcc theming
|
|
133
139
|
--no-prompt-pack Skip provider prompt pack
|
|
134
|
-
--
|
|
135
|
-
|
|
140
|
+
--shell-env Write env vars to shell profile
|
|
141
|
+
|
|
142
|
+
PROVIDERS
|
|
143
|
+
mirror Pure Claude with team mode (recommended)
|
|
144
|
+
zai GLM-4.7 via Z.ai Coding Plan
|
|
145
|
+
minimax MiniMax-M2.1 via MiniMax Cloud
|
|
146
|
+
openrouter 100+ models via OpenRouter
|
|
147
|
+
ccrouter Local LLMs via Claude Code Router
|
|
136
148
|
|
|
137
149
|
EXAMPLES
|
|
138
|
-
npx cc-mirror quick --provider
|
|
139
|
-
npx cc-mirror
|
|
140
|
-
npx cc-mirror
|
|
150
|
+
npx cc-mirror quick --provider mirror --name mclaude
|
|
151
|
+
npx cc-mirror quick --provider zai --api-key "$Z_AI_API_KEY"
|
|
152
|
+
npx cc-mirror tasks graph
|
|
141
153
|
npx cc-mirror doctor
|
|
142
154
|
|
|
143
155
|
LEARN MORE
|
|
@@ -198,7 +210,7 @@ var DEFAULT_ROOT = path2.join(os.homedir(), ".cc-mirror");
|
|
|
198
210
|
var DEFAULT_BIN_DIR = path2.join(os.homedir(), ".local", "bin");
|
|
199
211
|
var TWEAKCC_VERSION = "3.2.2";
|
|
200
212
|
var DEFAULT_NPM_PACKAGE = "@anthropic-ai/claude-code";
|
|
201
|
-
var DEFAULT_NPM_VERSION = "2.
|
|
213
|
+
var DEFAULT_NPM_VERSION = "2.1.1";
|
|
202
214
|
|
|
203
215
|
// src/core/fs.ts
|
|
204
216
|
import fs2 from "node:fs";
|
|
@@ -1990,10 +2002,33 @@ import path17 from "node:path";
|
|
|
1990
2002
|
var DEFAULT_TIMEOUT_MS = "3000000";
|
|
1991
2003
|
var CCROUTER_AUTH_FALLBACK = "ccrouter-proxy";
|
|
1992
2004
|
var PROVIDERS = {
|
|
2005
|
+
mirror: {
|
|
2006
|
+
key: "mirror",
|
|
2007
|
+
label: "Mirror Claude",
|
|
2008
|
+
description: "Pure Claude with team mode \u2014 the fastest path to multi-agent",
|
|
2009
|
+
baseUrl: "",
|
|
2010
|
+
// Empty = use Claude Code defaults (no ANTHROPIC_BASE_URL override)
|
|
2011
|
+
env: {
|
|
2012
|
+
// Only cosmetic settings - no auth or model overrides
|
|
2013
|
+
CC_MIRROR_SPLASH: 1,
|
|
2014
|
+
CC_MIRROR_PROVIDER_LABEL: "Mirror Claude",
|
|
2015
|
+
CC_MIRROR_SPLASH_STYLE: "mirror"
|
|
2016
|
+
},
|
|
2017
|
+
apiKeyLabel: "",
|
|
2018
|
+
// Empty = skip API key prompt
|
|
2019
|
+
authMode: "none",
|
|
2020
|
+
// No auth handling - user authenticates via normal Claude flow
|
|
2021
|
+
credentialOptional: true,
|
|
2022
|
+
// No credentials required at create time
|
|
2023
|
+
enablesTeamMode: true,
|
|
2024
|
+
// Auto-enable team mode patch
|
|
2025
|
+
noPromptPack: true
|
|
2026
|
+
// Skip prompt pack (pure Claude experience)
|
|
2027
|
+
},
|
|
1993
2028
|
zai: {
|
|
1994
2029
|
key: "zai",
|
|
1995
2030
|
label: "Zai Cloud",
|
|
1996
|
-
description: "GLM Coding Plan
|
|
2031
|
+
description: "GLM-4.7 via Z.ai Coding Plan",
|
|
1997
2032
|
baseUrl: "https://api.z.ai/api/anthropic",
|
|
1998
2033
|
env: {
|
|
1999
2034
|
API_TIMEOUT_MS: DEFAULT_TIMEOUT_MS,
|
|
@@ -2009,7 +2044,7 @@ var PROVIDERS = {
|
|
|
2009
2044
|
minimax: {
|
|
2010
2045
|
key: "minimax",
|
|
2011
2046
|
label: "MiniMax Cloud",
|
|
2012
|
-
description: "MiniMax-M2.1 via
|
|
2047
|
+
description: "MiniMax-M2.1 via MiniMax Cloud",
|
|
2013
2048
|
baseUrl: "https://api.minimax.io/anthropic",
|
|
2014
2049
|
env: {
|
|
2015
2050
|
API_TIMEOUT_MS: DEFAULT_TIMEOUT_MS,
|
|
@@ -2028,7 +2063,7 @@ var PROVIDERS = {
|
|
|
2028
2063
|
openrouter: {
|
|
2029
2064
|
key: "openrouter",
|
|
2030
2065
|
label: "OpenRouter",
|
|
2031
|
-
description: "
|
|
2066
|
+
description: "100+ models via OpenRouter gateway",
|
|
2032
2067
|
baseUrl: "https://openrouter.ai/api",
|
|
2033
2068
|
env: {
|
|
2034
2069
|
API_TIMEOUT_MS: DEFAULT_TIMEOUT_MS,
|
|
@@ -2043,7 +2078,7 @@ var PROVIDERS = {
|
|
|
2043
2078
|
ccrouter: {
|
|
2044
2079
|
key: "ccrouter",
|
|
2045
2080
|
label: "Claude Code Router",
|
|
2046
|
-
description: "
|
|
2081
|
+
description: "Local LLMs via Claude Code Router",
|
|
2047
2082
|
baseUrl: "http://127.0.0.1:3456",
|
|
2048
2083
|
env: {
|
|
2049
2084
|
API_TIMEOUT_MS: DEFAULT_TIMEOUT_MS,
|
|
@@ -2058,29 +2093,6 @@ var PROVIDERS = {
|
|
|
2058
2093
|
credentialOptional: true
|
|
2059
2094
|
// No API key needed - CCRouter handles auth
|
|
2060
2095
|
},
|
|
2061
|
-
mirror: {
|
|
2062
|
-
key: "mirror",
|
|
2063
|
-
label: "Mirror Claude",
|
|
2064
|
-
description: "Pure Claude Code with advanced features (team mode, custom theme)",
|
|
2065
|
-
baseUrl: "",
|
|
2066
|
-
// Empty = use Claude Code defaults (no ANTHROPIC_BASE_URL override)
|
|
2067
|
-
env: {
|
|
2068
|
-
// Only cosmetic settings - no auth or model overrides
|
|
2069
|
-
CC_MIRROR_SPLASH: 1,
|
|
2070
|
-
CC_MIRROR_PROVIDER_LABEL: "Mirror Claude",
|
|
2071
|
-
CC_MIRROR_SPLASH_STYLE: "mirror"
|
|
2072
|
-
},
|
|
2073
|
-
apiKeyLabel: "",
|
|
2074
|
-
// Empty = skip API key prompt
|
|
2075
|
-
authMode: "none",
|
|
2076
|
-
// No auth handling - user authenticates via normal Claude flow
|
|
2077
|
-
credentialOptional: true,
|
|
2078
|
-
// No credentials required at create time
|
|
2079
|
-
enablesTeamMode: true,
|
|
2080
|
-
// Auto-enable team mode patch
|
|
2081
|
-
noPromptPack: true
|
|
2082
|
-
// Skip prompt pack (pure Claude experience)
|
|
2083
|
-
},
|
|
2084
2096
|
custom: {
|
|
2085
2097
|
key: "custom",
|
|
2086
2098
|
label: "Custom",
|
|
@@ -2660,8 +2672,8 @@ var configureTeamToolset = (configPath) => {
|
|
|
2660
2672
|
};
|
|
2661
2673
|
|
|
2662
2674
|
// src/core/variant-builder/steps/TeamModeStep.ts
|
|
2663
|
-
var TEAM_MODE_DISABLED = "function
|
|
2664
|
-
var TEAM_MODE_ENABLED = "function
|
|
2675
|
+
var TEAM_MODE_DISABLED = "function Uq(){return!1}";
|
|
2676
|
+
var TEAM_MODE_ENABLED = "function Uq(){return!0}";
|
|
2665
2677
|
var TeamModeStep = class {
|
|
2666
2678
|
name = "TeamMode";
|
|
2667
2679
|
shouldEnableTeamMode(ctx) {
|
|
@@ -4112,8 +4124,8 @@ var InstallNpmUpdateStep = class {
|
|
|
4112
4124
|
// src/core/variant-builder/update-steps/TeamModeUpdateStep.ts
|
|
4113
4125
|
import fs13 from "node:fs";
|
|
4114
4126
|
import path18 from "node:path";
|
|
4115
|
-
var TEAM_MODE_DISABLED2 = "function
|
|
4116
|
-
var TEAM_MODE_ENABLED2 = "function
|
|
4127
|
+
var TEAM_MODE_DISABLED2 = "function Uq(){return!1}";
|
|
4128
|
+
var TEAM_MODE_ENABLED2 = "function Uq(){return!0}";
|
|
4117
4129
|
var TeamModeUpdateStep = class {
|
|
4118
4130
|
name = "TeamMode";
|
|
4119
4131
|
shouldEnableTeamMode(ctx) {
|
|
@@ -5285,6 +5297,13 @@ function filterTasks(tasks, filter, allTasks) {
|
|
|
5285
5297
|
filtered = filtered.filter((t) => !isBlocking(t));
|
|
5286
5298
|
}
|
|
5287
5299
|
}
|
|
5300
|
+
if (filter.ready !== void 0) {
|
|
5301
|
+
if (filter.ready) {
|
|
5302
|
+
filtered = filtered.filter((t) => t.status === "open" && !isBlocked(t, taskContext));
|
|
5303
|
+
} else {
|
|
5304
|
+
filtered = filtered.filter((t) => t.status === "resolved" || isBlocked(t, taskContext));
|
|
5305
|
+
}
|
|
5306
|
+
}
|
|
5288
5307
|
if (filter.owner) {
|
|
5289
5308
|
filtered = filtered.filter((t) => t.owner === filter.owner);
|
|
5290
5309
|
}
|
|
@@ -5297,18 +5316,51 @@ function getTaskSummary(tasks) {
|
|
|
5297
5316
|
const open = tasks.filter((t) => t.status === "open");
|
|
5298
5317
|
const resolved = tasks.filter((t) => t.status === "resolved");
|
|
5299
5318
|
const blocked = open.filter((t) => isBlocked(t, tasks));
|
|
5319
|
+
const ready = open.filter((t) => !isBlocked(t, tasks));
|
|
5300
5320
|
return {
|
|
5301
5321
|
total: tasks.length,
|
|
5302
5322
|
open: open.length,
|
|
5303
5323
|
resolved: resolved.length,
|
|
5324
|
+
ready: ready.length,
|
|
5304
5325
|
blocked: blocked.length
|
|
5305
5326
|
};
|
|
5306
5327
|
}
|
|
5328
|
+
function getOpenBlockers(task, allTasks) {
|
|
5329
|
+
if (task.blockedBy.length === 0) return [];
|
|
5330
|
+
const taskMap = new Map(allTasks.map((t) => [t.id, t]));
|
|
5331
|
+
return task.blockedBy.filter((id) => {
|
|
5332
|
+
const blockingTask = taskMap.get(id);
|
|
5333
|
+
return blockingTask && blockingTask.status === "open";
|
|
5334
|
+
});
|
|
5335
|
+
}
|
|
5307
5336
|
function sortTasksById(tasks) {
|
|
5308
5337
|
return [...tasks].sort((a, b) => parseInt(a.id, 10) - parseInt(b.id, 10));
|
|
5309
5338
|
}
|
|
5310
5339
|
|
|
5311
5340
|
// src/cli/commands/tasks/output.ts
|
|
5341
|
+
function enrichTask(task, allTasks) {
|
|
5342
|
+
const taskMap = new Map(allTasks.map((t) => [t.id, t]));
|
|
5343
|
+
const blockedByWithStatus = task.blockedBy.map((id) => {
|
|
5344
|
+
const blockingTask = taskMap.get(id);
|
|
5345
|
+
return {
|
|
5346
|
+
id,
|
|
5347
|
+
status: blockingTask ? blockingTask.status : "unknown"
|
|
5348
|
+
};
|
|
5349
|
+
});
|
|
5350
|
+
return {
|
|
5351
|
+
id: task.id,
|
|
5352
|
+
subject: task.subject,
|
|
5353
|
+
description: task.description,
|
|
5354
|
+
status: task.status,
|
|
5355
|
+
owner: task.owner,
|
|
5356
|
+
blocked: isBlocked(task, allTasks),
|
|
5357
|
+
blockedBy: blockedByWithStatus,
|
|
5358
|
+
openBlockers: getOpenBlockers(task, allTasks),
|
|
5359
|
+
blocks: task.blocks,
|
|
5360
|
+
references: task.references,
|
|
5361
|
+
comments: task.comments
|
|
5362
|
+
};
|
|
5363
|
+
}
|
|
5312
5364
|
function truncate(text, maxLen) {
|
|
5313
5365
|
if (text.length <= maxLen) return text;
|
|
5314
5366
|
return text.slice(0, maxLen - 3) + "...";
|
|
@@ -5395,24 +5447,26 @@ function formatTaskDetail(task, location, allTasks) {
|
|
|
5395
5447
|
}
|
|
5396
5448
|
return lines.join("\n");
|
|
5397
5449
|
}
|
|
5398
|
-
function formatTasksJson(tasks, location, summary) {
|
|
5450
|
+
function formatTasksJson(tasks, location, summary, allTasks) {
|
|
5451
|
+
const enrichedTasks = tasks.map((t) => enrichTask(t, allTasks));
|
|
5399
5452
|
return JSON.stringify(
|
|
5400
5453
|
{
|
|
5401
5454
|
variant: location.variant,
|
|
5402
5455
|
team: location.team,
|
|
5403
|
-
tasks,
|
|
5456
|
+
tasks: enrichedTasks,
|
|
5404
5457
|
summary
|
|
5405
5458
|
},
|
|
5406
5459
|
null,
|
|
5407
5460
|
2
|
|
5408
5461
|
);
|
|
5409
5462
|
}
|
|
5410
|
-
function formatTaskJson(task, location) {
|
|
5463
|
+
function formatTaskJson(task, location, allTasks) {
|
|
5464
|
+
const enrichedTask = enrichTask(task, allTasks);
|
|
5411
5465
|
return JSON.stringify(
|
|
5412
5466
|
{
|
|
5413
5467
|
variant: location.variant,
|
|
5414
5468
|
team: location.team,
|
|
5415
|
-
task
|
|
5469
|
+
task: enrichedTask
|
|
5416
5470
|
},
|
|
5417
5471
|
null,
|
|
5418
5472
|
2
|
|
@@ -5421,10 +5475,10 @@ function formatTaskJson(task, location) {
|
|
|
5421
5475
|
function formatMultiLocationJson(tasksByLocation) {
|
|
5422
5476
|
return JSON.stringify(
|
|
5423
5477
|
{
|
|
5424
|
-
locations: tasksByLocation.map(({ location, tasks, summary }) => ({
|
|
5478
|
+
locations: tasksByLocation.map(({ location, tasks, allTasks, summary }) => ({
|
|
5425
5479
|
variant: location.variant,
|
|
5426
5480
|
team: location.team,
|
|
5427
|
-
tasks,
|
|
5481
|
+
tasks: tasks.map((t) => enrichTask(t, allTasks)),
|
|
5428
5482
|
summary
|
|
5429
5483
|
}))
|
|
5430
5484
|
},
|
|
@@ -5465,6 +5519,7 @@ function runTasksList(opts) {
|
|
|
5465
5519
|
status: opts.status || "open",
|
|
5466
5520
|
blocked: opts.blocked,
|
|
5467
5521
|
blocking: opts.blocking,
|
|
5522
|
+
ready: opts.ready,
|
|
5468
5523
|
owner: opts.owner,
|
|
5469
5524
|
limit: opts.limit
|
|
5470
5525
|
},
|
|
@@ -5472,12 +5527,12 @@ function runTasksList(opts) {
|
|
|
5472
5527
|
);
|
|
5473
5528
|
const sortedTasks = sortTasksById(filteredTasks);
|
|
5474
5529
|
const summary = getTaskSummary(allTasks);
|
|
5475
|
-
return { location, tasks: sortedTasks, summary };
|
|
5530
|
+
return { location, tasks: sortedTasks, allTasks, summary };
|
|
5476
5531
|
});
|
|
5477
5532
|
if (opts.json) {
|
|
5478
5533
|
if (tasksByLocation.length === 1) {
|
|
5479
|
-
const { location, tasks, summary } = tasksByLocation[0];
|
|
5480
|
-
console.log(formatTasksJson(tasks, location, summary));
|
|
5534
|
+
const { location, tasks, allTasks, summary } = tasksByLocation[0];
|
|
5535
|
+
console.log(formatTasksJson(tasks, location, summary, allTasks));
|
|
5481
5536
|
} else {
|
|
5482
5537
|
console.log(formatMultiLocationJson(tasksByLocation));
|
|
5483
5538
|
}
|
|
@@ -5508,7 +5563,7 @@ function runTasksShow(opts) {
|
|
|
5508
5563
|
if (task) {
|
|
5509
5564
|
const allTasks = loadAllTasks(location.tasksDir);
|
|
5510
5565
|
if (opts.json) {
|
|
5511
|
-
console.log(formatTaskJson(task, location));
|
|
5566
|
+
console.log(formatTaskJson(task, location, allTasks));
|
|
5512
5567
|
} else {
|
|
5513
5568
|
console.log(formatTaskDetail(task, location, allTasks));
|
|
5514
5569
|
}
|
|
@@ -5544,7 +5599,8 @@ function runTasksCreate(opts) {
|
|
|
5544
5599
|
blockedBy: opts.blockedBy
|
|
5545
5600
|
});
|
|
5546
5601
|
if (opts.json) {
|
|
5547
|
-
|
|
5602
|
+
const allTasks = loadAllTasks(location.tasksDir);
|
|
5603
|
+
console.log(formatTaskJson(task, location, allTasks));
|
|
5548
5604
|
} else {
|
|
5549
5605
|
console.log(`Created task #${task.id}: ${task.subject}`);
|
|
5550
5606
|
console.log(`Location: ${location.variant} / ${location.team}`);
|
|
@@ -5594,7 +5650,8 @@ function runTasksUpdate(opts) {
|
|
|
5594
5650
|
}
|
|
5595
5651
|
saveTask(location.tasksDir, task);
|
|
5596
5652
|
if (opts.json) {
|
|
5597
|
-
|
|
5653
|
+
const allTasks = loadAllTasks(location.tasksDir);
|
|
5654
|
+
console.log(formatTaskJson(task, location, allTasks));
|
|
5598
5655
|
} else {
|
|
5599
5656
|
console.log(`Updated task #${task.id}: ${task.subject}`);
|
|
5600
5657
|
}
|
|
@@ -5824,6 +5881,54 @@ function formatTaskGraph(tasks, variant, team) {
|
|
|
5824
5881
|
lines.push(`Total: ${tasks.length} | Open: ${open.length} | Ready: ${ready.length} | Blocked: ${blocked.length}`);
|
|
5825
5882
|
return lines.join("\n");
|
|
5826
5883
|
}
|
|
5884
|
+
function formatTaskGraphJson(tasks, variant, team) {
|
|
5885
|
+
const taskMap = new Map(tasks.map((t) => [t.id, t]));
|
|
5886
|
+
const nodes = tasks.map((task) => ({
|
|
5887
|
+
id: task.id,
|
|
5888
|
+
subject: task.subject,
|
|
5889
|
+
status: task.status,
|
|
5890
|
+
blocked: isBlocked(task, tasks),
|
|
5891
|
+
blockedBy: task.blockedBy.map((id) => ({
|
|
5892
|
+
id,
|
|
5893
|
+
status: taskMap.get(id)?.status ?? "unknown"
|
|
5894
|
+
})),
|
|
5895
|
+
openBlockers: getOpenBlockers(task, tasks),
|
|
5896
|
+
blocks: task.blocks,
|
|
5897
|
+
depth: calculateDepth(task, tasks, /* @__PURE__ */ new Set())
|
|
5898
|
+
}));
|
|
5899
|
+
const roots = tasks.filter((t) => t.blockedBy.length === 0).map((t) => t.id);
|
|
5900
|
+
const leaves = tasks.filter((t) => t.blocks.length === 0).map((t) => t.id);
|
|
5901
|
+
const orphans = tasks.filter((t) => t.blockedBy.length > 0 && t.blockedBy.some((id) => !taskMap.has(id))).map((t) => t.id);
|
|
5902
|
+
const summary = getTaskSummary(tasks);
|
|
5903
|
+
return JSON.stringify(
|
|
5904
|
+
{
|
|
5905
|
+
variant,
|
|
5906
|
+
team,
|
|
5907
|
+
nodes,
|
|
5908
|
+
roots,
|
|
5909
|
+
leaves,
|
|
5910
|
+
orphans,
|
|
5911
|
+
summary
|
|
5912
|
+
},
|
|
5913
|
+
null,
|
|
5914
|
+
2
|
|
5915
|
+
);
|
|
5916
|
+
}
|
|
5917
|
+
function calculateDepth(task, allTasks, visited) {
|
|
5918
|
+
if (task.blockedBy.length === 0) return 0;
|
|
5919
|
+
if (visited.has(task.id)) return 0;
|
|
5920
|
+
visited.add(task.id);
|
|
5921
|
+
const taskMap = new Map(allTasks.map((t) => [t.id, t]));
|
|
5922
|
+
let maxDepth = 0;
|
|
5923
|
+
for (const blockerId of task.blockedBy) {
|
|
5924
|
+
const blocker = taskMap.get(blockerId);
|
|
5925
|
+
if (blocker) {
|
|
5926
|
+
const depth = calculateDepth(blocker, allTasks, new Set(visited));
|
|
5927
|
+
maxDepth = Math.max(maxDepth, depth + 1);
|
|
5928
|
+
}
|
|
5929
|
+
}
|
|
5930
|
+
return maxDepth;
|
|
5931
|
+
}
|
|
5827
5932
|
function runTasksGraph(opts) {
|
|
5828
5933
|
const context = resolveContext({
|
|
5829
5934
|
rootDir: opts.rootDir,
|
|
@@ -5837,10 +5942,29 @@ function runTasksGraph(opts) {
|
|
|
5837
5942
|
const location = context.locations[0];
|
|
5838
5943
|
const tasks = loadAllTasks(location.tasksDir);
|
|
5839
5944
|
if (tasks.length === 0) {
|
|
5840
|
-
|
|
5945
|
+
if (opts.json) {
|
|
5946
|
+
console.log(
|
|
5947
|
+
JSON.stringify(
|
|
5948
|
+
{
|
|
5949
|
+
variant: location.variant,
|
|
5950
|
+
team: location.team,
|
|
5951
|
+
nodes: [],
|
|
5952
|
+
summary: { total: 0, open: 0, resolved: 0, ready: 0, blocked: 0 }
|
|
5953
|
+
},
|
|
5954
|
+
null,
|
|
5955
|
+
2
|
|
5956
|
+
)
|
|
5957
|
+
);
|
|
5958
|
+
} else {
|
|
5959
|
+
console.log(`No tasks found in ${location.variant} / ${location.team}`);
|
|
5960
|
+
}
|
|
5841
5961
|
return;
|
|
5842
5962
|
}
|
|
5843
|
-
|
|
5963
|
+
if (opts.json) {
|
|
5964
|
+
console.log(formatTaskGraphJson(tasks, location.variant, location.team));
|
|
5965
|
+
} else {
|
|
5966
|
+
console.log(formatTaskGraph(tasks, location.variant, location.team));
|
|
5967
|
+
}
|
|
5844
5968
|
}
|
|
5845
5969
|
|
|
5846
5970
|
// src/cli/commands/tasks/archive.ts
|
|
@@ -5961,6 +6085,7 @@ LIST OPTIONS:
|
|
|
5961
6085
|
--status <s> Filter: open, resolved, all (default: open)
|
|
5962
6086
|
--blocked Show only blocked tasks
|
|
5963
6087
|
--blocking Show only tasks blocking others
|
|
6088
|
+
--ready Show only ready tasks (open + not blocked)
|
|
5964
6089
|
--owner <id> Filter by owner
|
|
5965
6090
|
--limit <n> Limit results (default: 50)
|
|
5966
6091
|
|
|
@@ -6100,7 +6225,7 @@ async function runTasksCommand({ opts }) {
|
|
|
6100
6225
|
break;
|
|
6101
6226
|
}
|
|
6102
6227
|
case "graph": {
|
|
6103
|
-
runTasksGraph({ rootDir, variant, team });
|
|
6228
|
+
runTasksGraph({ rootDir, variant, team, json });
|
|
6104
6229
|
break;
|
|
6105
6230
|
}
|
|
6106
6231
|
case "archive": {
|
|
@@ -6127,6 +6252,7 @@ async function runTasksCommand({ opts }) {
|
|
|
6127
6252
|
status: opts.status || "open",
|
|
6128
6253
|
blocked: opts.blocked !== void 0 ? Boolean(opts.blocked) : void 0,
|
|
6129
6254
|
blocking: opts.blocking !== void 0 ? Boolean(opts.blocking) : void 0,
|
|
6255
|
+
ready: opts.ready !== void 0 ? Boolean(opts.ready) : void 0,
|
|
6130
6256
|
owner: opts.owner,
|
|
6131
6257
|
limit: opts.limit !== void 0 ? Number(opts.limit) : 50,
|
|
6132
6258
|
json
|
|
@@ -252,22 +252,22 @@ TaskOutput(task_id="abc123")
|
|
|
252
252
|
|
|
253
253
|
### Model Selection
|
|
254
254
|
|
|
255
|
-
| Task Type
|
|
256
|
-
|
|
|
257
|
-
| Fetch files, grep, find things
|
|
258
|
-
| Gather info for synthesis
|
|
259
|
-
| Well-structured implementation
|
|
260
|
-
| Research, reading docs
|
|
261
|
-
| Security review
|
|
262
|
-
| Architecture/design decisions
|
|
263
|
-
| Complex debugging
|
|
255
|
+
| Task Type | Model | Why |
|
|
256
|
+
| ------------------------------ | -------- | ----------------------------------------- |
|
|
257
|
+
| Fetch files, grep, find things | `haiku` | Errand runner - spawn many in parallel |
|
|
258
|
+
| Gather info for synthesis | `haiku` | No judgment needed, just retrieval |
|
|
259
|
+
| Well-structured implementation | `sonnet` | Capable worker - needs clear direction |
|
|
260
|
+
| Research, reading docs | `sonnet` | Can follow patterns and instructions |
|
|
261
|
+
| Security review | `opus` | Critical thinking, trust its judgment |
|
|
262
|
+
| Architecture/design decisions | `opus` | Ambiguous, needs creative problem-solving |
|
|
263
|
+
| Complex debugging | `opus` | Reasoning across systems |
|
|
264
264
|
|
|
265
265
|
### Parallelism Strategy
|
|
266
266
|
|
|
267
|
-
| Priority | Approach
|
|
268
|
-
| ------------ |
|
|
269
|
-
| **Speed** | Swarm of haiku for gathering, parallel sonnet work
|
|
270
|
-
| **Cost** | Haiku wherever possible, sonnet only when needed
|
|
267
|
+
| Priority | Approach |
|
|
268
|
+
| ------------ | ---------------------------------------------------- |
|
|
269
|
+
| **Speed** | Swarm of haiku for gathering, parallel sonnet work |
|
|
270
|
+
| **Cost** | Haiku wherever possible, sonnet only when needed |
|
|
271
271
|
| **Balanced** | Haiku to gather, sonnet to implement, opus to decide |
|
|
272
272
|
|
|
273
273
|
---
|
package/dist/tui.mjs
CHANGED
|
@@ -1577,7 +1577,7 @@ var DEFAULT_ROOT = path.join(os2.homedir(), ".cc-mirror");
|
|
|
1577
1577
|
var DEFAULT_BIN_DIR = path.join(os2.homedir(), ".local", "bin");
|
|
1578
1578
|
var TWEAKCC_VERSION = "3.2.2";
|
|
1579
1579
|
var DEFAULT_NPM_PACKAGE = "@anthropic-ai/claude-code";
|
|
1580
|
-
var DEFAULT_NPM_VERSION = "2.
|
|
1580
|
+
var DEFAULT_NPM_VERSION = "2.1.1";
|
|
1581
1581
|
|
|
1582
1582
|
// src/core/fs.ts
|
|
1583
1583
|
import fs from "node:fs";
|
|
@@ -1849,10 +1849,33 @@ __export(providers_exports, {
|
|
|
1849
1849
|
var DEFAULT_TIMEOUT_MS = "3000000";
|
|
1850
1850
|
var CCROUTER_AUTH_FALLBACK = "ccrouter-proxy";
|
|
1851
1851
|
var PROVIDERS = {
|
|
1852
|
+
mirror: {
|
|
1853
|
+
key: "mirror",
|
|
1854
|
+
label: "Mirror Claude",
|
|
1855
|
+
description: "Pure Claude with team mode \u2014 the fastest path to multi-agent",
|
|
1856
|
+
baseUrl: "",
|
|
1857
|
+
// Empty = use Claude Code defaults (no ANTHROPIC_BASE_URL override)
|
|
1858
|
+
env: {
|
|
1859
|
+
// Only cosmetic settings - no auth or model overrides
|
|
1860
|
+
CC_MIRROR_SPLASH: 1,
|
|
1861
|
+
CC_MIRROR_PROVIDER_LABEL: "Mirror Claude",
|
|
1862
|
+
CC_MIRROR_SPLASH_STYLE: "mirror"
|
|
1863
|
+
},
|
|
1864
|
+
apiKeyLabel: "",
|
|
1865
|
+
// Empty = skip API key prompt
|
|
1866
|
+
authMode: "none",
|
|
1867
|
+
// No auth handling - user authenticates via normal Claude flow
|
|
1868
|
+
credentialOptional: true,
|
|
1869
|
+
// No credentials required at create time
|
|
1870
|
+
enablesTeamMode: true,
|
|
1871
|
+
// Auto-enable team mode patch
|
|
1872
|
+
noPromptPack: true
|
|
1873
|
+
// Skip prompt pack (pure Claude experience)
|
|
1874
|
+
},
|
|
1852
1875
|
zai: {
|
|
1853
1876
|
key: "zai",
|
|
1854
1877
|
label: "Zai Cloud",
|
|
1855
|
-
description: "GLM Coding Plan
|
|
1878
|
+
description: "GLM-4.7 via Z.ai Coding Plan",
|
|
1856
1879
|
baseUrl: "https://api.z.ai/api/anthropic",
|
|
1857
1880
|
env: {
|
|
1858
1881
|
API_TIMEOUT_MS: DEFAULT_TIMEOUT_MS,
|
|
@@ -1868,7 +1891,7 @@ var PROVIDERS = {
|
|
|
1868
1891
|
minimax: {
|
|
1869
1892
|
key: "minimax",
|
|
1870
1893
|
label: "MiniMax Cloud",
|
|
1871
|
-
description: "MiniMax-M2.1 via
|
|
1894
|
+
description: "MiniMax-M2.1 via MiniMax Cloud",
|
|
1872
1895
|
baseUrl: "https://api.minimax.io/anthropic",
|
|
1873
1896
|
env: {
|
|
1874
1897
|
API_TIMEOUT_MS: DEFAULT_TIMEOUT_MS,
|
|
@@ -1887,7 +1910,7 @@ var PROVIDERS = {
|
|
|
1887
1910
|
openrouter: {
|
|
1888
1911
|
key: "openrouter",
|
|
1889
1912
|
label: "OpenRouter",
|
|
1890
|
-
description: "
|
|
1913
|
+
description: "100+ models via OpenRouter gateway",
|
|
1891
1914
|
baseUrl: "https://openrouter.ai/api",
|
|
1892
1915
|
env: {
|
|
1893
1916
|
API_TIMEOUT_MS: DEFAULT_TIMEOUT_MS,
|
|
@@ -1902,7 +1925,7 @@ var PROVIDERS = {
|
|
|
1902
1925
|
ccrouter: {
|
|
1903
1926
|
key: "ccrouter",
|
|
1904
1927
|
label: "Claude Code Router",
|
|
1905
|
-
description: "
|
|
1928
|
+
description: "Local LLMs via Claude Code Router",
|
|
1906
1929
|
baseUrl: "http://127.0.0.1:3456",
|
|
1907
1930
|
env: {
|
|
1908
1931
|
API_TIMEOUT_MS: DEFAULT_TIMEOUT_MS,
|
|
@@ -1917,29 +1940,6 @@ var PROVIDERS = {
|
|
|
1917
1940
|
credentialOptional: true
|
|
1918
1941
|
// No API key needed - CCRouter handles auth
|
|
1919
1942
|
},
|
|
1920
|
-
mirror: {
|
|
1921
|
-
key: "mirror",
|
|
1922
|
-
label: "Mirror Claude",
|
|
1923
|
-
description: "Pure Claude Code with advanced features (team mode, custom theme)",
|
|
1924
|
-
baseUrl: "",
|
|
1925
|
-
// Empty = use Claude Code defaults (no ANTHROPIC_BASE_URL override)
|
|
1926
|
-
env: {
|
|
1927
|
-
// Only cosmetic settings - no auth or model overrides
|
|
1928
|
-
CC_MIRROR_SPLASH: 1,
|
|
1929
|
-
CC_MIRROR_PROVIDER_LABEL: "Mirror Claude",
|
|
1930
|
-
CC_MIRROR_SPLASH_STYLE: "mirror"
|
|
1931
|
-
},
|
|
1932
|
-
apiKeyLabel: "",
|
|
1933
|
-
// Empty = skip API key prompt
|
|
1934
|
-
authMode: "none",
|
|
1935
|
-
// No auth handling - user authenticates via normal Claude flow
|
|
1936
|
-
credentialOptional: true,
|
|
1937
|
-
// No credentials required at create time
|
|
1938
|
-
enablesTeamMode: true,
|
|
1939
|
-
// Auto-enable team mode patch
|
|
1940
|
-
noPromptPack: true
|
|
1941
|
-
// Skip prompt pack (pure Claude experience)
|
|
1942
|
-
},
|
|
1943
1943
|
custom: {
|
|
1944
1944
|
key: "custom",
|
|
1945
1945
|
label: "Custom",
|
|
@@ -2520,8 +2520,8 @@ var configureTeamToolset = (configPath) => {
|
|
|
2520
2520
|
};
|
|
2521
2521
|
|
|
2522
2522
|
// src/core/variant-builder/steps/TeamModeStep.ts
|
|
2523
|
-
var TEAM_MODE_DISABLED = "function
|
|
2524
|
-
var TEAM_MODE_ENABLED = "function
|
|
2523
|
+
var TEAM_MODE_DISABLED = "function Uq(){return!1}";
|
|
2524
|
+
var TEAM_MODE_ENABLED = "function Uq(){return!0}";
|
|
2525
2525
|
var TeamModeStep = class {
|
|
2526
2526
|
name = "TeamMode";
|
|
2527
2527
|
shouldEnableTeamMode(ctx) {
|
|
@@ -3972,8 +3972,8 @@ var InstallNpmUpdateStep = class {
|
|
|
3972
3972
|
// src/core/variant-builder/update-steps/TeamModeUpdateStep.ts
|
|
3973
3973
|
import fs12 from "node:fs";
|
|
3974
3974
|
import path17 from "node:path";
|
|
3975
|
-
var TEAM_MODE_DISABLED2 = "function
|
|
3976
|
-
var TEAM_MODE_ENABLED2 = "function
|
|
3975
|
+
var TEAM_MODE_DISABLED2 = "function Uq(){return!1}";
|
|
3976
|
+
var TEAM_MODE_ENABLED2 = "function Uq(){return!0}";
|
|
3977
3977
|
var TeamModeUpdateStep = class {
|
|
3978
3978
|
name = "TeamMode";
|
|
3979
3979
|
shouldEnableTeamMode(ctx) {
|
|
@@ -5188,11 +5188,11 @@ var LogoBanner = () => /* @__PURE__ */ jsxs3(Box3, { flexDirection: "column", ch
|
|
|
5188
5188
|
/* @__PURE__ */ jsx3(Text3, { children: /* @__PURE__ */ jsx3(Text3, { color: colors.logo1, children: " \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D" }) }),
|
|
5189
5189
|
/* @__PURE__ */ jsxs3(Text3, { children: [
|
|
5190
5190
|
/* @__PURE__ */ jsx3(Text3, { color: colors.logo1, children: " \u2588\u2588\u2551 \u2588\u2588\u2551 " }),
|
|
5191
|
-
/* @__PURE__ */ jsx3(Text3, { color: colors.textMuted, children: "Claude Code
|
|
5191
|
+
/* @__PURE__ */ jsx3(Text3, { color: colors.textMuted, children: "Claude Code, Unshackled" })
|
|
5192
5192
|
] }),
|
|
5193
5193
|
/* @__PURE__ */ jsxs3(Text3, { children: [
|
|
5194
5194
|
/* @__PURE__ */ jsx3(Text3, { color: colors.logo1, children: " \u2588\u2588\u2551 \u2588\u2588\u2551 " }),
|
|
5195
|
-
/* @__PURE__ */ jsx3(Text3, { color: colors.gold, children: "
|
|
5195
|
+
/* @__PURE__ */ jsx3(Text3, { color: colors.gold, children: "Multi-agent orchestration. One command." })
|
|
5196
5196
|
] }),
|
|
5197
5197
|
/* @__PURE__ */ jsx3(Text3, { children: /* @__PURE__ */ jsx3(Text3, { color: colors.logo1, children: " \u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u255A\u2588\u2588\u2588\u2588\u2588\u2588\u2557" }) }),
|
|
5198
5198
|
/* @__PURE__ */ jsx3(Text3, { children: /* @__PURE__ */ jsx3(Text3, { color: colors.logo1, children: " \u255A\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u255D" }) })
|
|
@@ -5370,9 +5370,9 @@ var PROVIDER_EDUCATION = {
|
|
|
5370
5370
|
features: [
|
|
5371
5371
|
"GLM-4.7 for Sonnet/Opus tasks",
|
|
5372
5372
|
"GLM-4.5-Air for Haiku (fast) tasks",
|
|
5373
|
+
"Multi-agent orchestration (team mode)",
|
|
5373
5374
|
"Prompt pack with zai-cli routing",
|
|
5374
|
-
"Gold-themed interface"
|
|
5375
|
-
"Optional team mode for multi-agent work"
|
|
5375
|
+
"Gold-themed interface"
|
|
5376
5376
|
],
|
|
5377
5377
|
bestFor: "Heavy coding with GLM's reasoning capabilities",
|
|
5378
5378
|
models: {
|
|
@@ -5394,10 +5394,10 @@ var PROVIDER_EDUCATION = {
|
|
|
5394
5394
|
tagline: "Coral pulses, unified model",
|
|
5395
5395
|
features: [
|
|
5396
5396
|
"Single model for all tiers",
|
|
5397
|
+
"Multi-agent orchestration (team mode)",
|
|
5397
5398
|
"Prompt pack with MCP tool routing",
|
|
5398
5399
|
"MCP tools for web search & vision",
|
|
5399
|
-
"Coral-themed interface"
|
|
5400
|
-
"Optional team mode for multi-agent work"
|
|
5400
|
+
"Coral-themed interface"
|
|
5401
5401
|
],
|
|
5402
5402
|
bestFor: "Streamlined experience with one powerful model",
|
|
5403
5403
|
models: {
|
|
@@ -5449,16 +5449,16 @@ var PROVIDER_EDUCATION = {
|
|
|
5449
5449
|
setupNote: 'Install: npm i -g @musistudio/claude-code-router, run "ccr start". Configure models in ~/.claude-code-router/config.json'
|
|
5450
5450
|
},
|
|
5451
5451
|
mirror: {
|
|
5452
|
-
headline: "
|
|
5453
|
-
tagline: "
|
|
5452
|
+
headline: "The Fastest Path to Multi-Agent",
|
|
5453
|
+
tagline: "Claude Code, Unshackled",
|
|
5454
5454
|
features: [
|
|
5455
|
-
"
|
|
5456
|
-
"
|
|
5455
|
+
"Multi-agent orchestration (team mode)",
|
|
5456
|
+
"Battle-tested orchestrator skill",
|
|
5457
|
+
"Pure Claude \u2014 no proxy, no model changes",
|
|
5457
5458
|
"Isolated config for experimentation",
|
|
5458
|
-
"Premium silver/chrome theme"
|
|
5459
|
-
"No API key required at setup"
|
|
5459
|
+
"Premium silver/chrome theme"
|
|
5460
5460
|
],
|
|
5461
|
-
bestFor: "Power users who want
|
|
5461
|
+
bestFor: "Power users who want multi-agent Claude Code immediately",
|
|
5462
5462
|
requiresMapping: false,
|
|
5463
5463
|
hasPromptPack: false,
|
|
5464
5464
|
setupLinks: {
|
|
@@ -5509,21 +5509,19 @@ var ProviderSelectScreen = ({ providers, onSelect }) => {
|
|
|
5509
5509
|
ScreenLayout,
|
|
5510
5510
|
{
|
|
5511
5511
|
title: "Select Provider",
|
|
5512
|
-
subtitle: "
|
|
5512
|
+
subtitle: "All providers include team mode + orchestrator skill",
|
|
5513
5513
|
hints: [keyHints.continue, showDetails ? "? Hide details" : "? Show details"],
|
|
5514
5514
|
children: [
|
|
5515
5515
|
/* @__PURE__ */ jsxs7(Box7, { marginBottom: 1, flexDirection: "column", children: [
|
|
5516
5516
|
/* @__PURE__ */ jsxs7(Text7, { color: colors.textMuted, children: [
|
|
5517
5517
|
icons.star,
|
|
5518
5518
|
" ",
|
|
5519
|
-
/* @__PURE__ */ jsx7(Text7, { color: colors.gold, children: "
|
|
5520
|
-
"
|
|
5521
|
-
/* @__PURE__ */ jsx7(Text7, { color: colors.gold, children: "MiniMax Cloud" }),
|
|
5522
|
-
" are fully supported"
|
|
5519
|
+
/* @__PURE__ */ jsx7(Text7, { color: colors.gold, children: "Mirror Claude" }),
|
|
5520
|
+
" is the fastest path to multi-agent"
|
|
5523
5521
|
] }),
|
|
5524
5522
|
/* @__PURE__ */ jsxs7(Text7, { color: colors.textMuted, children: [
|
|
5525
5523
|
icons.bullet,
|
|
5526
|
-
"
|
|
5524
|
+
" Alternative providers for different models (GLM, MiniMax, etc.)"
|
|
5527
5525
|
] })
|
|
5528
5526
|
] }),
|
|
5529
5527
|
/* @__PURE__ */ jsx7(Box7, { flexDirection: "column", marginY: 1, children: providers.map((provider, idx) => {
|
package/package.json
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "cc-mirror",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.6.1",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Claude Code, Unshackled — Pre-configured variants with multi-agent orchestration, custom providers, and battle-tested enhancements",
|
|
6
6
|
"author": "Numman Ali",
|
|
7
7
|
"license": "MIT",
|
|
8
8
|
"repository": {
|