spidersan 0.2.2
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/CHANGELOG.md +91 -0
- package/LICENSE +21 -0
- package/LICENSE.md +85 -0
- package/README.md +217 -0
- package/dist/bin/spidersan.d.ts +9 -0
- package/dist/bin/spidersan.d.ts.map +1 -0
- package/dist/bin/spidersan.js +152 -0
- package/dist/bin/spidersan.js.map +1 -0
- package/dist/commands/abandon.d.ts +8 -0
- package/dist/commands/abandon.d.ts.map +1 -0
- package/dist/commands/abandon.js +49 -0
- package/dist/commands/abandon.js.map +1 -0
- package/dist/commands/activate.d.ts +9 -0
- package/dist/commands/activate.d.ts.map +1 -0
- package/dist/commands/activate.js +45 -0
- package/dist/commands/activate.js.map +1 -0
- package/dist/commands/active-windows.d.ts +16 -0
- package/dist/commands/active-windows.d.ts.map +1 -0
- package/dist/commands/active-windows.js +373 -0
- package/dist/commands/active-windows.js.map +1 -0
- package/dist/commands/audit-mark.d.ts +12 -0
- package/dist/commands/audit-mark.d.ts.map +1 -0
- package/dist/commands/audit-mark.js +204 -0
- package/dist/commands/audit-mark.js.map +1 -0
- package/dist/commands/cleanup.d.ts +8 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +41 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/close.d.ts +9 -0
- package/dist/commands/close.d.ts.map +1 -0
- package/dist/commands/close.js +129 -0
- package/dist/commands/close.js.map +1 -0
- package/dist/commands/collab-sync.d.ts +14 -0
- package/dist/commands/collab-sync.d.ts.map +1 -0
- package/dist/commands/collab-sync.js +240 -0
- package/dist/commands/collab-sync.js.map +1 -0
- package/dist/commands/collab.d.ts +6 -0
- package/dist/commands/collab.d.ts.map +1 -0
- package/dist/commands/collab.js +103 -0
- package/dist/commands/collab.js.map +1 -0
- package/dist/commands/completions.d.ts +8 -0
- package/dist/commands/completions.d.ts.map +1 -0
- package/dist/commands/completions.js +83 -0
- package/dist/commands/completions.js.map +1 -0
- package/dist/commands/conflicts.d.ts +12 -0
- package/dist/commands/conflicts.d.ts.map +1 -0
- package/dist/commands/conflicts.js +426 -0
- package/dist/commands/conflicts.js.map +1 -0
- package/dist/commands/demo.d.ts +3 -0
- package/dist/commands/demo.d.ts.map +1 -0
- package/dist/commands/demo.js +113 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/commands/depends.d.ts +8 -0
- package/dist/commands/depends.d.ts.map +1 -0
- package/dist/commands/depends.js +44 -0
- package/dist/commands/depends.js.map +1 -0
- package/dist/commands/doctor.d.ts +8 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +249 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/inbox.d.ts +3 -0
- package/dist/commands/inbox.d.ts.map +1 -0
- package/dist/commands/inbox.js +66 -0
- package/dist/commands/inbox.js.map +1 -0
- package/dist/commands/index.d.ts +43 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +61 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +23 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/intent-scan.d.ts +17 -0
- package/dist/commands/intent-scan.d.ts.map +1 -0
- package/dist/commands/intent-scan.js +336 -0
- package/dist/commands/intent-scan.js.map +1 -0
- package/dist/commands/key-import.d.ts +3 -0
- package/dist/commands/key-import.d.ts.map +1 -0
- package/dist/commands/key-import.js +54 -0
- package/dist/commands/key-import.js.map +1 -0
- package/dist/commands/keygen.d.ts +3 -0
- package/dist/commands/keygen.d.ts.map +1 -0
- package/dist/commands/keygen.js +53 -0
- package/dist/commands/keygen.js.map +1 -0
- package/dist/commands/keys.d.ts +3 -0
- package/dist/commands/keys.d.ts.map +1 -0
- package/dist/commands/keys.js +56 -0
- package/dist/commands/keys.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +45 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/lock.d.ts +11 -0
- package/dist/commands/lock.d.ts.map +1 -0
- package/dist/commands/lock.js +220 -0
- package/dist/commands/lock.js.map +1 -0
- package/dist/commands/log.d.ts +8 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +95 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/mcp-health.d.ts +3 -0
- package/dist/commands/mcp-health.d.ts.map +1 -0
- package/dist/commands/mcp-health.js +305 -0
- package/dist/commands/mcp-health.js.map +1 -0
- package/dist/commands/mcp-restart.d.ts +3 -0
- package/dist/commands/mcp-restart.d.ts.map +1 -0
- package/dist/commands/mcp-restart.js +176 -0
- package/dist/commands/mcp-restart.js.map +1 -0
- package/dist/commands/merge-order.d.ts +9 -0
- package/dist/commands/merge-order.d.ts.map +1 -0
- package/dist/commands/merge-order.js +138 -0
- package/dist/commands/merge-order.js.map +1 -0
- package/dist/commands/merged.d.ts +8 -0
- package/dist/commands/merged.d.ts.map +1 -0
- package/dist/commands/merged.js +39 -0
- package/dist/commands/merged.js.map +1 -0
- package/dist/commands/msg-read.d.ts +3 -0
- package/dist/commands/msg-read.d.ts.map +1 -0
- package/dist/commands/msg-read.js +70 -0
- package/dist/commands/msg-read.js.map +1 -0
- package/dist/commands/pulse.d.ts +9 -0
- package/dist/commands/pulse.d.ts.map +1 -0
- package/dist/commands/pulse.js +232 -0
- package/dist/commands/pulse.js.map +1 -0
- package/dist/commands/radar.d.ts +3 -0
- package/dist/commands/radar.d.ts.map +1 -0
- package/dist/commands/radar.js +147 -0
- package/dist/commands/radar.js.map +1 -0
- package/dist/commands/ready-check.d.ts +9 -0
- package/dist/commands/ready-check.d.ts.map +1 -0
- package/dist/commands/ready-check.js +156 -0
- package/dist/commands/ready-check.js.map +1 -0
- package/dist/commands/register.d.ts +3 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +124 -0
- package/dist/commands/register.js.map +1 -0
- package/dist/commands/send.d.ts +3 -0
- package/dist/commands/send.d.ts.map +1 -0
- package/dist/commands/send.js +134 -0
- package/dist/commands/send.js.map +1 -0
- package/dist/commands/stale.d.ts +8 -0
- package/dist/commands/stale.d.ts.map +1 -0
- package/dist/commands/stale.js +38 -0
- package/dist/commands/stale.js.map +1 -0
- package/dist/commands/status.d.ts +9 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +41 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/sync-all.d.ts +9 -0
- package/dist/commands/sync-all.d.ts.map +1 -0
- package/dist/commands/sync-all.js +180 -0
- package/dist/commands/sync-all.js.map +1 -0
- package/dist/commands/sync.d.ts +8 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +49 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/tension.d.ts +12 -0
- package/dist/commands/tension.d.ts.map +1 -0
- package/dist/commands/tension.js +242 -0
- package/dist/commands/tension.js.map +1 -0
- package/dist/commands/torrent.d.ts +9 -0
- package/dist/commands/torrent.d.ts.map +1 -0
- package/dist/commands/torrent.js +431 -0
- package/dist/commands/torrent.js.map +1 -0
- package/dist/commands/tui.d.ts +8 -0
- package/dist/commands/tui.d.ts.map +1 -0
- package/dist/commands/tui.js +15 -0
- package/dist/commands/tui.js.map +1 -0
- package/dist/commands/wake.d.ts +9 -0
- package/dist/commands/wake.d.ts.map +1 -0
- package/dist/commands/wake.js +188 -0
- package/dist/commands/wake.js.map +1 -0
- package/dist/commands/watch.d.ts +3 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +245 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/commands/who-touched.d.ts +9 -0
- package/dist/commands/who-touched.d.ts.map +1 -0
- package/dist/commands/who-touched.js +186 -0
- package/dist/commands/who-touched.js.map +1 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/agent-errors.d.ts +41 -0
- package/dist/lib/agent-errors.d.ts.map +1 -0
- package/dist/lib/agent-errors.js +143 -0
- package/dist/lib/agent-errors.js.map +1 -0
- package/dist/lib/ast.d.ts +56 -0
- package/dist/lib/ast.d.ts.map +1 -0
- package/dist/lib/ast.js +134 -0
- package/dist/lib/ast.js.map +1 -0
- package/dist/lib/config.d.ts +33 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +127 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/crdt.d.ts +83 -0
- package/dist/lib/crdt.d.ts.map +1 -0
- package/dist/lib/crdt.js +160 -0
- package/dist/lib/crdt.js.map +1 -0
- package/dist/lib/crypto.d.ts +71 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +172 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/errors.d.ts +35 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +71 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/license.d.ts +61 -0
- package/dist/lib/license.d.ts.map +1 -0
- package/dist/lib/license.js +171 -0
- package/dist/lib/license.js.map +1 -0
- package/dist/lib/security.d.ts +53 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +122 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/update-check.d.ts +11 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +113 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/storage/adapter.d.ts +58 -0
- package/dist/storage/adapter.d.ts.map +1 -0
- package/dist/storage/adapter.js +8 -0
- package/dist/storage/adapter.js.map +1 -0
- package/dist/storage/factory.d.ts +6 -0
- package/dist/storage/factory.d.ts.map +1 -0
- package/dist/storage/factory.js +22 -0
- package/dist/storage/factory.js.map +1 -0
- package/dist/storage/index.d.ts +5 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +5 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local.d.ts +24 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +101 -0
- package/dist/storage/local.js.map +1 -0
- package/dist/storage/supabase.d.ts +52 -0
- package/dist/storage/supabase.d.ts.map +1 -0
- package/dist/storage/supabase.js +221 -0
- package/dist/storage/supabase.js.map +1 -0
- package/dist/tui/screen.d.ts +14 -0
- package/dist/tui/screen.d.ts.map +1 -0
- package/dist/tui/screen.js +136 -0
- package/dist/tui/screen.js.map +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,431 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan torrent
|
|
3
|
+
*
|
|
4
|
+
* Task Torrenting integration - manage branches for parallel task execution.
|
|
5
|
+
* BitTorrent-inspired approach: tasks are "seeded" by one agent, "downloaded" by others.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import { execSync } from 'child_process';
|
|
9
|
+
import { getStorage } from '../storage/index.js';
|
|
10
|
+
// Config
|
|
11
|
+
const HUB_URL = process.env.HUB_URL || 'https://hub.treebird.uk';
|
|
12
|
+
function getCurrentBranch() {
|
|
13
|
+
try {
|
|
14
|
+
return execSync('git rev-parse --abbrev-ref HEAD', { encoding: 'utf-8' }).trim();
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
throw new Error('Not in a git repository');
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
function createBranchForTask(taskId) {
|
|
21
|
+
const branchName = `task/${taskId}`;
|
|
22
|
+
try {
|
|
23
|
+
// Check if branch exists
|
|
24
|
+
execSync(`git rev-parse --verify ${branchName}`, { encoding: 'utf-8', stdio: 'pipe' });
|
|
25
|
+
console.log(` Branch ${branchName} already exists, checking out...`);
|
|
26
|
+
execSync(`git checkout ${branchName}`, { encoding: 'utf-8' });
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// Branch doesn't exist, create it
|
|
30
|
+
execSync(`git checkout -b ${branchName}`, { encoding: 'utf-8' });
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Parse task ID to extract parent if nested (e.g., DASH-001-A -> parent is DASH-001)
|
|
35
|
+
*/
|
|
36
|
+
function getParentTaskId(taskId) {
|
|
37
|
+
// Pattern: PARENT-CHILD (e.g., DASH-001-A, SEC-002-B)
|
|
38
|
+
const match = taskId.match(/^(.+)-[A-Za-z]$/);
|
|
39
|
+
return match ? match[1] : null;
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Check for conflicts with other task branches
|
|
43
|
+
*/
|
|
44
|
+
async function checkForConflicts(branchName) {
|
|
45
|
+
const storage = await getStorage();
|
|
46
|
+
const branches = await storage.list();
|
|
47
|
+
const currentBranch = await storage.get(branchName);
|
|
48
|
+
if (!currentBranch)
|
|
49
|
+
return [];
|
|
50
|
+
const conflicts = [];
|
|
51
|
+
for (const other of branches) {
|
|
52
|
+
if (other.name === branchName || other.status !== 'active')
|
|
53
|
+
continue;
|
|
54
|
+
if (!other.name.startsWith('task/'))
|
|
55
|
+
continue; // Only check other task branches
|
|
56
|
+
const overlap = currentBranch.files.filter(f => other.files.includes(f));
|
|
57
|
+
if (overlap.length > 0) {
|
|
58
|
+
conflicts.push({ branch: other.name, files: overlap });
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return conflicts;
|
|
62
|
+
}
|
|
63
|
+
// Main torrent command with subcommands
|
|
64
|
+
export const torrentCommand = new Command('torrent')
|
|
65
|
+
.description('🔄 Task Torrenting - manage branches for parallel task execution');
|
|
66
|
+
// Subcommand: torrent create <task-id>
|
|
67
|
+
torrentCommand
|
|
68
|
+
.command('create <task-id>')
|
|
69
|
+
.description('Create a branch for a task (e.g., spidersan torrent create DASH-001)')
|
|
70
|
+
.option('-a, --agent <agent>', 'Agent claiming this task')
|
|
71
|
+
.option('-p, --parent <parent-task>', 'Parent task ID (for nested decomposition)')
|
|
72
|
+
.action(async (taskId, options) => {
|
|
73
|
+
const storage = await getStorage();
|
|
74
|
+
if (!await storage.isInitialized()) {
|
|
75
|
+
console.error('❌ Spidersan not initialized. Run: spidersan init');
|
|
76
|
+
process.exit(1);
|
|
77
|
+
}
|
|
78
|
+
const branchName = `task/${taskId}`;
|
|
79
|
+
const agent = options.agent || process.env.SPIDERSAN_AGENT || 'unknown';
|
|
80
|
+
const parentTaskId = options.parent || getParentTaskId(taskId);
|
|
81
|
+
console.log(`
|
|
82
|
+
🔄 TASK TORRENTING: Create Branch
|
|
83
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
84
|
+
Task: ${taskId}
|
|
85
|
+
Branch: ${branchName}
|
|
86
|
+
Agent: ${agent}
|
|
87
|
+
Parent: ${parentTaskId || '(none)'}
|
|
88
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
89
|
+
`);
|
|
90
|
+
// Create git branch
|
|
91
|
+
createBranchForTask(taskId);
|
|
92
|
+
console.log(`✅ Created and checked out: ${branchName}`);
|
|
93
|
+
// Register in Spidersan
|
|
94
|
+
const existing = await storage.get(branchName);
|
|
95
|
+
if (existing) {
|
|
96
|
+
await storage.update(branchName, {
|
|
97
|
+
agent,
|
|
98
|
+
status: 'active',
|
|
99
|
+
description: parentTaskId ? `Child of ${parentTaskId}` : undefined
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
await storage.register({
|
|
104
|
+
name: branchName,
|
|
105
|
+
files: [],
|
|
106
|
+
status: 'active',
|
|
107
|
+
agent,
|
|
108
|
+
description: parentTaskId ? `Child of ${parentTaskId}` : undefined
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
console.log(`✅ Registered in Spidersan`);
|
|
112
|
+
// Try to notify Hub
|
|
113
|
+
try {
|
|
114
|
+
await fetch(`${HUB_URL}/api/tasks/${taskId}/claim`, {
|
|
115
|
+
method: 'POST',
|
|
116
|
+
headers: { 'Content-Type': 'application/json' },
|
|
117
|
+
body: JSON.stringify({ agent, branch: branchName })
|
|
118
|
+
});
|
|
119
|
+
console.log(`✅ Notified Hub`);
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
console.log(`⚠️ Could not notify Hub (offline?)`);
|
|
123
|
+
}
|
|
124
|
+
console.log(`
|
|
125
|
+
💡 Next steps:
|
|
126
|
+
1. Make your changes
|
|
127
|
+
2. git add && git commit
|
|
128
|
+
3. spidersan torrent complete ${taskId}
|
|
129
|
+
`);
|
|
130
|
+
});
|
|
131
|
+
// Subcommand: torrent status
|
|
132
|
+
torrentCommand
|
|
133
|
+
.command('status')
|
|
134
|
+
.description('Show all active task branches and their status')
|
|
135
|
+
.option('--json', 'Output as JSON')
|
|
136
|
+
.option('-p, --parent <parent-task>', 'Filter by parent task')
|
|
137
|
+
.action(async (options) => {
|
|
138
|
+
const storage = await getStorage();
|
|
139
|
+
if (!await storage.isInitialized()) {
|
|
140
|
+
console.error('❌ Spidersan not initialized. Run: spidersan init');
|
|
141
|
+
process.exit(1);
|
|
142
|
+
}
|
|
143
|
+
const branches = await storage.list();
|
|
144
|
+
const taskBranches = branches.filter(b => b.name.startsWith('task/') && b.status === 'active');
|
|
145
|
+
// Filter by parent if specified
|
|
146
|
+
const filtered = options.parent
|
|
147
|
+
? taskBranches.filter(b => {
|
|
148
|
+
const taskId = b.name.replace('task/', '');
|
|
149
|
+
return taskId.startsWith(options.parent) || getParentTaskId(taskId) === options.parent;
|
|
150
|
+
})
|
|
151
|
+
: taskBranches;
|
|
152
|
+
if (options.json) {
|
|
153
|
+
console.log(JSON.stringify({ tasks: filtered }, null, 2));
|
|
154
|
+
return;
|
|
155
|
+
}
|
|
156
|
+
if (filtered.length === 0) {
|
|
157
|
+
console.log('🔄 No active task branches.');
|
|
158
|
+
console.log(' Use: spidersan torrent create <task-id>');
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
console.log(`
|
|
162
|
+
🔄 TASK TORRENTING: Status
|
|
163
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
164
|
+
Active Tasks: ${filtered.length}
|
|
165
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
166
|
+
`);
|
|
167
|
+
// Group by parent
|
|
168
|
+
const byParent = new Map();
|
|
169
|
+
for (const branch of filtered) {
|
|
170
|
+
const taskId = branch.name.replace('task/', '');
|
|
171
|
+
const parent = getParentTaskId(taskId) || 'root';
|
|
172
|
+
if (!byParent.has(parent))
|
|
173
|
+
byParent.set(parent, []);
|
|
174
|
+
byParent.get(parent).push(branch);
|
|
175
|
+
}
|
|
176
|
+
for (const [parent, tasks] of byParent) {
|
|
177
|
+
if (parent !== 'root') {
|
|
178
|
+
console.log(`\n📦 Parent: ${parent}`);
|
|
179
|
+
}
|
|
180
|
+
for (const task of tasks) {
|
|
181
|
+
const taskId = task.name.replace('task/', '');
|
|
182
|
+
const conflicts = await checkForConflicts(task.name);
|
|
183
|
+
const status = conflicts.length > 0 ? '⚠️' : '✅';
|
|
184
|
+
const agentTag = task.agent ? ` (${task.agent})` : '';
|
|
185
|
+
console.log(` ${status} ${taskId}${agentTag}`);
|
|
186
|
+
if (task.files.length > 0) {
|
|
187
|
+
console.log(` Files: ${task.files.slice(0, 3).join(', ')}${task.files.length > 3 ? '...' : ''}`);
|
|
188
|
+
}
|
|
189
|
+
if (conflicts.length > 0) {
|
|
190
|
+
console.log(` ⚠️ Conflicts with: ${conflicts.map(c => c.branch).join(', ')}`);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
});
|
|
195
|
+
// Subcommand: torrent complete <task-id>
|
|
196
|
+
torrentCommand
|
|
197
|
+
.command('complete <task-id>')
|
|
198
|
+
.description('Mark a task as complete and prepare for merge')
|
|
199
|
+
.option('-a, --agent <agent>', 'Agent completing this task')
|
|
200
|
+
.action(async (taskId, options) => {
|
|
201
|
+
const storage = await getStorage();
|
|
202
|
+
const branchName = `task/${taskId}`;
|
|
203
|
+
const agent = options.agent || process.env.SPIDERSAN_AGENT || 'unknown';
|
|
204
|
+
const branch = await storage.get(branchName);
|
|
205
|
+
if (!branch) {
|
|
206
|
+
console.error(`❌ Task branch not found: ${branchName}`);
|
|
207
|
+
console.log(` Run: spidersan torrent create ${taskId}`);
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
// Mark as completed
|
|
211
|
+
await storage.update(branchName, { status: 'completed' });
|
|
212
|
+
console.log(`
|
|
213
|
+
🎉 TASK COMPLETE: ${taskId}
|
|
214
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
215
|
+
Branch: ${branchName}
|
|
216
|
+
Agent: ${agent}
|
|
217
|
+
Files: ${branch.files.length}
|
|
218
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
219
|
+
`);
|
|
220
|
+
// Check for conflicts before merge recommendation
|
|
221
|
+
const conflicts = await checkForConflicts(branchName);
|
|
222
|
+
if (conflicts.length > 0) {
|
|
223
|
+
console.log(`⚠️ Conflicts detected! Resolve before merging:`);
|
|
224
|
+
conflicts.forEach(c => {
|
|
225
|
+
console.log(` • ${c.branch}: ${c.files.join(', ')}`);
|
|
226
|
+
});
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
console.log(`✅ No conflicts - ready to merge!`);
|
|
230
|
+
}
|
|
231
|
+
// Try to notify Hub
|
|
232
|
+
try {
|
|
233
|
+
await fetch(`${HUB_URL}/api/tasks/${taskId}/complete`, {
|
|
234
|
+
method: 'POST',
|
|
235
|
+
headers: { 'Content-Type': 'application/json' },
|
|
236
|
+
body: JSON.stringify({ agent, branch: branchName })
|
|
237
|
+
});
|
|
238
|
+
console.log(`✅ Notified Hub`);
|
|
239
|
+
}
|
|
240
|
+
catch {
|
|
241
|
+
console.log(`⚠️ Could not notify Hub (offline?)`);
|
|
242
|
+
}
|
|
243
|
+
console.log(`
|
|
244
|
+
💡 Next steps:
|
|
245
|
+
1. Push your branch: git push origin ${branchName}
|
|
246
|
+
2. Create PR or merge: git checkout main && git merge ${branchName}
|
|
247
|
+
3. Clean up: spidersan merged ${branchName}
|
|
248
|
+
`);
|
|
249
|
+
});
|
|
250
|
+
// Subcommand: torrent merge-order
|
|
251
|
+
torrentCommand
|
|
252
|
+
.command('merge-order')
|
|
253
|
+
.description('Get optimal merge order for all task branches')
|
|
254
|
+
.option('--json', 'Output as JSON')
|
|
255
|
+
.action(async (options) => {
|
|
256
|
+
const storage = await getStorage();
|
|
257
|
+
const branches = await storage.list();
|
|
258
|
+
const taskBranches = branches.filter(b => b.name.startsWith('task/') &&
|
|
259
|
+
(b.status === 'active' || b.status === 'completed'));
|
|
260
|
+
if (taskBranches.length === 0) {
|
|
261
|
+
console.log('🔄 No task branches to merge.');
|
|
262
|
+
return;
|
|
263
|
+
}
|
|
264
|
+
// Build conflict graph
|
|
265
|
+
const conflictGraph = new Map();
|
|
266
|
+
for (const branch of taskBranches) {
|
|
267
|
+
const conflicts = [];
|
|
268
|
+
for (const other of taskBranches) {
|
|
269
|
+
if (branch.name === other.name)
|
|
270
|
+
continue;
|
|
271
|
+
const overlap = branch.files.some(f => other.files.includes(f));
|
|
272
|
+
if (overlap)
|
|
273
|
+
conflicts.push(other.name);
|
|
274
|
+
}
|
|
275
|
+
conflictGraph.set(branch.name, conflicts);
|
|
276
|
+
}
|
|
277
|
+
// Sort: completed first, then by fewest conflicts
|
|
278
|
+
const sorted = [...taskBranches].sort((a, b) => {
|
|
279
|
+
// Completed tasks first
|
|
280
|
+
if (a.status === 'completed' && b.status !== 'completed')
|
|
281
|
+
return -1;
|
|
282
|
+
if (b.status === 'completed' && a.status !== 'completed')
|
|
283
|
+
return 1;
|
|
284
|
+
// Fewest conflicts first
|
|
285
|
+
const conflictsA = conflictGraph.get(a.name)?.length || 0;
|
|
286
|
+
const conflictsB = conflictGraph.get(b.name)?.length || 0;
|
|
287
|
+
return conflictsA - conflictsB;
|
|
288
|
+
});
|
|
289
|
+
if (options.json) {
|
|
290
|
+
console.log(JSON.stringify({
|
|
291
|
+
order: sorted.map(b => ({
|
|
292
|
+
name: b.name,
|
|
293
|
+
taskId: b.name.replace('task/', ''),
|
|
294
|
+
status: b.status,
|
|
295
|
+
conflicts: conflictGraph.get(b.name) || []
|
|
296
|
+
}))
|
|
297
|
+
}, null, 2));
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
console.log(`
|
|
301
|
+
🔄 TASK TORRENTING: Merge Order
|
|
302
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
303
|
+
`);
|
|
304
|
+
sorted.forEach((branch, i) => {
|
|
305
|
+
const taskId = branch.name.replace('task/', '');
|
|
306
|
+
const conflicts = conflictGraph.get(branch.name) || [];
|
|
307
|
+
const statusIcon = branch.status === 'completed' ? '✅' : '🔄';
|
|
308
|
+
const conflictIcon = conflicts.length > 0 ? '⚠️' : '';
|
|
309
|
+
console.log(` ${i + 1}. ${statusIcon} ${taskId} ${conflictIcon}`);
|
|
310
|
+
if (conflicts.length > 0) {
|
|
311
|
+
console.log(` └─ Rebase after: ${conflicts.map(c => c.replace('task/', '')).join(', ')}`);
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
console.log(`
|
|
315
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
316
|
+
💡 Merge ✅ completed tasks first, then handle 🔄 active.
|
|
317
|
+
`);
|
|
318
|
+
});
|
|
319
|
+
// Subcommand: torrent tree
|
|
320
|
+
torrentCommand
|
|
321
|
+
.command('tree')
|
|
322
|
+
.description('Show nested task branches as a tree structure')
|
|
323
|
+
.option('--json', 'Output as JSON')
|
|
324
|
+
.action(async (options) => {
|
|
325
|
+
const storage = await getStorage();
|
|
326
|
+
const branches = await storage.list();
|
|
327
|
+
const taskBranches = branches.filter(b => b.name.startsWith('task/'));
|
|
328
|
+
if (taskBranches.length === 0) {
|
|
329
|
+
console.log('🔄 No task branches found.');
|
|
330
|
+
return;
|
|
331
|
+
}
|
|
332
|
+
const nodeMap = new Map();
|
|
333
|
+
const roots = [];
|
|
334
|
+
// First pass: create all nodes
|
|
335
|
+
for (const branch of taskBranches) {
|
|
336
|
+
const taskId = branch.name.replace('task/', '');
|
|
337
|
+
const node = {
|
|
338
|
+
id: taskId,
|
|
339
|
+
branch: branch.name,
|
|
340
|
+
status: branch.status,
|
|
341
|
+
agent: branch.agent,
|
|
342
|
+
files: branch.files,
|
|
343
|
+
children: []
|
|
344
|
+
};
|
|
345
|
+
nodeMap.set(taskId, node);
|
|
346
|
+
}
|
|
347
|
+
// Second pass: build tree
|
|
348
|
+
for (const [taskId, node] of nodeMap) {
|
|
349
|
+
const parentId = getParentTaskId(taskId);
|
|
350
|
+
if (parentId && nodeMap.has(parentId)) {
|
|
351
|
+
nodeMap.get(parentId).children.push(node);
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
roots.push(node);
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
if (options.json) {
|
|
358
|
+
console.log(JSON.stringify({ tree: roots }, null, 2));
|
|
359
|
+
return;
|
|
360
|
+
}
|
|
361
|
+
console.log(`
|
|
362
|
+
🌲 TASK TREE (Nested Branches)
|
|
363
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
364
|
+
`);
|
|
365
|
+
// Recursive tree printer
|
|
366
|
+
function printNode(node, indent, isLast) {
|
|
367
|
+
const branch = isLast ? '└─' : '├─';
|
|
368
|
+
const statusIcon = node.status === 'completed' ? '✅' :
|
|
369
|
+
node.status === 'active' ? '🔄' : '⚫';
|
|
370
|
+
const agentTag = node.agent ? ` (${node.agent})` : '';
|
|
371
|
+
console.log(`${indent}${branch} ${statusIcon} ${node.id}${agentTag}`);
|
|
372
|
+
const nextIndent = indent + (isLast ? ' ' : '│ ');
|
|
373
|
+
node.children.forEach((child, i) => {
|
|
374
|
+
printNode(child, nextIndent, i === node.children.length - 1);
|
|
375
|
+
});
|
|
376
|
+
}
|
|
377
|
+
roots.forEach((root, i) => {
|
|
378
|
+
printNode(root, '', i === roots.length - 1);
|
|
379
|
+
});
|
|
380
|
+
// Summary
|
|
381
|
+
const total = taskBranches.length;
|
|
382
|
+
const completed = taskBranches.filter(b => b.status === 'completed').length;
|
|
383
|
+
const active = taskBranches.filter(b => b.status === 'active').length;
|
|
384
|
+
const parents = roots.length;
|
|
385
|
+
const children = total - roots.filter(r => r.children.length === 0).length;
|
|
386
|
+
console.log(`
|
|
387
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
388
|
+
📊 Total: ${total} | Parents: ${parents} | Nested: ${children}
|
|
389
|
+
✅ ${completed} complete | 🔄 ${active} active
|
|
390
|
+
`);
|
|
391
|
+
});
|
|
392
|
+
// Subcommand: torrent decompose <parent-id>
|
|
393
|
+
torrentCommand
|
|
394
|
+
.command('decompose <parent-id>')
|
|
395
|
+
.description('Create child tasks from a parent (e.g., decompose DASH into DASH-A, DASH-B, DASH-C)')
|
|
396
|
+
.option('-c, --count <count>', 'Number of child tasks to create', '3')
|
|
397
|
+
.option('-a, --agent <agent>', 'Agent creating the decomposition')
|
|
398
|
+
.action(async (parentId, options) => {
|
|
399
|
+
const storage = await getStorage();
|
|
400
|
+
const count = parseInt(options.count || '3', 10);
|
|
401
|
+
const agent = options.agent || process.env.SPIDERSAN_AGENT || 'unknown';
|
|
402
|
+
const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';
|
|
403
|
+
console.log(`
|
|
404
|
+
🔀 DECOMPOSING: ${parentId}
|
|
405
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
406
|
+
Creating ${count} child tasks...
|
|
407
|
+
`);
|
|
408
|
+
const created = [];
|
|
409
|
+
for (let i = 0; i < Math.min(count, 26); i++) {
|
|
410
|
+
const childId = `${parentId}-${letters[i]}`;
|
|
411
|
+
const branchName = `task/${childId}`;
|
|
412
|
+
// Register child task (don't create git branch, just register)
|
|
413
|
+
await storage.register({
|
|
414
|
+
name: branchName,
|
|
415
|
+
files: [],
|
|
416
|
+
status: 'active',
|
|
417
|
+
agent: undefined, // Not claimed yet
|
|
418
|
+
description: `Child of ${parentId}`
|
|
419
|
+
});
|
|
420
|
+
created.push(childId);
|
|
421
|
+
console.log(` 📦 ${childId}`);
|
|
422
|
+
}
|
|
423
|
+
console.log(`
|
|
424
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
425
|
+
✅ Created ${created.length} child tasks
|
|
426
|
+
|
|
427
|
+
💡 Next: Agents can claim with:
|
|
428
|
+
spidersan torrent create ${created[0]} --agent <name>
|
|
429
|
+
`);
|
|
430
|
+
});
|
|
431
|
+
//# sourceMappingURL=torrent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"torrent.js","sourceRoot":"","sources":["../../src/commands/torrent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.d.ts","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,UAAU,SAMjB,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan tui
|
|
3
|
+
*
|
|
4
|
+
* Launch interactive terminal dashboard
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { SpidersanTUI } from '../tui/screen.js';
|
|
8
|
+
export const tuiCommand = new Command('tui')
|
|
9
|
+
.description('Launch interactive terminal dashboard')
|
|
10
|
+
.alias('dashboard')
|
|
11
|
+
.action(() => {
|
|
12
|
+
const tui = new SpidersanTUI();
|
|
13
|
+
tui.start();
|
|
14
|
+
});
|
|
15
|
+
//# sourceMappingURL=tui.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tui.js","sourceRoot":"","sources":["../../src/commands/tui.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACvC,WAAW,CAAC,uCAAuC,CAAC;KACpD,KAAK,CAAC,WAAW,CAAC;KAClB,MAAM,CAAC,GAAG,EAAE;IACT,MAAM,GAAG,GAAG,IAAI,YAAY,EAAE,CAAC;IAC/B,GAAG,CAAC,KAAK,EAAE,CAAC;AAChB,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wake.d.ts","sourceRoot":"","sources":["../../src/commands/wake.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4CpC,eAAO,MAAM,WAAW,SAyJlB,CAAC"}
|