cc-mirror 1.5.0 → 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 CHANGED
@@ -45,12 +45,12 @@ Claude Code has a hidden multi-agent capability. CC-MIRROR enables it.
45
45
 
46
46
  **What gets unlocked:**
47
47
 
48
- | Tool | Purpose |
49
- |------|---------|
48
+ | Tool | Purpose |
49
+ | ------------ | -------------------------------------------------------- |
50
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 |
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
54
 
55
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.
56
56
 
@@ -134,12 +134,12 @@ npx cc-mirror quick --provider mirror --name mclaude
134
134
 
135
135
  Want to use different models? CC-MIRROR supports multiple providers, all with team mode:
136
136
 
137
- | Provider | Models | Auth | Best For |
138
- |----------|--------|------|----------|
139
- | **Z.ai** | GLM-4.7, GLM-4.5-Air | API Key | Heavy coding with GLM reasoning |
140
- | **MiniMax** | MiniMax-M2.1 | API Key | Unified model experience |
141
- | **OpenRouter** | 100+ models | Auth Token | Model flexibility, pay-per-use |
142
- | **CCRouter** | Ollama, DeepSeek, etc. | Optional | Local-first development |
137
+ | Provider | Models | Auth | Best For |
138
+ | -------------- | ---------------------- | ---------- | ------------------------------- |
139
+ | **Z.ai** | GLM-4.7, GLM-4.5-Air | API Key | Heavy coding with GLM reasoning |
140
+ | **MiniMax** | MiniMax-M2.1 | API Key | Unified model experience |
141
+ | **OpenRouter** | 100+ models | Auth Token | Model flexibility, pay-per-use |
142
+ | **CCRouter** | Ollama, DeepSeek, etc. | Optional | Local-first development |
143
143
 
144
144
  ```bash
145
145
  # Z.ai (GLM Coding Plan)
@@ -180,13 +180,13 @@ Claude becomes "The Conductor" — a warm, capable orchestrator who transforms a
180
180
 
181
181
  ### What It Provides
182
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 |
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
190
 
191
191
  ### Example Flow
192
192
 
@@ -228,10 +228,13 @@ Manage team tasks from the command line:
228
228
 
229
229
  ```bash
230
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
231
233
  npx cc-mirror tasks show 18 # Show task details
232
234
  npx cc-mirror tasks create # Create new task
233
235
  npx cc-mirror tasks update 5 --status resolved
234
236
  npx cc-mirror tasks graph # Visualize dependencies
237
+ npx cc-mirror tasks graph --json # Graph as JSON for programmatic use
235
238
  npx cc-mirror tasks clean --resolved # Cleanup done tasks
236
239
  ```
237
240
 
@@ -306,24 +309,24 @@ minimax # Run MiniMax variant
306
309
 
307
310
  Each provider includes a custom color theme via [tweakcc](https://github.com/Piebald-AI/tweakcc):
308
311
 
309
- | Brand | Style |
310
- |-------|-------|
311
- | **mirror** | Silver/chrome with electric blue |
312
- | **zai** | Dark carbon with gold accents |
313
- | **minimax** | Coral/red/orange spectrum |
314
- | **openrouter** | Teal/cyan gradient |
315
- | **ccrouter** | Sky blue accents |
312
+ | Brand | Style |
313
+ | -------------- | -------------------------------- |
314
+ | **mirror** | Silver/chrome with electric blue |
315
+ | **zai** | Dark carbon with gold accents |
316
+ | **minimax** | Coral/red/orange spectrum |
317
+ | **openrouter** | Teal/cyan gradient |
318
+ | **ccrouter** | Sky blue accents |
316
319
 
317
320
  ---
318
321
 
319
322
  ## Documentation
320
323
 
321
- | Document | Description |
322
- |----------|-------------|
323
- | [Team Mode](docs/features/team-mode.md) | Multi-agent collaboration deep dive |
324
- | [Mirror Claude](docs/features/mirror-claude.md) | Pure Claude Code with superpowers |
325
- | [Architecture](docs/architecture/overview.md) | How CC-MIRROR works under the hood |
326
- | [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 |
327
330
 
328
331
  ---
329
332
 
@@ -210,7 +210,7 @@ var DEFAULT_ROOT = path2.join(os.homedir(), ".cc-mirror");
210
210
  var DEFAULT_BIN_DIR = path2.join(os.homedir(), ".local", "bin");
211
211
  var TWEAKCC_VERSION = "3.2.2";
212
212
  var DEFAULT_NPM_PACKAGE = "@anthropic-ai/claude-code";
213
- var DEFAULT_NPM_VERSION = "2.0.76";
213
+ var DEFAULT_NPM_VERSION = "2.1.1";
214
214
 
215
215
  // src/core/fs.ts
216
216
  import fs2 from "node:fs";
@@ -2672,8 +2672,8 @@ var configureTeamToolset = (configPath) => {
2672
2672
  };
2673
2673
 
2674
2674
  // src/core/variant-builder/steps/TeamModeStep.ts
2675
- var TEAM_MODE_DISABLED = "function sU(){return!1}";
2676
- var TEAM_MODE_ENABLED = "function sU(){return!0}";
2675
+ var TEAM_MODE_DISABLED = "function Uq(){return!1}";
2676
+ var TEAM_MODE_ENABLED = "function Uq(){return!0}";
2677
2677
  var TeamModeStep = class {
2678
2678
  name = "TeamMode";
2679
2679
  shouldEnableTeamMode(ctx) {
@@ -4124,8 +4124,8 @@ var InstallNpmUpdateStep = class {
4124
4124
  // src/core/variant-builder/update-steps/TeamModeUpdateStep.ts
4125
4125
  import fs13 from "node:fs";
4126
4126
  import path18 from "node:path";
4127
- var TEAM_MODE_DISABLED2 = "function sU(){return!1}";
4128
- var TEAM_MODE_ENABLED2 = "function sU(){return!0}";
4127
+ var TEAM_MODE_DISABLED2 = "function Uq(){return!1}";
4128
+ var TEAM_MODE_ENABLED2 = "function Uq(){return!0}";
4129
4129
  var TeamModeUpdateStep = class {
4130
4130
  name = "TeamMode";
4131
4131
  shouldEnableTeamMode(ctx) {
@@ -5297,6 +5297,13 @@ function filterTasks(tasks, filter, allTasks) {
5297
5297
  filtered = filtered.filter((t) => !isBlocking(t));
5298
5298
  }
5299
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
+ }
5300
5307
  if (filter.owner) {
5301
5308
  filtered = filtered.filter((t) => t.owner === filter.owner);
5302
5309
  }
@@ -5309,18 +5316,51 @@ function getTaskSummary(tasks) {
5309
5316
  const open = tasks.filter((t) => t.status === "open");
5310
5317
  const resolved = tasks.filter((t) => t.status === "resolved");
5311
5318
  const blocked = open.filter((t) => isBlocked(t, tasks));
5319
+ const ready = open.filter((t) => !isBlocked(t, tasks));
5312
5320
  return {
5313
5321
  total: tasks.length,
5314
5322
  open: open.length,
5315
5323
  resolved: resolved.length,
5324
+ ready: ready.length,
5316
5325
  blocked: blocked.length
5317
5326
  };
5318
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
+ }
5319
5336
  function sortTasksById(tasks) {
5320
5337
  return [...tasks].sort((a, b) => parseInt(a.id, 10) - parseInt(b.id, 10));
5321
5338
  }
5322
5339
 
5323
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
+ }
5324
5364
  function truncate(text, maxLen) {
5325
5365
  if (text.length <= maxLen) return text;
5326
5366
  return text.slice(0, maxLen - 3) + "...";
@@ -5407,24 +5447,26 @@ function formatTaskDetail(task, location, allTasks) {
5407
5447
  }
5408
5448
  return lines.join("\n");
5409
5449
  }
5410
- function formatTasksJson(tasks, location, summary) {
5450
+ function formatTasksJson(tasks, location, summary, allTasks) {
5451
+ const enrichedTasks = tasks.map((t) => enrichTask(t, allTasks));
5411
5452
  return JSON.stringify(
5412
5453
  {
5413
5454
  variant: location.variant,
5414
5455
  team: location.team,
5415
- tasks,
5456
+ tasks: enrichedTasks,
5416
5457
  summary
5417
5458
  },
5418
5459
  null,
5419
5460
  2
5420
5461
  );
5421
5462
  }
5422
- function formatTaskJson(task, location) {
5463
+ function formatTaskJson(task, location, allTasks) {
5464
+ const enrichedTask = enrichTask(task, allTasks);
5423
5465
  return JSON.stringify(
5424
5466
  {
5425
5467
  variant: location.variant,
5426
5468
  team: location.team,
5427
- task
5469
+ task: enrichedTask
5428
5470
  },
5429
5471
  null,
5430
5472
  2
@@ -5433,10 +5475,10 @@ function formatTaskJson(task, location) {
5433
5475
  function formatMultiLocationJson(tasksByLocation) {
5434
5476
  return JSON.stringify(
5435
5477
  {
5436
- locations: tasksByLocation.map(({ location, tasks, summary }) => ({
5478
+ locations: tasksByLocation.map(({ location, tasks, allTasks, summary }) => ({
5437
5479
  variant: location.variant,
5438
5480
  team: location.team,
5439
- tasks,
5481
+ tasks: tasks.map((t) => enrichTask(t, allTasks)),
5440
5482
  summary
5441
5483
  }))
5442
5484
  },
@@ -5477,6 +5519,7 @@ function runTasksList(opts) {
5477
5519
  status: opts.status || "open",
5478
5520
  blocked: opts.blocked,
5479
5521
  blocking: opts.blocking,
5522
+ ready: opts.ready,
5480
5523
  owner: opts.owner,
5481
5524
  limit: opts.limit
5482
5525
  },
@@ -5484,12 +5527,12 @@ function runTasksList(opts) {
5484
5527
  );
5485
5528
  const sortedTasks = sortTasksById(filteredTasks);
5486
5529
  const summary = getTaskSummary(allTasks);
5487
- return { location, tasks: sortedTasks, summary };
5530
+ return { location, tasks: sortedTasks, allTasks, summary };
5488
5531
  });
5489
5532
  if (opts.json) {
5490
5533
  if (tasksByLocation.length === 1) {
5491
- const { location, tasks, summary } = tasksByLocation[0];
5492
- console.log(formatTasksJson(tasks, location, summary));
5534
+ const { location, tasks, allTasks, summary } = tasksByLocation[0];
5535
+ console.log(formatTasksJson(tasks, location, summary, allTasks));
5493
5536
  } else {
5494
5537
  console.log(formatMultiLocationJson(tasksByLocation));
5495
5538
  }
@@ -5520,7 +5563,7 @@ function runTasksShow(opts) {
5520
5563
  if (task) {
5521
5564
  const allTasks = loadAllTasks(location.tasksDir);
5522
5565
  if (opts.json) {
5523
- console.log(formatTaskJson(task, location));
5566
+ console.log(formatTaskJson(task, location, allTasks));
5524
5567
  } else {
5525
5568
  console.log(formatTaskDetail(task, location, allTasks));
5526
5569
  }
@@ -5556,7 +5599,8 @@ function runTasksCreate(opts) {
5556
5599
  blockedBy: opts.blockedBy
5557
5600
  });
5558
5601
  if (opts.json) {
5559
- console.log(formatTaskJson(task, location));
5602
+ const allTasks = loadAllTasks(location.tasksDir);
5603
+ console.log(formatTaskJson(task, location, allTasks));
5560
5604
  } else {
5561
5605
  console.log(`Created task #${task.id}: ${task.subject}`);
5562
5606
  console.log(`Location: ${location.variant} / ${location.team}`);
@@ -5606,7 +5650,8 @@ function runTasksUpdate(opts) {
5606
5650
  }
5607
5651
  saveTask(location.tasksDir, task);
5608
5652
  if (opts.json) {
5609
- console.log(formatTaskJson(task, location));
5653
+ const allTasks = loadAllTasks(location.tasksDir);
5654
+ console.log(formatTaskJson(task, location, allTasks));
5610
5655
  } else {
5611
5656
  console.log(`Updated task #${task.id}: ${task.subject}`);
5612
5657
  }
@@ -5836,6 +5881,54 @@ function formatTaskGraph(tasks, variant, team) {
5836
5881
  lines.push(`Total: ${tasks.length} | Open: ${open.length} | Ready: ${ready.length} | Blocked: ${blocked.length}`);
5837
5882
  return lines.join("\n");
5838
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
+ }
5839
5932
  function runTasksGraph(opts) {
5840
5933
  const context = resolveContext({
5841
5934
  rootDir: opts.rootDir,
@@ -5849,10 +5942,29 @@ function runTasksGraph(opts) {
5849
5942
  const location = context.locations[0];
5850
5943
  const tasks = loadAllTasks(location.tasksDir);
5851
5944
  if (tasks.length === 0) {
5852
- console.log(`No tasks found in ${location.variant} / ${location.team}`);
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
+ }
5853
5961
  return;
5854
5962
  }
5855
- console.log(formatTaskGraph(tasks, location.variant, location.team));
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
+ }
5856
5968
  }
5857
5969
 
5858
5970
  // src/cli/commands/tasks/archive.ts
@@ -5973,6 +6085,7 @@ LIST OPTIONS:
5973
6085
  --status <s> Filter: open, resolved, all (default: open)
5974
6086
  --blocked Show only blocked tasks
5975
6087
  --blocking Show only tasks blocking others
6088
+ --ready Show only ready tasks (open + not blocked)
5976
6089
  --owner <id> Filter by owner
5977
6090
  --limit <n> Limit results (default: 50)
5978
6091
 
@@ -6112,7 +6225,7 @@ async function runTasksCommand({ opts }) {
6112
6225
  break;
6113
6226
  }
6114
6227
  case "graph": {
6115
- runTasksGraph({ rootDir, variant, team });
6228
+ runTasksGraph({ rootDir, variant, team, json });
6116
6229
  break;
6117
6230
  }
6118
6231
  case "archive": {
@@ -6139,6 +6252,7 @@ async function runTasksCommand({ opts }) {
6139
6252
  status: opts.status || "open",
6140
6253
  blocked: opts.blocked !== void 0 ? Boolean(opts.blocked) : void 0,
6141
6254
  blocking: opts.blocking !== void 0 ? Boolean(opts.blocking) : void 0,
6255
+ ready: opts.ready !== void 0 ? Boolean(opts.ready) : void 0,
6142
6256
  owner: opts.owner,
6143
6257
  limit: opts.limit !== void 0 ? Number(opts.limit) : 50,
6144
6258
  json
@@ -252,22 +252,22 @@ TaskOutput(task_id="abc123")
252
252
 
253
253
  ### Model Selection
254
254
 
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 |
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.0.76";
1580
+ var DEFAULT_NPM_VERSION = "2.1.1";
1581
1581
 
1582
1582
  // src/core/fs.ts
1583
1583
  import fs from "node:fs";
@@ -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 sU(){return!1}";
2524
- var TEAM_MODE_ENABLED = "function sU(){return!0}";
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 sU(){return!1}";
3976
- var TEAM_MODE_ENABLED2 = "function sU(){return!0}";
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) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-mirror",
3
- "version": "1.5.0",
3
+ "version": "1.6.1",
4
4
  "type": "module",
5
5
  "description": "Claude Code, Unshackled — Pre-configured variants with multi-agent orchestration, custom providers, and battle-tested enhancements",
6
6
  "author": "Numman Ali",