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
|
@@ -1,180 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* spidersan sync-all
|
|
3
|
-
*
|
|
4
|
-
* Scan and sync all /Dev repositories.
|
|
5
|
-
* Global git coordination for the entire ecosystem.
|
|
6
|
-
*/
|
|
7
|
-
import { Command } from 'commander';
|
|
8
|
-
import { execSync } from 'child_process';
|
|
9
|
-
import { existsSync, readdirSync, statSync } from 'fs';
|
|
10
|
-
import { join, basename } from 'path';
|
|
11
|
-
const DEV_DIR = '/Users/freedbird/Dev';
|
|
12
|
-
function runGitInRepo(repoPath, cmd) {
|
|
13
|
-
try {
|
|
14
|
-
const output = execSync(`git ${cmd}`, {
|
|
15
|
-
cwd: repoPath,
|
|
16
|
-
encoding: 'utf-8',
|
|
17
|
-
stdio: 'pipe'
|
|
18
|
-
}).trim();
|
|
19
|
-
return { success: true, output };
|
|
20
|
-
}
|
|
21
|
-
catch (error) {
|
|
22
|
-
const output = error instanceof Error && 'stdout' in error
|
|
23
|
-
? error.stdout?.trim() || ''
|
|
24
|
-
: '';
|
|
25
|
-
return { success: false, output };
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
function discoverRepos(baseDir) {
|
|
29
|
-
const repos = [];
|
|
30
|
-
try {
|
|
31
|
-
const entries = readdirSync(baseDir);
|
|
32
|
-
for (const entry of entries) {
|
|
33
|
-
const fullPath = join(baseDir, entry);
|
|
34
|
-
// Skip non-directories
|
|
35
|
-
if (!statSync(fullPath).isDirectory())
|
|
36
|
-
continue;
|
|
37
|
-
// Skip hidden directories except .git
|
|
38
|
-
if (entry.startsWith('.') && entry !== '.git')
|
|
39
|
-
continue;
|
|
40
|
-
// Check if it's a git repo
|
|
41
|
-
const gitPath = join(fullPath, '.git');
|
|
42
|
-
if (existsSync(gitPath)) {
|
|
43
|
-
repos.push(fullPath);
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
// Directory doesn't exist or can't be read
|
|
49
|
-
}
|
|
50
|
-
return repos.sort();
|
|
51
|
-
}
|
|
52
|
-
function getRepoStatus(repoPath) {
|
|
53
|
-
const name = basename(repoPath);
|
|
54
|
-
const status = {
|
|
55
|
-
name,
|
|
56
|
-
path: repoPath,
|
|
57
|
-
uncommitted: 0,
|
|
58
|
-
unpushed: 0,
|
|
59
|
-
behind: 0,
|
|
60
|
-
branch: 'unknown'
|
|
61
|
-
};
|
|
62
|
-
// Get current branch
|
|
63
|
-
const branchResult = runGitInRepo(repoPath, 'rev-parse --abbrev-ref HEAD');
|
|
64
|
-
if (branchResult.success) {
|
|
65
|
-
status.branch = branchResult.output;
|
|
66
|
-
}
|
|
67
|
-
// Count uncommitted changes
|
|
68
|
-
const statusResult = runGitInRepo(repoPath, 'status --porcelain');
|
|
69
|
-
if (statusResult.success) {
|
|
70
|
-
const lines = statusResult.output.split('\n').filter(Boolean);
|
|
71
|
-
status.uncommitted = lines.length;
|
|
72
|
-
}
|
|
73
|
-
// Count unpushed commits
|
|
74
|
-
const unpushedResult = runGitInRepo(repoPath, 'log @{u}..HEAD --oneline');
|
|
75
|
-
if (unpushedResult.success) {
|
|
76
|
-
const lines = unpushedResult.output.split('\n').filter(Boolean);
|
|
77
|
-
status.unpushed = lines.length;
|
|
78
|
-
}
|
|
79
|
-
// Count behind remote
|
|
80
|
-
const behindResult = runGitInRepo(repoPath, 'log HEAD..@{u} --oneline');
|
|
81
|
-
if (behindResult.success) {
|
|
82
|
-
const lines = behindResult.output.split('\n').filter(Boolean);
|
|
83
|
-
status.behind = lines.length;
|
|
84
|
-
}
|
|
85
|
-
return status;
|
|
86
|
-
}
|
|
87
|
-
export const syncAllCommand = new Command('sync-all')
|
|
88
|
-
.description('Scan and sync all /Dev repositories')
|
|
89
|
-
.option('--status', 'Show status of all repos (default)')
|
|
90
|
-
.option('--pull', 'Pull all repos from remote')
|
|
91
|
-
.option('--push', 'Push all repos to remote')
|
|
92
|
-
.option('--repos <names>', 'Comma-separated repo names to sync')
|
|
93
|
-
.option('--json', 'Output as JSON')
|
|
94
|
-
.addHelpText('after', `
|
|
95
|
-
Examples:
|
|
96
|
-
$ spidersan sync-all # Show status of all repos
|
|
97
|
-
$ spidersan sync-all --pull # Pull all repos
|
|
98
|
-
$ spidersan sync-all --push # Push all repos with commits
|
|
99
|
-
$ spidersan sync-all --pull --push # Full sync cycle
|
|
100
|
-
$ spidersan sync-all --repos "Envoak,Sherlocksan" --pull
|
|
101
|
-
`)
|
|
102
|
-
.action(async (options) => {
|
|
103
|
-
// Default to status if no action specified
|
|
104
|
-
const showStatus = options.status || (!options.pull && !options.push);
|
|
105
|
-
// Discover repos
|
|
106
|
-
let repos = discoverRepos(DEV_DIR);
|
|
107
|
-
// Filter by name if specified
|
|
108
|
-
if (options.repos) {
|
|
109
|
-
const filterNames = options.repos.split(',').map(n => n.trim().toLowerCase());
|
|
110
|
-
repos = repos.filter(r => filterNames.includes(basename(r).toLowerCase()));
|
|
111
|
-
}
|
|
112
|
-
if (repos.length === 0) {
|
|
113
|
-
console.log('š·ļø No repositories found.');
|
|
114
|
-
return;
|
|
115
|
-
}
|
|
116
|
-
const statuses = [];
|
|
117
|
-
if (!options.json) {
|
|
118
|
-
console.log(`\nš·ļø SYNC-ALL ā ${repos.length} repositories\n`);
|
|
119
|
-
console.log('ā'.repeat(50));
|
|
120
|
-
}
|
|
121
|
-
for (const repoPath of repos) {
|
|
122
|
-
const name = basename(repoPath);
|
|
123
|
-
let status = getRepoStatus(repoPath);
|
|
124
|
-
// Pull if requested
|
|
125
|
-
if (options.pull) {
|
|
126
|
-
if (!options.json)
|
|
127
|
-
process.stdout.write(`š„ ${name}: pulling... `);
|
|
128
|
-
const result = runGitInRepo(repoPath, 'pull --rebase');
|
|
129
|
-
if (!options.json) {
|
|
130
|
-
console.log(result.success ? 'ā
' : 'ā ļø');
|
|
131
|
-
}
|
|
132
|
-
// Refresh status after pull
|
|
133
|
-
status = getRepoStatus(repoPath);
|
|
134
|
-
}
|
|
135
|
-
// Push if requested and has unpushed commits
|
|
136
|
-
if (options.push && status.unpushed > 0) {
|
|
137
|
-
if (!options.json)
|
|
138
|
-
process.stdout.write(`š¤ ${name}: pushing ${status.unpushed} commit(s)... `);
|
|
139
|
-
const result = runGitInRepo(repoPath, 'push');
|
|
140
|
-
if (!options.json) {
|
|
141
|
-
console.log(result.success ? 'ā
' : 'ā ļø');
|
|
142
|
-
}
|
|
143
|
-
// Refresh status after push
|
|
144
|
-
status = getRepoStatus(repoPath);
|
|
145
|
-
}
|
|
146
|
-
statuses.push(status);
|
|
147
|
-
// Show status
|
|
148
|
-
if (showStatus && !options.json) {
|
|
149
|
-
let icon = 'ā
';
|
|
150
|
-
if (status.uncommitted > 0)
|
|
151
|
-
icon = 'š';
|
|
152
|
-
if (status.unpushed > 0)
|
|
153
|
-
icon = 'š¤';
|
|
154
|
-
if (status.behind > 0)
|
|
155
|
-
icon = 'š„';
|
|
156
|
-
if (status.uncommitted > 0 && status.behind > 0)
|
|
157
|
-
icon = 'ā ļø';
|
|
158
|
-
console.log(`${icon} ${name.padEnd(20)} ${status.branch.padEnd(10)} | ${status.uncommitted} uncommitted | ${status.unpushed} unpushed | ${status.behind} behind`);
|
|
159
|
-
}
|
|
160
|
-
}
|
|
161
|
-
if (options.json) {
|
|
162
|
-
console.log(JSON.stringify({ repos: statuses }, null, 2));
|
|
163
|
-
return;
|
|
164
|
-
}
|
|
165
|
-
console.log('ā'.repeat(50));
|
|
166
|
-
// Summary
|
|
167
|
-
const withUncommitted = statuses.filter(s => s.uncommitted > 0).length;
|
|
168
|
-
const withUnpushed = statuses.filter(s => s.unpushed > 0).length;
|
|
169
|
-
const withBehind = statuses.filter(s => s.behind > 0).length;
|
|
170
|
-
const clean = statuses.filter(s => s.uncommitted === 0 && s.unpushed === 0 && s.behind === 0).length;
|
|
171
|
-
console.log(`\nš Summary: ${clean} clean | ${withUncommitted} uncommitted | ${withUnpushed} unpushed | ${withBehind} behind`);
|
|
172
|
-
if (withBehind > 0 && !options.pull) {
|
|
173
|
-
console.log('\nš” Run: spidersan sync-all --pull');
|
|
174
|
-
}
|
|
175
|
-
if (withUnpushed > 0 && !options.push) {
|
|
176
|
-
console.log('š” Run: spidersan sync-all --push');
|
|
177
|
-
}
|
|
178
|
-
console.log('');
|
|
179
|
-
});
|
|
180
|
-
//# sourceMappingURL=sync-all.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sync-all.js","sourceRoot":"","sources":["../../src/commands/sync-all.ts"],"names":[],"mappings":"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"}
|