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 +34 -31
- package/dist/cc-mirror.mjs +134 -20
- package/dist/skills/orchestration/references/tools.md +13 -13
- package/dist/tui.mjs +5 -5
- package/package.json +1 -1
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
|
|
49
|
-
|
|
48
|
+
| Tool | Purpose |
|
|
49
|
+
| ------------ | -------------------------------------------------------- |
|
|
50
50
|
| `TaskCreate` | Create tasks with subject, description, and dependencies |
|
|
51
|
-
| `TaskGet`
|
|
52
|
-
| `TaskUpdate` | Update status, add comments, set blockers
|
|
53
|
-
| `TaskList`
|
|
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
|
|
138
|
-
|
|
139
|
-
| **Z.ai**
|
|
140
|
-
| **MiniMax**
|
|
141
|
-
| **OpenRouter** | 100+ models
|
|
142
|
-
| **CCRouter**
|
|
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
|
|
184
|
-
|
|
185
|
-
| **Task Graph**
|
|
186
|
-
| **Parallel Execution** | Fan-out, pipeline, map-reduce patterns
|
|
187
|
-
| **Background Agents**
|
|
188
|
-
| **Smart Prompting**
|
|
189
|
-
| **Progress Updates**
|
|
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
|
|
310
|
-
|
|
311
|
-
| **mirror**
|
|
312
|
-
| **zai**
|
|
313
|
-
| **minimax**
|
|
314
|
-
| **openrouter** | Teal/cyan gradient
|
|
315
|
-
| **ccrouter**
|
|
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
|
|
322
|
-
|
|
323
|
-
| [Team Mode](docs/features/team-mode.md)
|
|
324
|
-
| [Mirror Claude](docs/features/mirror-claude.md) | Pure Claude Code with superpowers
|
|
325
|
-
| [Architecture](docs/architecture/overview.md)
|
|
326
|
-
| [Full Documentation](docs/README.md)
|
|
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
|
|
package/dist/cc-mirror.mjs
CHANGED
|
@@ -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.
|
|
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
|
|
2676
|
-
var TEAM_MODE_ENABLED = "function
|
|
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
|
|
4128
|
-
var TEAM_MODE_ENABLED2 = "function
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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";
|
|
@@ -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) {
|
package/package.json
CHANGED