cc-mirror 1.2.1 → 1.3.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/README.md CHANGED
@@ -201,6 +201,20 @@ cc-mirror quick --provider mirror --name mclaude
201
201
 
202
202
  Team mode enables: `TaskCreate`, `TaskGet`, `TaskUpdate`, `TaskList` tools plus an **orchestrator skill** that teaches Claude effective multi-agent coordination patterns.
203
203
 
204
+ ### Project-Scoped Tasks (v1.2.0+)
205
+
206
+ Tasks are automatically scoped by project folder — no cross-project pollution:
207
+
208
+ ```bash
209
+ # Run in different project folders - tasks stay isolated
210
+ cd ~/projects/api && mc # Team: mc-api
211
+ cd ~/projects/frontend && mc # Team: mc-frontend
212
+
213
+ # Multiple teams in the same project
214
+ TEAM=backend mc # Team: mc-myproject-backend
215
+ TEAM=frontend mc # Team: mc-myproject-frontend
216
+ ```
217
+
204
218
  → [Team Mode Documentation](docs/features/team-mode.md)
205
219
 
206
220
  ---
@@ -2612,7 +2612,7 @@ var TeamModeStep = class {
2612
2612
  this.patchCli(ctx);
2613
2613
  }
2614
2614
  patchCli(ctx) {
2615
- const { state, params, paths } = ctx;
2615
+ const { state, paths } = ctx;
2616
2616
  const cliPath = path9.join(paths.npmDir, "node_modules", "@anthropic-ai", "claude-code", "cli.js");
2617
2617
  const backupPath = `${cliPath}.backup`;
2618
2618
  if (!fs8.existsSync(cliPath)) {
@@ -2643,8 +2643,8 @@ var TeamModeStep = class {
2643
2643
  try {
2644
2644
  const settings = JSON.parse(fs8.readFileSync(settingsPath, "utf8"));
2645
2645
  settings.env = settings.env || {};
2646
- if (!settings.env.CLAUDE_CODE_TEAM_NAME) {
2647
- settings.env.CLAUDE_CODE_TEAM_NAME = params.name;
2646
+ if (!settings.env.CLAUDE_CODE_TEAM_MODE) {
2647
+ settings.env.CLAUDE_CODE_TEAM_MODE = "1";
2648
2648
  }
2649
2649
  if (!settings.env.CLAUDE_CODE_AGENT_TYPE) {
2650
2650
  settings.env.CLAUDE_CODE_AGENT_TYPE = "team-lead";
@@ -3615,23 +3615,23 @@ var writeWrapper = (wrapperPath, configDir, binaryPath, runtime = "node") => {
3615
3615
  'if [[ "${CC_MIRROR_UNSET_AUTH_TOKEN:-0}" != "0" ]]; then',
3616
3616
  " unset ANTHROPIC_AUTH_TOKEN",
3617
3617
  "fi",
3618
- "# Dynamic team name: scoped by project folder, with optional TEAM modifier",
3619
- 'if [[ -n "$CLAUDE_CODE_TEAM_NAME" ]]; then',
3618
+ "# Dynamic team name: purely directory-based, with optional TEAM modifier",
3619
+ "# Check for CLAUDE_CODE_TEAM_MODE (not TEAM_NAME) to avoid Claude Code overwriting",
3620
+ 'if [[ -n "${CLAUDE_CODE_TEAM_MODE:-}" ]]; then',
3620
3621
  " __cc_git_root=$(git rev-parse --show-toplevel 2>/dev/null || pwd)",
3621
3622
  ' __cc_folder_name=$(basename "$__cc_git_root")',
3622
- ' if [[ -n "$TEAM" ]]; then',
3623
- " # Base team name + project folder + TEAM modifier",
3624
- ' export CLAUDE_CODE_TEAM_NAME="${CLAUDE_CODE_TEAM_NAME}-${__cc_folder_name}-${TEAM}"',
3623
+ ' if [[ -n "${TEAM:-}" ]]; then',
3624
+ " # Folder name + TEAM modifier",
3625
+ ' export CLAUDE_CODE_TEAM_NAME="${__cc_folder_name}-${TEAM}"',
3625
3626
  " else",
3626
- " # Base team name + project folder (auto-scoped)",
3627
- ' export CLAUDE_CODE_TEAM_NAME="${CLAUDE_CODE_TEAM_NAME}-${__cc_folder_name}"',
3627
+ " # Just folder name (pure directory-based)",
3628
+ ' export CLAUDE_CODE_TEAM_NAME="${__cc_folder_name}"',
3628
3629
  " fi",
3629
- 'elif [[ -n "$TEAM" ]]; then',
3630
- " # TEAM alias set but no base team name in settings",
3630
+ 'elif [[ -n "${TEAM:-}" ]]; then',
3631
+ " # TEAM env var set without team mode in settings - use folder + TEAM",
3631
3632
  " __cc_git_root=$(git rev-parse --show-toplevel 2>/dev/null || pwd)",
3632
3633
  ' __cc_folder_name=$(basename "$__cc_git_root")',
3633
- ' __cc_variant_name=$(basename "$(dirname "$CLAUDE_CONFIG_DIR")")',
3634
- ' export CLAUDE_CODE_TEAM_NAME="${__cc_variant_name}-${__cc_folder_name}-${TEAM}"',
3634
+ ' export CLAUDE_CODE_TEAM_NAME="${__cc_folder_name}-${TEAM}"',
3635
3635
  "fi",
3636
3636
  ...splash,
3637
3637
  execLine,
@@ -4113,7 +4113,7 @@ var TeamModeUpdateStep = class {
4113
4113
  }
4114
4114
  }
4115
4115
  patchCli(ctx) {
4116
- const { state, meta, name, paths } = ctx;
4116
+ const { state, meta, paths } = ctx;
4117
4117
  const cliPath = path18.join(paths.npmDir, "node_modules", "@anthropic-ai", "claude-code", "cli.js");
4118
4118
  const backupPath = `${cliPath}.backup`;
4119
4119
  if (!fs13.existsSync(cliPath)) {
@@ -4145,8 +4145,8 @@ var TeamModeUpdateStep = class {
4145
4145
  try {
4146
4146
  const settings = JSON.parse(fs13.readFileSync(settingsPath, "utf8"));
4147
4147
  settings.env = settings.env || {};
4148
- if (!settings.env.CLAUDE_CODE_TEAM_NAME) {
4149
- settings.env.CLAUDE_CODE_TEAM_NAME = name;
4148
+ if (!settings.env.CLAUDE_CODE_TEAM_MODE) {
4149
+ settings.env.CLAUDE_CODE_TEAM_MODE = "1";
4150
4150
  }
4151
4151
  if (!settings.env.CLAUDE_CODE_AGENT_TYPE) {
4152
4152
  settings.env.CLAUDE_CODE_AGENT_TYPE = "team-lead";
package/dist/tui.mjs CHANGED
@@ -2481,7 +2481,7 @@ var TeamModeStep = class {
2481
2481
  this.patchCli(ctx);
2482
2482
  }
2483
2483
  patchCli(ctx) {
2484
- const { state, params, paths } = ctx;
2484
+ const { state, paths } = ctx;
2485
2485
  const cliPath = path8.join(paths.npmDir, "node_modules", "@anthropic-ai", "claude-code", "cli.js");
2486
2486
  const backupPath = `${cliPath}.backup`;
2487
2487
  if (!fs7.existsSync(cliPath)) {
@@ -2512,8 +2512,8 @@ var TeamModeStep = class {
2512
2512
  try {
2513
2513
  const settings = JSON.parse(fs7.readFileSync(settingsPath, "utf8"));
2514
2514
  settings.env = settings.env || {};
2515
- if (!settings.env.CLAUDE_CODE_TEAM_NAME) {
2516
- settings.env.CLAUDE_CODE_TEAM_NAME = params.name;
2515
+ if (!settings.env.CLAUDE_CODE_TEAM_MODE) {
2516
+ settings.env.CLAUDE_CODE_TEAM_MODE = "1";
2517
2517
  }
2518
2518
  if (!settings.env.CLAUDE_CODE_AGENT_TYPE) {
2519
2519
  settings.env.CLAUDE_CODE_AGENT_TYPE = "team-lead";
@@ -3484,23 +3484,23 @@ var writeWrapper = (wrapperPath, configDir, binaryPath, runtime = "node") => {
3484
3484
  'if [[ "${CC_MIRROR_UNSET_AUTH_TOKEN:-0}" != "0" ]]; then',
3485
3485
  " unset ANTHROPIC_AUTH_TOKEN",
3486
3486
  "fi",
3487
- "# Dynamic team name: scoped by project folder, with optional TEAM modifier",
3488
- 'if [[ -n "$CLAUDE_CODE_TEAM_NAME" ]]; then',
3487
+ "# Dynamic team name: purely directory-based, with optional TEAM modifier",
3488
+ "# Check for CLAUDE_CODE_TEAM_MODE (not TEAM_NAME) to avoid Claude Code overwriting",
3489
+ 'if [[ -n "${CLAUDE_CODE_TEAM_MODE:-}" ]]; then',
3489
3490
  " __cc_git_root=$(git rev-parse --show-toplevel 2>/dev/null || pwd)",
3490
3491
  ' __cc_folder_name=$(basename "$__cc_git_root")',
3491
- ' if [[ -n "$TEAM" ]]; then',
3492
- " # Base team name + project folder + TEAM modifier",
3493
- ' export CLAUDE_CODE_TEAM_NAME="${CLAUDE_CODE_TEAM_NAME}-${__cc_folder_name}-${TEAM}"',
3492
+ ' if [[ -n "${TEAM:-}" ]]; then',
3493
+ " # Folder name + TEAM modifier",
3494
+ ' export CLAUDE_CODE_TEAM_NAME="${__cc_folder_name}-${TEAM}"',
3494
3495
  " else",
3495
- " # Base team name + project folder (auto-scoped)",
3496
- ' export CLAUDE_CODE_TEAM_NAME="${CLAUDE_CODE_TEAM_NAME}-${__cc_folder_name}"',
3496
+ " # Just folder name (pure directory-based)",
3497
+ ' export CLAUDE_CODE_TEAM_NAME="${__cc_folder_name}"',
3497
3498
  " fi",
3498
- 'elif [[ -n "$TEAM" ]]; then',
3499
- " # TEAM alias set but no base team name in settings",
3499
+ 'elif [[ -n "${TEAM:-}" ]]; then',
3500
+ " # TEAM env var set without team mode in settings - use folder + TEAM",
3500
3501
  " __cc_git_root=$(git rev-parse --show-toplevel 2>/dev/null || pwd)",
3501
3502
  ' __cc_folder_name=$(basename "$__cc_git_root")',
3502
- ' __cc_variant_name=$(basename "$(dirname "$CLAUDE_CONFIG_DIR")")',
3503
- ' export CLAUDE_CODE_TEAM_NAME="${__cc_variant_name}-${__cc_folder_name}-${TEAM}"',
3503
+ ' export CLAUDE_CODE_TEAM_NAME="${__cc_folder_name}-${TEAM}"',
3504
3504
  "fi",
3505
3505
  ...splash,
3506
3506
  execLine,
@@ -3982,7 +3982,7 @@ var TeamModeUpdateStep = class {
3982
3982
  }
3983
3983
  }
3984
3984
  patchCli(ctx) {
3985
- const { state, meta, name, paths } = ctx;
3985
+ const { state, meta, paths } = ctx;
3986
3986
  const cliPath = path17.join(paths.npmDir, "node_modules", "@anthropic-ai", "claude-code", "cli.js");
3987
3987
  const backupPath = `${cliPath}.backup`;
3988
3988
  if (!fs12.existsSync(cliPath)) {
@@ -4014,8 +4014,8 @@ var TeamModeUpdateStep = class {
4014
4014
  try {
4015
4015
  const settings = JSON.parse(fs12.readFileSync(settingsPath, "utf8"));
4016
4016
  settings.env = settings.env || {};
4017
- if (!settings.env.CLAUDE_CODE_TEAM_NAME) {
4018
- settings.env.CLAUDE_CODE_TEAM_NAME = name;
4017
+ if (!settings.env.CLAUDE_CODE_TEAM_MODE) {
4018
+ settings.env.CLAUDE_CODE_TEAM_MODE = "1";
4019
4019
  }
4020
4020
  if (!settings.env.CLAUDE_CODE_AGENT_TYPE) {
4021
4021
  settings.env.CLAUDE_CODE_AGENT_TYPE = "team-lead";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cc-mirror",
3
- "version": "1.2.1",
3
+ "version": "1.3.0",
4
4
  "type": "module",
5
5
  "description": "Create multiple isolated Claude Code variants with custom providers (Z.ai, MiniMax, OpenRouter, Claude Code Router)",
6
6
  "author": "Numman Ali",