spidersan 0.4.3 → 0.5.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/CHANGELOG.md +124 -0
- package/README.md +95 -23
- package/dist/bin/spidersan.d.ts.map +1 -1
- package/dist/bin/spidersan.js +22 -2
- package/dist/bin/spidersan.js.map +1 -1
- package/dist/commands/abandon.d.ts.map +1 -1
- package/dist/commands/abandon.js +4 -2
- package/dist/commands/abandon.js.map +1 -1
- package/dist/commands/auto.js +6 -6
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/cleanup.d.ts.map +1 -1
- package/dist/commands/cleanup.js +3 -8
- package/dist/commands/cleanup.js.map +1 -1
- package/dist/commands/config.d.ts +7 -0
- package/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +12 -0
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/conflicts.d.ts.map +1 -1
- package/dist/commands/conflicts.js +238 -34
- package/dist/commands/conflicts.js.map +1 -1
- package/dist/commands/cross-conflicts.d.ts +17 -0
- package/dist/commands/cross-conflicts.d.ts.map +1 -0
- package/dist/commands/cross-conflicts.js +305 -0
- package/dist/commands/cross-conflicts.js.map +1 -0
- package/dist/commands/daily.d.ts +7 -0
- package/dist/commands/daily.d.ts.map +1 -0
- package/dist/commands/daily.js +171 -0
- package/dist/commands/daily.js.map +1 -0
- package/dist/commands/dashboard.d.ts +22 -0
- package/dist/commands/dashboard.d.ts.map +1 -0
- package/dist/commands/dashboard.js +401 -0
- package/dist/commands/dashboard.js.map +1 -0
- package/dist/commands/depends.js +2 -2
- package/dist/commands/depends.js.map +1 -1
- package/dist/commands/doctor.d.ts +22 -0
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +215 -14
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/github-sync.d.ts +9 -0
- package/dist/commands/github-sync.d.ts.map +1 -0
- package/dist/commands/github-sync.js +180 -0
- package/dist/commands/github-sync.js.map +1 -0
- package/dist/commands/index.d.ts +11 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +17 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/log.d.ts +3 -4
- package/dist/commands/log.d.ts.map +1 -1
- package/dist/commands/log.js +102 -87
- package/dist/commands/log.js.map +1 -1
- package/dist/commands/merge-order.js +8 -1
- package/dist/commands/merge-order.js.map +1 -1
- package/dist/commands/merged.d.ts.map +1 -1
- package/dist/commands/merged.js +4 -2
- package/dist/commands/merged.js.map +1 -1
- package/dist/commands/pulse.d.ts +6 -2
- package/dist/commands/pulse.d.ts.map +1 -1
- package/dist/commands/pulse.js +152 -202
- package/dist/commands/pulse.js.map +1 -1
- package/dist/commands/queen.d.ts +25 -0
- package/dist/commands/queen.d.ts.map +1 -0
- package/dist/commands/queen.js +309 -0
- package/dist/commands/queen.js.map +1 -0
- package/dist/commands/ready-check.d.ts +1 -0
- package/dist/commands/ready-check.d.ts.map +1 -1
- package/dist/commands/ready-check.js +43 -28
- package/dist/commands/ready-check.js.map +1 -1
- package/dist/commands/rebase-helper.d.ts +3 -0
- package/dist/commands/rebase-helper.d.ts.map +1 -0
- package/dist/commands/rebase-helper.js +52 -0
- package/dist/commands/rebase-helper.js.map +1 -0
- package/dist/commands/register.d.ts +2 -0
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +66 -10
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/registry-sync.d.ts +9 -0
- package/dist/commands/registry-sync.d.ts.map +1 -0
- package/dist/commands/registry-sync.js +163 -0
- package/dist/commands/registry-sync.js.map +1 -0
- package/dist/commands/rescue.d.ts.map +1 -1
- package/dist/commands/rescue.js +69 -12
- package/dist/commands/rescue.js.map +1 -1
- package/dist/commands/stale.d.ts +16 -0
- package/dist/commands/stale.d.ts.map +1 -1
- package/dist/commands/stale.js +55 -21
- package/dist/commands/stale.js.map +1 -1
- package/dist/commands/sync-advisor.d.ts +14 -0
- package/dist/commands/sync-advisor.d.ts.map +1 -0
- package/dist/commands/sync-advisor.js +110 -0
- package/dist/commands/sync-advisor.js.map +1 -0
- package/dist/commands/sync.d.ts.map +1 -1
- package/dist/commands/sync.js +16 -5
- package/dist/commands/sync.js.map +1 -1
- package/dist/commands/torrent.d.ts.map +1 -1
- package/dist/commands/torrent.js +45 -22
- package/dist/commands/torrent.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +198 -7
- package/dist/commands/watch.js.map +1 -1
- package/dist/lib/activity.d.ts +53 -0
- package/dist/lib/activity.d.ts.map +1 -0
- package/dist/lib/activity.js +267 -0
- package/dist/lib/activity.js.map +1 -0
- package/dist/lib/agent-errors.d.ts.map +1 -1
- package/dist/lib/agent-errors.js +3 -1
- package/dist/lib/agent-errors.js.map +1 -1
- package/dist/lib/ast.d.ts.map +1 -1
- package/dist/lib/ast.js +66 -19
- package/dist/lib/ast.js.map +1 -1
- package/dist/lib/colony-subscriber.d.ts +53 -0
- package/dist/lib/colony-subscriber.d.ts.map +1 -0
- package/dist/lib/colony-subscriber.js +184 -0
- package/dist/lib/colony-subscriber.js.map +1 -0
- package/dist/lib/config.d.ts +1 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +7 -3
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/crypto.d.ts.map +1 -1
- package/dist/lib/crypto.js +7 -3
- package/dist/lib/crypto.js.map +1 -1
- package/dist/lib/daily-bridge.d.ts +41 -0
- package/dist/lib/daily-bridge.d.ts.map +1 -0
- package/dist/lib/daily-bridge.js +185 -0
- package/dist/lib/daily-bridge.js.map +1 -0
- package/dist/lib/github.d.ts +83 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +206 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/repo-scanner.d.ts +36 -0
- package/dist/lib/repo-scanner.d.ts.map +1 -0
- package/dist/lib/repo-scanner.js +159 -0
- package/dist/lib/repo-scanner.js.map +1 -0
- package/dist/lib/salvage-analyzer.d.ts +29 -0
- package/dist/lib/salvage-analyzer.d.ts.map +1 -0
- package/dist/lib/salvage-analyzer.js +122 -0
- package/dist/lib/salvage-analyzer.js.map +1 -0
- package/dist/lib/security.d.ts +15 -8
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +36 -1
- package/dist/lib/security.js.map +1 -1
- package/dist/lib/symbol-extractor.d.ts +41 -0
- package/dist/lib/symbol-extractor.d.ts.map +1 -0
- package/dist/lib/symbol-extractor.js +78 -0
- package/dist/lib/symbol-extractor.js.map +1 -0
- package/dist/storage/adapter.d.ts +1 -1
- package/dist/storage/adapter.d.ts.map +1 -1
- package/dist/storage/git-messages.d.ts.map +1 -1
- package/dist/storage/git-messages.js +57 -53
- package/dist/storage/git-messages.js.map +1 -1
- package/dist/storage/local.d.ts +1 -1
- package/dist/storage/local.d.ts.map +1 -1
- package/dist/storage/local.js +7 -5
- package/dist/storage/local.js.map +1 -1
- package/dist/storage/mycmail-adapter.d.ts.map +1 -1
- package/dist/storage/mycmail-adapter.js +11 -6
- package/dist/storage/mycmail-adapter.js.map +1 -1
- package/dist/storage/supabase.d.ts +21 -1
- package/dist/storage/supabase.d.ts.map +1 -1
- package/dist/storage/supabase.js +171 -6
- package/dist/storage/supabase.js.map +1 -1
- package/dist/tui/dashboard.d.ts.map +1 -1
- package/dist/tui/dashboard.js +15 -6
- package/dist/tui/dashboard.js.map +1 -1
- package/dist/types/cloud.d.ts +101 -0
- package/dist/types/cloud.d.ts.map +1 -0
- package/dist/types/cloud.js +13 -0
- package/dist/types/cloud.js.map +1 -0
- package/package.json +9 -6
- package/dist/commands/sync-all.d.ts +0 -9
- package/dist/commands/sync-all.d.ts.map +0 -1
- package/dist/commands/sync-all.js +0 -180
- package/dist/commands/sync-all.js.map +0 -1
|
@@ -0,0 +1,305 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan cross-conflicts
|
|
3
|
+
*
|
|
4
|
+
* Detect file conflicts ACROSS machines by comparing registries in Supabase.
|
|
5
|
+
* Extends the local `conflicts` command to work globally.
|
|
6
|
+
*
|
|
7
|
+
* Flow:
|
|
8
|
+
* 1. Push local registry to Supabase (ensure freshness)
|
|
9
|
+
* 2. Pull all other machines' registries
|
|
10
|
+
* 3. Compare file lists, apply tier escalation
|
|
11
|
+
* 4. Produce a GlobalConflictReport
|
|
12
|
+
*/
|
|
13
|
+
import { Command } from 'commander';
|
|
14
|
+
import { getStorage } from '../storage/index.js';
|
|
15
|
+
import { LocalStorage } from '../storage/local.js';
|
|
16
|
+
import { SupabaseStorage } from '../storage/supabase.js';
|
|
17
|
+
// ─── Tier Classification (mirrors conflicts.ts logic) ───
|
|
18
|
+
const TIER_3_PATTERNS = [
|
|
19
|
+
/\.env$/,
|
|
20
|
+
/secrets?\./i,
|
|
21
|
+
/credentials/i,
|
|
22
|
+
/password/i,
|
|
23
|
+
/api[_-]?key/i,
|
|
24
|
+
/private[_-]?key/i,
|
|
25
|
+
/\.pem$/,
|
|
26
|
+
/auth\.(ts|js)$/,
|
|
27
|
+
/security\.(ts|js)$/,
|
|
28
|
+
];
|
|
29
|
+
const TIER_2_PATTERNS = [
|
|
30
|
+
/package\.json$/,
|
|
31
|
+
/package-lock\.json$/,
|
|
32
|
+
/tsconfig\.json$/,
|
|
33
|
+
/CLAUDE\.md$/,
|
|
34
|
+
/\.gitignore$/,
|
|
35
|
+
/server\.(ts|js)$/,
|
|
36
|
+
/index\.(ts|js)$/,
|
|
37
|
+
/config\.(ts|js)$/,
|
|
38
|
+
];
|
|
39
|
+
function classifyTier(file) {
|
|
40
|
+
for (const p of TIER_3_PATTERNS) {
|
|
41
|
+
if (p.test(file))
|
|
42
|
+
return 3;
|
|
43
|
+
}
|
|
44
|
+
for (const p of TIER_2_PATTERNS) {
|
|
45
|
+
if (p.test(file))
|
|
46
|
+
return 2;
|
|
47
|
+
}
|
|
48
|
+
return 1;
|
|
49
|
+
}
|
|
50
|
+
const TIER_LABELS = {
|
|
51
|
+
1: { label: 'WARN', icon: '🟡', action: 'Proceed with caution' },
|
|
52
|
+
2: { label: 'PAUSE', icon: '🟠', action: 'Coordinate with remote agent before proceeding' },
|
|
53
|
+
3: { label: 'BLOCK', icon: '🔴', action: 'Must resolve before merge — cross-machine conflict' },
|
|
54
|
+
};
|
|
55
|
+
export function detectCrossMachineConflicts(localBranches, remoteMachines, localMachineId, localMachineName) {
|
|
56
|
+
// Build file → branch refs map
|
|
57
|
+
const fileMap = new Map();
|
|
58
|
+
// Add local branches
|
|
59
|
+
for (const branch of localBranches) {
|
|
60
|
+
if (branch.status !== 'active')
|
|
61
|
+
continue;
|
|
62
|
+
for (const file of branch.files) {
|
|
63
|
+
if (!fileMap.has(file))
|
|
64
|
+
fileMap.set(file, []);
|
|
65
|
+
fileMap.get(file).push({
|
|
66
|
+
branch_name: branch.branch_name,
|
|
67
|
+
machine_id: localMachineId,
|
|
68
|
+
machine_name: localMachineName,
|
|
69
|
+
agent: branch.agent,
|
|
70
|
+
repo_name: branch.repo_name,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
// Add remote branches
|
|
75
|
+
for (const machine of remoteMachines) {
|
|
76
|
+
for (const branch of machine.branches) {
|
|
77
|
+
if (branch.status !== 'active')
|
|
78
|
+
continue;
|
|
79
|
+
for (const file of branch.files) {
|
|
80
|
+
if (!fileMap.has(file))
|
|
81
|
+
fileMap.set(file, []);
|
|
82
|
+
fileMap.get(file).push({
|
|
83
|
+
branch_name: branch.name,
|
|
84
|
+
machine_id: machine.machine_id,
|
|
85
|
+
machine_name: machine.machine_name,
|
|
86
|
+
agent: branch.agent ?? null,
|
|
87
|
+
repo_name: machine.repo_name,
|
|
88
|
+
});
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
// Find files touched by multiple machines
|
|
93
|
+
const conflicts = [];
|
|
94
|
+
for (const [file, refs] of fileMap) {
|
|
95
|
+
const machineIds = new Set(refs.map(r => r.machine_id));
|
|
96
|
+
if (machineIds.size < 2)
|
|
97
|
+
continue; // Same machine only — not a cross-machine conflict
|
|
98
|
+
const tier = classifyTier(file);
|
|
99
|
+
conflicts.push({
|
|
100
|
+
file,
|
|
101
|
+
tier,
|
|
102
|
+
branches: refs.map(r => ({
|
|
103
|
+
branch_name: r.branch_name,
|
|
104
|
+
machine_id: r.machine_id,
|
|
105
|
+
machine_name: r.machine_name,
|
|
106
|
+
agent: r.agent,
|
|
107
|
+
})),
|
|
108
|
+
});
|
|
109
|
+
}
|
|
110
|
+
// Sort: TIER 3 first, then 2, then 1
|
|
111
|
+
conflicts.sort((a, b) => b.tier - a.tier);
|
|
112
|
+
return conflicts;
|
|
113
|
+
}
|
|
114
|
+
// ─── Local-Only Mode (no Supabase) ───
|
|
115
|
+
async function detectLocalConflicts() {
|
|
116
|
+
const storage = await getStorage();
|
|
117
|
+
const branches = await storage.list();
|
|
118
|
+
const activeBranches = branches.filter((b) => b.status === 'active');
|
|
119
|
+
// In local mode, detect conflicts within the same machine
|
|
120
|
+
const fileMap = new Map();
|
|
121
|
+
for (const branch of activeBranches) {
|
|
122
|
+
for (const file of (branch.files || [])) {
|
|
123
|
+
if (!fileMap.has(file))
|
|
124
|
+
fileMap.set(file, []);
|
|
125
|
+
fileMap.get(file).push({
|
|
126
|
+
branch: branch.name,
|
|
127
|
+
agent: branch.agent || null,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const conflicts = [];
|
|
132
|
+
for (const [file, refs] of fileMap) {
|
|
133
|
+
if (refs.length < 2)
|
|
134
|
+
continue;
|
|
135
|
+
conflicts.push({
|
|
136
|
+
file,
|
|
137
|
+
tier: classifyTier(file),
|
|
138
|
+
branches: refs.map(r => ({
|
|
139
|
+
branch_name: r.branch,
|
|
140
|
+
machine_id: 'local',
|
|
141
|
+
machine_name: 'local',
|
|
142
|
+
agent: r.agent,
|
|
143
|
+
})),
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
conflicts.sort((a, b) => b.tier - a.tier);
|
|
147
|
+
return {
|
|
148
|
+
conflicts,
|
|
149
|
+
machines_scanned: 1,
|
|
150
|
+
total_branches: activeBranches.length,
|
|
151
|
+
scan_time: new Date().toISOString(),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
// ─── Format Output ───
|
|
155
|
+
function formatReport(report, minTier) {
|
|
156
|
+
const lines = [];
|
|
157
|
+
const filtered = report.conflicts.filter(c => c.tier >= minTier);
|
|
158
|
+
if (filtered.length === 0) {
|
|
159
|
+
lines.push('✅ No cross-machine conflicts detected');
|
|
160
|
+
lines.push(` Scanned ${report.machines_scanned} machine(s), ${report.total_branches} active branch(es)`);
|
|
161
|
+
return lines.join('\n');
|
|
162
|
+
}
|
|
163
|
+
lines.push(`⚡ ${filtered.length} cross-machine conflict(s) found`);
|
|
164
|
+
lines.push(` Scanned ${report.machines_scanned} machine(s), ${report.total_branches} active branch(es)`);
|
|
165
|
+
lines.push('');
|
|
166
|
+
for (const conflict of filtered) {
|
|
167
|
+
const info = TIER_LABELS[conflict.tier];
|
|
168
|
+
lines.push(`${info.icon} TIER ${conflict.tier} ${info.label}: ${conflict.file}`);
|
|
169
|
+
lines.push(` Action: ${info.action}`);
|
|
170
|
+
for (const b of conflict.branches) {
|
|
171
|
+
const agentLabel = b.agent ? ` (${b.agent})` : '';
|
|
172
|
+
lines.push(` ├─ ${b.machine_name}/${b.branch_name}${agentLabel}`);
|
|
173
|
+
}
|
|
174
|
+
lines.push('');
|
|
175
|
+
}
|
|
176
|
+
// Summary by tier
|
|
177
|
+
const t3 = filtered.filter(c => c.tier === 3).length;
|
|
178
|
+
const t2 = filtered.filter(c => c.tier === 2).length;
|
|
179
|
+
const t1 = filtered.filter(c => c.tier === 1).length;
|
|
180
|
+
lines.push(`Summary: 🔴 ${t3} BLOCK 🟠 ${t2} PAUSE 🟡 ${t1} WARN`);
|
|
181
|
+
return lines.join('\n');
|
|
182
|
+
}
|
|
183
|
+
function formatJson(report, minTier) {
|
|
184
|
+
const filtered = {
|
|
185
|
+
...report,
|
|
186
|
+
conflicts: report.conflicts.filter(c => c.tier >= minTier),
|
|
187
|
+
};
|
|
188
|
+
return JSON.stringify(filtered, null, 2);
|
|
189
|
+
}
|
|
190
|
+
// ─── CLI Command ───
|
|
191
|
+
export const crossConflictsCommand = new Command('cross-conflicts')
|
|
192
|
+
.description('Detect file conflicts across machines (via Supabase)')
|
|
193
|
+
.option('--repo <name>', 'Repository name (default: current repo)')
|
|
194
|
+
.option('--tier <level>', 'Minimum tier to display (1, 2, or 3)', '1')
|
|
195
|
+
.option('--strict', 'Exit with code 1 if TIER 2+ conflicts found')
|
|
196
|
+
.option('--json', 'Output as JSON')
|
|
197
|
+
.option('--local', 'Local-only mode (skip Supabase, use local registry)')
|
|
198
|
+
.action(async (opts) => {
|
|
199
|
+
const minTier = parseInt(opts.tier, 10) || 1;
|
|
200
|
+
// Determine repo name
|
|
201
|
+
let repoName = opts.repo;
|
|
202
|
+
if (!repoName) {
|
|
203
|
+
try {
|
|
204
|
+
const path = await import('path');
|
|
205
|
+
repoName = path.basename(process.cwd());
|
|
206
|
+
}
|
|
207
|
+
catch {
|
|
208
|
+
repoName = 'unknown';
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
// Local-only mode
|
|
212
|
+
if (opts.local) {
|
|
213
|
+
const report = await detectLocalConflicts();
|
|
214
|
+
console.log(opts.json ? formatJson(report, minTier) : formatReport(report, minTier));
|
|
215
|
+
if (opts.strict && report.conflicts.some(c => c.tier >= 2)) {
|
|
216
|
+
process.exit(1);
|
|
217
|
+
}
|
|
218
|
+
return;
|
|
219
|
+
}
|
|
220
|
+
// Cross-machine mode via Supabase
|
|
221
|
+
try {
|
|
222
|
+
const config = await import('../lib/config.js');
|
|
223
|
+
const cfg = await config.loadConfig();
|
|
224
|
+
const url = process.env.SUPABASE_URL || cfg.storage.supabaseUrl;
|
|
225
|
+
const key = process.env.SUPABASE_KEY || cfg.storage.supabaseKey;
|
|
226
|
+
if (!url || !key) {
|
|
227
|
+
console.log('⚠️ Supabase not configured. Use --local for local-only conflicts.');
|
|
228
|
+
console.log(' Set SUPABASE_URL and SUPABASE_KEY, or run: spidersan cross-conflicts --local');
|
|
229
|
+
return;
|
|
230
|
+
}
|
|
231
|
+
const supabase = new SupabaseStorage({ url, key });
|
|
232
|
+
const localStorage = new LocalStorage();
|
|
233
|
+
// Load machine identity
|
|
234
|
+
let machineId = 'unknown';
|
|
235
|
+
let machineName = 'unknown';
|
|
236
|
+
try {
|
|
237
|
+
const fs = await import('fs');
|
|
238
|
+
const path = await import('path');
|
|
239
|
+
const os = await import('os');
|
|
240
|
+
const machineFile = path.join(os.default.homedir(), '.envoak', 'machine.json');
|
|
241
|
+
if (fs.existsSync(machineFile)) {
|
|
242
|
+
const machine = JSON.parse(fs.readFileSync(machineFile, 'utf-8'));
|
|
243
|
+
machineId = machine.machine_id || machine.id || 'unknown';
|
|
244
|
+
machineName = machine.name || 'unknown';
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
catch { /* use defaults */ }
|
|
248
|
+
console.log(`🕷️ Scanning cross-machine conflicts for "${repoName}" from ${machineName}...`);
|
|
249
|
+
console.log('');
|
|
250
|
+
// Step 1: Push local registry to ensure freshness
|
|
251
|
+
const branches = await localStorage.list();
|
|
252
|
+
const activeBranches = branches.filter((b) => b.status === 'active');
|
|
253
|
+
// Build local SpiderRegistry objects for comparison
|
|
254
|
+
const localRegistries = activeBranches.map((b) => ({
|
|
255
|
+
id: '',
|
|
256
|
+
machine_id: machineId,
|
|
257
|
+
machine_name: machineName,
|
|
258
|
+
hostname: '',
|
|
259
|
+
repo_path: process.cwd(),
|
|
260
|
+
repo_name: repoName,
|
|
261
|
+
branch_name: b.name,
|
|
262
|
+
files: b.files || [],
|
|
263
|
+
agent: b.agent || null,
|
|
264
|
+
description: b.description || null,
|
|
265
|
+
status: 'active',
|
|
266
|
+
last_commit_sha: null,
|
|
267
|
+
last_commit_date: null,
|
|
268
|
+
synced_at: new Date().toISOString(),
|
|
269
|
+
created_at: b.registeredAt?.toISOString() || new Date().toISOString(),
|
|
270
|
+
}));
|
|
271
|
+
// Step 2: Pull remote registries
|
|
272
|
+
let remoteMachines = [];
|
|
273
|
+
try {
|
|
274
|
+
remoteMachines = await supabase.pullRegistries(repoName, machineId);
|
|
275
|
+
}
|
|
276
|
+
catch (err) {
|
|
277
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
278
|
+
console.log(`⚠️ Could not pull remote registries: ${errorMsg}`);
|
|
279
|
+
console.log(' Falling back to local-only mode...');
|
|
280
|
+
console.log('');
|
|
281
|
+
const report = await detectLocalConflicts();
|
|
282
|
+
console.log(opts.json ? formatJson(report, minTier) : formatReport(report, minTier));
|
|
283
|
+
return;
|
|
284
|
+
}
|
|
285
|
+
// Step 3: Detect conflicts
|
|
286
|
+
const conflicts = detectCrossMachineConflicts(localRegistries, remoteMachines, machineId, machineName);
|
|
287
|
+
const totalRemoteBranches = remoteMachines.reduce((sum, m) => sum + m.branches.length, 0);
|
|
288
|
+
const report = {
|
|
289
|
+
conflicts,
|
|
290
|
+
machines_scanned: remoteMachines.length + 1, // +1 for local
|
|
291
|
+
total_branches: activeBranches.length + totalRemoteBranches,
|
|
292
|
+
scan_time: new Date().toISOString(),
|
|
293
|
+
};
|
|
294
|
+
console.log(opts.json ? formatJson(report, minTier) : formatReport(report, minTier));
|
|
295
|
+
if (opts.strict && conflicts.some(c => c.tier >= 2)) {
|
|
296
|
+
process.exit(1);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
catch (err) {
|
|
300
|
+
const errorMsg = err instanceof Error ? err.message : String(err);
|
|
301
|
+
console.error(`Error: ${errorMsg}`);
|
|
302
|
+
process.exit(1);
|
|
303
|
+
}
|
|
304
|
+
});
|
|
305
|
+
//# sourceMappingURL=cross-conflicts.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-conflicts.js","sourceRoot":"","sources":["../../src/commands/cross-conflicts.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAQzD,2DAA2D;AAE3D,MAAM,eAAe,GAAG;IACpB,QAAQ;IACR,aAAa;IACb,cAAc;IACd,WAAW;IACX,cAAc;IACd,kBAAkB;IAClB,QAAQ;IACR,gBAAgB;IAChB,oBAAoB;CACvB,CAAC;AAEF,MAAM,eAAe,GAAG;IACpB,gBAAgB;IAChB,qBAAqB;IACrB,iBAAiB;IACjB,aAAa;IACb,cAAc;IACd,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;CACrB,CAAC;AAEF,SAAS,YAAY,CAAC,IAAY;IAC9B,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,KAAK,MAAM,CAAC,IAAI,eAAe,EAAE,CAAC;QAC9B,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,CAAC,CAAC;IAC/B,CAAC;IACD,OAAO,CAAC,CAAC;AACb,CAAC;AAED,MAAM,WAAW,GAAoE;IACjF,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,sBAAsB,EAAE;IAChE,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,gDAAgD,EAAE;IAC3F,CAAC,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,oDAAoD,EAAE;CAClG,CAAC;AAYF,MAAM,UAAU,2BAA2B,CACvC,aAA+B,EAC/B,cAAqC,EACrC,cAAsB,EACtB,gBAAwB;IAExB,+BAA+B;IAC/B,MAAM,OAAO,GAAG,IAAI,GAAG,EAAuB,CAAC;IAE/C,qBAAqB;IACrB,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACjC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;YAAE,SAAS;QACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC;gBACpB,WAAW,EAAE,MAAM,CAAC,WAAW;gBAC/B,UAAU,EAAE,cAAc;gBAC1B,YAAY,EAAE,gBAAgB;gBAC9B,KAAK,EAAE,MAAM,CAAC,KAAK;gBACnB,SAAS,EAAE,MAAM,CAAC,SAAS;aAC9B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,sBAAsB;IACtB,KAAK,MAAM,OAAO,IAAI,cAAc,EAAE,CAAC;QACnC,KAAK,MAAM,MAAM,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACpC,IAAI,MAAM,CAAC,MAAM,KAAK,QAAQ;gBAAE,SAAS;YACzC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9B,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;oBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC;oBACpB,WAAW,EAAE,MAAM,CAAC,IAAI;oBACxB,UAAU,EAAE,OAAO,CAAC,UAAU;oBAC9B,YAAY,EAAE,OAAO,CAAC,YAAY;oBAClC,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;oBAC3B,SAAS,EAAE,OAAO,CAAC,SAAS;iBAC/B,CAAC,CAAC;YACP,CAAC;QACL,CAAC;IACL,CAAC;IAED,0CAA0C;IAC1C,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACjC,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;QACxD,IAAI,UAAU,CAAC,IAAI,GAAG,CAAC;YAAE,SAAS,CAAC,mDAAmD;QAEtF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,SAAS,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,IAAI;YACJ,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrB,WAAW,EAAE,CAAC,CAAC,WAAW;gBAC1B,UAAU,EAAE,CAAC,CAAC,UAAU;gBACxB,YAAY,EAAE,CAAC,CAAC,YAAY;gBAC5B,KAAK,EAAE,CAAC,CAAC,KAAK;aACjB,CAAC,CAAC;SACN,CAAC,CAAC;IACP,CAAC;IAED,qCAAqC;IACrC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO,SAAS,CAAC;AACrB,CAAC;AAED,wCAAwC;AAExC,KAAK,UAAU,oBAAoB;IAC/B,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IACnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC;IACtC,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAErE,0DAA0D;IAC1D,MAAM,OAAO,GAAG,IAAI,GAAG,EAA2D,CAAC;IACnF,KAAK,MAAM,MAAM,IAAI,cAAc,EAAE,CAAC;QAClC,KAAK,MAAM,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,EAAE,CAAC;YACtC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,IAAI,CAAC;gBACpB,MAAM,EAAE,MAAM,CAAC,IAAI;gBACnB,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,IAAI;aAC9B,CAAC,CAAC;QACP,CAAC;IACL,CAAC;IAED,MAAM,SAAS,GAA2B,EAAE,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,OAAO,EAAE,CAAC;QACjC,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,SAAS;QAC9B,SAAS,CAAC,IAAI,CAAC;YACX,IAAI;YACJ,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;YACxB,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;gBACrB,WAAW,EAAE,CAAC,CAAC,MAAM;gBACrB,UAAU,EAAE,OAAO;gBACnB,YAAY,EAAE,OAAO;gBACrB,KAAK,EAAE,CAAC,CAAC,KAAK;aACjB,CAAC,CAAC;SACN,CAAC,CAAC;IACP,CAAC;IAED,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;IAC1C,OAAO;QACH,SAAS;QACT,gBAAgB,EAAE,CAAC;QACnB,cAAc,EAAE,cAAc,CAAC,MAAM;QACrC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;KACtC,CAAC;AACN,CAAC;AAED,wBAAwB;AAExB,SAAS,YAAY,CAAC,MAA4B,EAAE,OAAe;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC,CAAC;IAEjE,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAC;QACpD,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,gBAAgB,gBAAgB,MAAM,CAAC,cAAc,oBAAoB,CAAC,CAAC;QAC3G,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,KAAK,QAAQ,CAAC,MAAM,kCAAkC,CAAC,CAAC;IACnE,KAAK,CAAC,IAAI,CAAC,cAAc,MAAM,CAAC,gBAAgB,gBAAgB,MAAM,CAAC,cAAc,oBAAoB,CAAC,CAAC;IAC3G,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,QAAQ,IAAI,QAAQ,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,WAAW,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QACxC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,SAAS,QAAQ,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,KAAK,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QACjF,KAAK,CAAC,IAAI,CAAC,cAAc,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;QACxC,KAAK,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,EAAE,CAAC;YAChC,MAAM,UAAU,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAClD,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,YAAY,IAAI,CAAC,CAAC,WAAW,GAAG,UAAU,EAAE,CAAC,CAAC;QACxE,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnB,CAAC;IAED,kBAAkB;IAClB,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,MAAM,EAAE,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC;IACrD,KAAK,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;IAErE,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,UAAU,CAAC,MAA4B,EAAE,OAAe;IAC7D,MAAM,QAAQ,GAAG;QACb,GAAG,MAAM;QACT,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,OAAO,CAAC;KAC7D,CAAC;IACF,OAAO,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC7C,CAAC;AAED,sBAAsB;AAEtB,MAAM,CAAC,MAAM,qBAAqB,GAAG,IAAI,OAAO,CAAC,iBAAiB,CAAC;KAC9D,WAAW,CAAC,sDAAsD,CAAC;KACnE,MAAM,CAAC,eAAe,EAAE,yCAAyC,CAAC;KAClE,MAAM,CAAC,gBAAgB,EAAE,sCAAsC,EAAE,GAAG,CAAC;KACrE,MAAM,CAAC,UAAU,EAAE,6CAA6C,CAAC;KACjE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;KAClC,MAAM,CAAC,SAAS,EAAE,qDAAqD,CAAC;KACxE,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;IACnB,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;IAE7C,sBAAsB;IACtB,IAAI,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;IACzB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACZ,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC5C,CAAC;QAAC,MAAM,CAAC;YACL,QAAQ,GAAG,SAAS,CAAC;QACzB,CAAC;IACL,CAAC;IAED,kBAAkB;IAClB,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QACrF,IAAI,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;YACzD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO;IACX,CAAC;IAED,kCAAkC;IAClC,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAChD,MAAM,GAAG,GAAG,MAAM,MAAM,CAAC,UAAU,EAAE,CAAC;QACtC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;QAChE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,IAAI,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC;QAEhE,IAAI,CAAC,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,oEAAoE,CAAC,CAAC;YAClF,OAAO,CAAC,GAAG,CAAC,iFAAiF,CAAC,CAAC;YAC/F,OAAO;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;QACnD,MAAM,YAAY,GAAG,IAAI,YAAY,EAAE,CAAC;QAExC,wBAAwB;QACxB,IAAI,SAAS,GAAG,SAAS,CAAC;QAC1B,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,CAAC;YACD,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;YAC9B,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,cAAc,CAAC,CAAC;YAC/E,IAAI,EAAE,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC,CAAC;gBAClE,SAAS,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,EAAE,IAAI,SAAS,CAAC;gBAC1D,WAAW,GAAG,OAAO,CAAC,IAAI,IAAI,SAAS,CAAC;YAC5C,CAAC;QACL,CAAC;QAAC,MAAM,CAAC,CAAC,kBAAkB,CAAC,CAAC;QAE9B,OAAO,CAAC,GAAG,CAAC,8CAA8C,QAAQ,UAAU,WAAW,KAAK,CAAC,CAAC;QAC9F,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAEhB,kDAAkD;QAClD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,CAAC;QAC3C,MAAM,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;QAErE,oDAAoD;QACpD,MAAM,eAAe,GAAqB,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACjE,EAAE,EAAE,EAAE;YACN,UAAU,EAAE,SAAS;YACrB,YAAY,EAAE,WAAW;YACzB,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,OAAO,CAAC,GAAG,EAAE;YACxB,SAAS,EAAE,QAAQ;YACnB,WAAW,EAAE,CAAC,CAAC,IAAI;YACnB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,EAAE;YACpB,KAAK,EAAE,CAAC,CAAC,KAAK,IAAI,IAAI;YACtB,WAAW,EAAE,CAAC,CAAC,WAAW,IAAI,IAAI;YAClC,MAAM,EAAE,QAAiB;YACzB,eAAe,EAAE,IAAI;YACrB,gBAAgB,EAAE,IAAI;YACtB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,UAAU,EAAE,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACxE,CAAC,CAAC,CAAC;QAEJ,iCAAiC;QACjC,IAAI,cAAc,GAA0B,EAAE,CAAC;QAC/C,IAAI,CAAC;YACD,cAAc,GAAG,MAAM,QAAQ,CAAC,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;QACxE,CAAC;QAAC,OAAO,GAAY,EAAE,CAAC;YACpB,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAClE,OAAO,CAAC,GAAG,CAAC,yCAAyC,QAAQ,EAAE,CAAC,CAAC;YACjE,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAChB,MAAM,MAAM,GAAG,MAAM,oBAAoB,EAAE,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;YACrF,OAAO;QACX,CAAC;QAED,2BAA2B;QAC3B,MAAM,SAAS,GAAG,2BAA2B,CACzC,eAAe,EACf,cAAc,EACd,SAAS,EACT,WAAW,CACd,CAAC;QAEF,MAAM,mBAAmB,GAAG,cAAc,CAAC,MAAM,CAC7C,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CACzC,CAAC;QAEF,MAAM,MAAM,GAAyB;YACjC,SAAS;YACT,gBAAgB,EAAE,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,eAAe;YAC5D,cAAc,EAAE,cAAc,CAAC,MAAM,GAAG,mBAAmB;YAC3D,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACtC,CAAC;QAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;QAErF,IAAI,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;IACL,CAAC;IAAC,OAAO,GAAY,EAAE,CAAC;QACpB,MAAM,QAAQ,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAClE,OAAO,CAAC,KAAK,CAAC,UAAU,QAAQ,EAAE,CAAC,CAAC;QACpC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan daily — Daily collab bridge (L2)
|
|
3
|
+
* Filters treebird-internal daily entries for branch-relevant context.
|
|
4
|
+
*/
|
|
5
|
+
import { Command } from 'commander';
|
|
6
|
+
export declare function dailyCommand(program: Command): void;
|
|
7
|
+
//# sourceMappingURL=daily.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daily.d.ts","sourceRoot":"","sources":["../../src/commands/daily.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,QAqG5C"}
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan daily — Daily collab bridge (L2)
|
|
3
|
+
* Filters treebird-internal daily entries for branch-relevant context.
|
|
4
|
+
*/
|
|
5
|
+
import chalk from 'chalk';
|
|
6
|
+
import { queryDaily, listDailyDates, todayStr } from '../lib/daily-bridge.js';
|
|
7
|
+
import { getStorage } from '../storage/index.js';
|
|
8
|
+
import { queryActivityLog } from '../lib/activity.js';
|
|
9
|
+
const AGENT_COLORS = {
|
|
10
|
+
treesan: chalk.green,
|
|
11
|
+
birdsan: chalk.cyan,
|
|
12
|
+
sherlocksan: chalk.red,
|
|
13
|
+
mycsan: chalk.magenta,
|
|
14
|
+
spidersan: chalk.yellow,
|
|
15
|
+
codex: chalk.gray,
|
|
16
|
+
teachersan: chalk.blue,
|
|
17
|
+
artisan: chalk.blueBright,
|
|
18
|
+
watsan: chalk.greenBright,
|
|
19
|
+
nanoclaw: chalk.yellowBright,
|
|
20
|
+
};
|
|
21
|
+
function agentColor(id) {
|
|
22
|
+
for (const [key, fn] of Object.entries(AGENT_COLORS)) {
|
|
23
|
+
if (id.includes(key))
|
|
24
|
+
return fn;
|
|
25
|
+
}
|
|
26
|
+
return chalk.white;
|
|
27
|
+
}
|
|
28
|
+
export function dailyCommand(program) {
|
|
29
|
+
program
|
|
30
|
+
.command('daily')
|
|
31
|
+
.description('Show branch-relevant entries from daily collab logs')
|
|
32
|
+
.option('-b, --branch <name>', 'Filter entries mentioning this branch')
|
|
33
|
+
.option('-d, --date <YYYY-MM-DD>', 'Specific date (default: today)')
|
|
34
|
+
.option('-l, --lookback <days>', 'Days to scan back (default: 14)', '14')
|
|
35
|
+
.option('-a, --agent <id>', 'Filter by agent (e.g. birdsan, ssan)')
|
|
36
|
+
.option('--tldr', 'One-line-per-entry summary mode')
|
|
37
|
+
.option('--context', 'Full context: activity log + daily entries for the branch')
|
|
38
|
+
.option('--all', 'Show all entries, not just branch-relevant ones')
|
|
39
|
+
.option('--dates', 'List available daily dates')
|
|
40
|
+
.option('--json', 'Output as JSON')
|
|
41
|
+
.action(async (options) => {
|
|
42
|
+
try {
|
|
43
|
+
// List available dates
|
|
44
|
+
if (options.dates) {
|
|
45
|
+
const dates = listDailyDates();
|
|
46
|
+
if (dates.length === 0) {
|
|
47
|
+
console.log(chalk.yellow('No daily files found. Check TREEBIRD_INTERNAL env var.'));
|
|
48
|
+
return;
|
|
49
|
+
}
|
|
50
|
+
dates.forEach(d => console.log(d));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
// Build search terms from branch name + registry
|
|
54
|
+
const terms = [];
|
|
55
|
+
if (options.branch) {
|
|
56
|
+
terms.push(options.branch);
|
|
57
|
+
// Also add shortened form e.g. "feat/my-thing" → "my-thing"
|
|
58
|
+
const short = options.branch.split('/').pop();
|
|
59
|
+
if (short && short !== options.branch)
|
|
60
|
+
terms.push(short);
|
|
61
|
+
}
|
|
62
|
+
else if (!options.all) {
|
|
63
|
+
// Pull branch names from registry as implicit terms
|
|
64
|
+
try {
|
|
65
|
+
const storage = await getStorage();
|
|
66
|
+
const branches = await storage.list();
|
|
67
|
+
for (const b of branches) {
|
|
68
|
+
if (b.name && b.name !== 'main') {
|
|
69
|
+
terms.push(b.name);
|
|
70
|
+
const short = b.name.split('/').pop();
|
|
71
|
+
if (short)
|
|
72
|
+
terms.push(short);
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch { /* registry unavailable — proceed without */ }
|
|
77
|
+
}
|
|
78
|
+
const entries = queryDaily({
|
|
79
|
+
date: options.date,
|
|
80
|
+
lookback: parseInt(options.lookback || '14', 10),
|
|
81
|
+
terms,
|
|
82
|
+
agents: options.agent ? [options.agent] : [],
|
|
83
|
+
requireMatch: !options.all,
|
|
84
|
+
});
|
|
85
|
+
if (options.json) {
|
|
86
|
+
console.log(JSON.stringify(entries, null, 2));
|
|
87
|
+
return;
|
|
88
|
+
}
|
|
89
|
+
const targetDate = options.date || (options.lookback === '1' ? todayStr() : null);
|
|
90
|
+
const header = options.branch
|
|
91
|
+
? `Daily context for ${chalk.green(options.branch)}`
|
|
92
|
+
: targetDate
|
|
93
|
+
? `Daily — ${targetDate}`
|
|
94
|
+
: `Daily collab (last ${options.lookback || 14} days)`;
|
|
95
|
+
console.log(chalk.cyan(`🕷️ ${header}`) + chalk.gray(` — ${entries.length} entry(s)\n`));
|
|
96
|
+
if (entries.length === 0) {
|
|
97
|
+
console.log(chalk.yellow('No matching entries found.'));
|
|
98
|
+
console.log(chalk.gray(' Try: spidersan daily --all --date 2026-03-03'));
|
|
99
|
+
console.log(chalk.gray(' Or: spidersan daily --dates'));
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
// Context mode: show activity log + daily entries side by side
|
|
103
|
+
if (options.context && options.branch) {
|
|
104
|
+
await showContext(options.branch, entries);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
displayEntries(entries, options.tldr || false);
|
|
108
|
+
}
|
|
109
|
+
catch (err) {
|
|
110
|
+
console.error(chalk.red(`❌ ${err.message}`));
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
function displayEntries(entries, tldr) {
|
|
116
|
+
let lastDate = '';
|
|
117
|
+
for (const entry of entries) {
|
|
118
|
+
// Date separator
|
|
119
|
+
if (entry.date !== lastDate) {
|
|
120
|
+
if (lastDate)
|
|
121
|
+
console.log('');
|
|
122
|
+
console.log(chalk.bold.underline(entry.date));
|
|
123
|
+
lastDate = entry.date;
|
|
124
|
+
}
|
|
125
|
+
const color = agentColor(entry.agentId);
|
|
126
|
+
const timeStr = chalk.gray(entry.time.padEnd(8));
|
|
127
|
+
const agentStr = color(`[${entry.agentId}]`);
|
|
128
|
+
const matchStr = entry.matchedTerms.length > 0
|
|
129
|
+
? chalk.gray(` (${entry.matchedTerms.slice(0, 3).join(', ')})`)
|
|
130
|
+
: '';
|
|
131
|
+
if (tldr) {
|
|
132
|
+
console.log(`${timeStr} ${agentStr} ${entry.excerpt}${matchStr}`);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
console.log(`${timeStr} ${agentStr}${matchStr}`);
|
|
136
|
+
// Word-wrap content at 100 chars
|
|
137
|
+
const wrapped = entry.content
|
|
138
|
+
.replace(/\*\*/g, '')
|
|
139
|
+
.replace(/`([^`]+)`/g, chalk.yellow('$1'))
|
|
140
|
+
.match(/.{1,100}(\s|$)/g)
|
|
141
|
+
?.join('\n ') ?? entry.content;
|
|
142
|
+
console.log(` ${wrapped}`);
|
|
143
|
+
console.log('');
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
async function showContext(branch, dailyEntries) {
|
|
148
|
+
console.log(chalk.bold(`📋 Activity Log — ${branch}\n`));
|
|
149
|
+
try {
|
|
150
|
+
const logResult = await queryActivityLog({ branch, limit: 20 });
|
|
151
|
+
if (logResult.records.length > 0) {
|
|
152
|
+
for (const r of logResult.records) {
|
|
153
|
+
const time = new Date(r.created_at).toLocaleString('en-GB', {
|
|
154
|
+
month: 'short', day: 'numeric', hour: '2-digit', minute: '2-digit',
|
|
155
|
+
});
|
|
156
|
+
const agent = r.agent ? chalk.magenta(`[${r.agent}]`) : '';
|
|
157
|
+
console.log(` ${chalk.gray(time)} ${agent} ${r.event}`);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
console.log(chalk.gray(' No activity log entries for this branch.'));
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
catch {
|
|
165
|
+
console.log(chalk.gray(' (activity log unavailable)'));
|
|
166
|
+
}
|
|
167
|
+
console.log('');
|
|
168
|
+
console.log(chalk.bold(`📅 Daily Collab Mentions\n`));
|
|
169
|
+
displayEntries(dailyEntries, false);
|
|
170
|
+
}
|
|
171
|
+
//# sourceMappingURL=daily.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"daily.js","sourceRoot":"","sources":["../../src/commands/daily.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan dashboard
|
|
3
|
+
*
|
|
4
|
+
* Real-time TUI showing:
|
|
5
|
+
* - Panel 1: Local branches (registry)
|
|
6
|
+
* - Panel 2: Remote machines (cross-machine registries)
|
|
7
|
+
* - Panel 3: Conflicts (F3 cross-conflicts)
|
|
8
|
+
* - Panel 4: Sync recommendations (F4 sync-advisor)
|
|
9
|
+
*
|
|
10
|
+
* Part of F5: TUI Dashboard
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from 'commander';
|
|
13
|
+
export declare const TIER1_COLOR = "yellow";
|
|
14
|
+
export declare const TIER2_COLOR = "red";
|
|
15
|
+
export declare const TIER3_COLOR = "magenta";
|
|
16
|
+
export declare const STATUS_ACTIVE_COLOR = "green";
|
|
17
|
+
export declare const STATUS_COMPLETED_COLOR = "blue";
|
|
18
|
+
export declare const STATUS_ABANDONED_COLOR = "white";
|
|
19
|
+
export declare const PANEL_BORDER_ACTIVE = "cyan";
|
|
20
|
+
export declare const PANEL_BORDER_INACTIVE = "gray";
|
|
21
|
+
export declare const dashboardCommand: Command;
|
|
22
|
+
//# sourceMappingURL=dashboard.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dashboard.d.ts","sourceRoot":"","sources":["../../src/commands/dashboard.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,eAAO,MAAM,WAAW,WAAW,CAAC;AACpC,eAAO,MAAM,WAAW,QAAQ,CAAC;AACjC,eAAO,MAAM,WAAW,YAAY,CAAC;AAErC,eAAO,MAAM,mBAAmB,UAAU,CAAC;AAC3C,eAAO,MAAM,sBAAsB,SAAS,CAAC;AAC7C,eAAO,MAAM,sBAAsB,UAAU,CAAC;AAE9C,eAAO,MAAM,mBAAmB,SAAS,CAAC;AAC1C,eAAO,MAAM,qBAAqB,SAAS,CAAC;AAuH5C,eAAO,MAAM,gBAAgB,SA+RzB,CAAC"}
|