spidersan 0.5.0 → 0.9.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 +46 -48
- package/README.md +241 -4
- package/dist/bin/spidersan.d.ts.map +1 -1
- package/dist/bin/spidersan.js +13 -1
- package/dist/bin/spidersan.js.map +1 -1
- package/dist/commands/abandon.d.ts.map +1 -1
- package/dist/commands/abandon.js +1 -9
- package/dist/commands/abandon.js.map +1 -1
- package/dist/commands/ai.d.ts +15 -0
- package/dist/commands/ai.d.ts.map +1 -0
- package/dist/commands/ai.js +498 -0
- package/dist/commands/ai.js.map +1 -0
- package/dist/commands/auto.d.ts.map +1 -1
- package/dist/commands/auto.js +2 -1
- package/dist/commands/auto.js.map +1 -1
- package/dist/commands/bot.d.ts +16 -0
- package/dist/commands/bot.d.ts.map +1 -0
- package/dist/commands/bot.js +398 -0
- package/dist/commands/bot.js.map +1 -0
- package/dist/commands/conflicts.d.ts.map +1 -1
- package/dist/commands/conflicts.js +264 -313
- package/dist/commands/conflicts.js.map +1 -1
- package/dist/commands/context.d.ts +8 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +104 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/cross-conflicts.d.ts.map +1 -1
- package/dist/commands/cross-conflicts.js +1 -38
- package/dist/commands/cross-conflicts.js.map +1 -1
- package/dist/commands/depends.d.ts.map +1 -1
- package/dist/commands/depends.js +1 -9
- package/dist/commands/depends.js.map +1 -1
- package/dist/commands/doctor.d.ts.map +1 -1
- package/dist/commands/doctor.js +117 -59
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/fleet-status.d.ts +14 -0
- package/dist/commands/fleet-status.d.ts.map +1 -0
- package/dist/commands/fleet-status.js +127 -0
- package/dist/commands/fleet-status.js.map +1 -0
- package/dist/commands/git-watch.d.ts +24 -0
- package/dist/commands/git-watch.d.ts.map +1 -0
- package/dist/commands/git-watch.js +84 -0
- package/dist/commands/git-watch.js.map +1 -0
- package/dist/commands/index.d.ts +5 -0
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +7 -0
- package/dist/commands/index.js.map +1 -1
- package/dist/commands/merge-order.d.ts.map +1 -1
- package/dist/commands/merge-order.js +18 -67
- package/dist/commands/merge-order.js.map +1 -1
- package/dist/commands/merged.d.ts.map +1 -1
- package/dist/commands/merged.js +1 -9
- package/dist/commands/merged.js.map +1 -1
- package/dist/commands/pulse.d.ts.map +1 -1
- package/dist/commands/pulse.js +137 -74
- package/dist/commands/pulse.js.map +1 -1
- package/dist/commands/queen.d.ts.map +1 -1
- package/dist/commands/queen.js +36 -19
- package/dist/commands/queen.js.map +1 -1
- package/dist/commands/ready-check.d.ts +2 -1
- package/dist/commands/ready-check.d.ts.map +1 -1
- package/dist/commands/ready-check.js +6 -30
- package/dist/commands/ready-check.js.map +1 -1
- package/dist/commands/register.d.ts.map +1 -1
- package/dist/commands/register.js +7 -29
- package/dist/commands/register.js.map +1 -1
- package/dist/commands/stale.d.ts +1 -9
- package/dist/commands/stale.d.ts.map +1 -1
- package/dist/commands/stale.js +1 -42
- package/dist/commands/stale.js.map +1 -1
- package/dist/commands/torrent.d.ts.map +1 -1
- package/dist/commands/torrent.js +29 -18
- package/dist/commands/torrent.js.map +1 -1
- package/dist/commands/watch.d.ts.map +1 -1
- package/dist/commands/watch.js +13 -34
- package/dist/commands/watch.js.map +1 -1
- package/dist/lib/agent-errors.js +2 -2
- package/dist/lib/agent-errors.js.map +1 -1
- package/dist/lib/ai/context-builder.d.ts +16 -0
- package/dist/lib/ai/context-builder.d.ts.map +1 -0
- package/dist/lib/ai/context-builder.js +216 -0
- package/dist/lib/ai/context-builder.js.map +1 -0
- package/dist/lib/ai/event-handler.d.ts +21 -0
- package/dist/lib/ai/event-handler.d.ts.map +1 -0
- package/dist/lib/ai/event-handler.js +98 -0
- package/dist/lib/ai/event-handler.js.map +1 -0
- package/dist/lib/ai/index.d.ts +13 -0
- package/dist/lib/ai/index.d.ts.map +1 -0
- package/dist/lib/ai/index.js +11 -0
- package/dist/lib/ai/index.js.map +1 -0
- package/dist/lib/ai/llm-client.d.ts +37 -0
- package/dist/lib/ai/llm-client.d.ts.map +1 -0
- package/dist/lib/ai/llm-client.js +225 -0
- package/dist/lib/ai/llm-client.js.map +1 -0
- package/dist/lib/ai/reasoner.d.ts +11 -0
- package/dist/lib/ai/reasoner.d.ts.map +1 -0
- package/dist/lib/ai/reasoner.js +246 -0
- package/dist/lib/ai/reasoner.js.map +1 -0
- package/dist/lib/ai/setup.d.ts +40 -0
- package/dist/lib/ai/setup.d.ts.map +1 -0
- package/dist/lib/ai/setup.js +154 -0
- package/dist/lib/ai/setup.js.map +1 -0
- package/dist/lib/ai/types.d.ts +135 -0
- package/dist/lib/ai/types.d.ts.map +1 -0
- package/dist/lib/ai/types.js +39 -0
- package/dist/lib/ai/types.js.map +1 -0
- package/dist/lib/colony-subscriber.d.ts +15 -12
- package/dist/lib/colony-subscriber.d.ts.map +1 -1
- package/dist/lib/colony-subscriber.js +146 -65
- package/dist/lib/colony-subscriber.js.map +1 -1
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +18 -4
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/conflict-analyzer.d.ts +33 -0
- package/dist/lib/conflict-analyzer.d.ts.map +1 -0
- package/dist/lib/conflict-analyzer.js +114 -0
- package/dist/lib/conflict-analyzer.js.map +1 -0
- package/dist/lib/conflict-renderer.d.ts +7 -0
- package/dist/lib/conflict-renderer.d.ts.map +1 -0
- package/dist/lib/conflict-renderer.js +162 -0
- package/dist/lib/conflict-renderer.js.map +1 -0
- package/dist/lib/conflict-tier.d.ts +20 -0
- package/dist/lib/conflict-tier.d.ts.map +1 -0
- package/dist/lib/conflict-tier.js +49 -0
- package/dist/lib/conflict-tier.js.map +1 -0
- package/dist/lib/crypto.js +1 -1
- package/dist/lib/crypto.js.map +1 -1
- package/dist/lib/daily-bridge.d.ts.map +1 -1
- package/dist/lib/daily-bridge.js +3 -2
- package/dist/lib/daily-bridge.js.map +1 -1
- package/dist/lib/git-events-subscriber.d.ts +59 -0
- package/dist/lib/git-events-subscriber.d.ts.map +1 -0
- package/dist/lib/git-events-subscriber.js +779 -0
- package/dist/lib/git-events-subscriber.js.map +1 -0
- package/dist/lib/git.d.ts +15 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +180 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/github.d.ts.map +1 -1
- package/dist/lib/github.js +14 -9
- package/dist/lib/github.js.map +1 -1
- package/dist/lib/graph.d.ts +23 -0
- package/dist/lib/graph.d.ts.map +1 -0
- package/dist/lib/graph.js +134 -0
- package/dist/lib/graph.js.map +1 -0
- package/dist/lib/hub.d.ts +31 -0
- package/dist/lib/hub.d.ts.map +1 -0
- package/dist/lib/hub.js +92 -0
- package/dist/lib/hub.js.map +1 -0
- package/dist/lib/regex-utils.d.ts +6 -0
- package/dist/lib/regex-utils.d.ts.map +1 -0
- package/dist/lib/regex-utils.js +24 -0
- package/dist/lib/regex-utils.js.map +1 -0
- package/dist/lib/remote-drift.d.ts +60 -0
- package/dist/lib/remote-drift.d.ts.map +1 -0
- package/dist/lib/remote-drift.js +225 -0
- package/dist/lib/remote-drift.js.map +1 -0
- package/dist/lib/repo-scanner.d.ts +0 -4
- package/dist/lib/repo-scanner.d.ts.map +1 -1
- package/dist/lib/repo-scanner.js +2 -1
- package/dist/lib/repo-scanner.js.map +1 -1
- package/dist/lib/salvage-analyzer.d.ts.map +1 -1
- package/dist/lib/salvage-analyzer.js +2 -3
- package/dist/lib/salvage-analyzer.js.map +1 -1
- package/dist/lib/security.d.ts +17 -0
- package/dist/lib/security.d.ts.map +1 -1
- package/dist/lib/security.js +34 -1
- package/dist/lib/security.js.map +1 -1
- package/dist/lib/session-logger.d.ts +54 -0
- package/dist/lib/session-logger.d.ts.map +1 -0
- package/dist/lib/session-logger.js +136 -0
- package/dist/lib/session-logger.js.map +1 -0
- package/dist/storage/adapter.d.ts +4 -0
- package/dist/storage/adapter.d.ts.map +1 -1
- package/dist/storage/branch-registry-store.d.ts +13 -0
- package/dist/storage/branch-registry-store.d.ts.map +1 -0
- package/dist/storage/branch-registry-store.js +2 -0
- package/dist/storage/branch-registry-store.js.map +1 -0
- package/dist/storage/factory.d.ts +4 -0
- package/dist/storage/factory.d.ts.map +1 -1
- package/dist/storage/factory.js +25 -9
- package/dist/storage/factory.js.map +1 -1
- package/dist/storage/index.d.ts +5 -5
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +5 -6
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/json-branch-registry-store.d.ts +19 -0
- package/dist/storage/json-branch-registry-store.d.ts.map +1 -0
- package/dist/storage/json-branch-registry-store.js +112 -0
- package/dist/storage/json-branch-registry-store.js.map +1 -0
- package/dist/storage/local.d.ts +2 -6
- package/dist/storage/local.d.ts.map +1 -1
- package/dist/storage/local.js +13 -76
- package/dist/storage/local.js.map +1 -1
- package/dist/storage/memory-branch-registry-store.d.ts +16 -0
- package/dist/storage/memory-branch-registry-store.d.ts.map +1 -0
- package/dist/storage/memory-branch-registry-store.js +65 -0
- package/dist/storage/memory-branch-registry-store.js.map +1 -0
- package/dist/storage/mycmail-adapter.d.ts.map +1 -1
- package/dist/storage/mycmail-adapter.js +4 -6
- package/dist/storage/mycmail-adapter.js.map +1 -1
- package/dist/storage/supabase-registry-sync-client-impl.d.ts +46 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.js +322 -0
- package/dist/storage/supabase-registry-sync-client-impl.js.map +1 -0
- package/dist/storage/supabase-registry-sync-client.d.ts +9 -0
- package/dist/storage/supabase-registry-sync-client.d.ts.map +1 -0
- package/dist/storage/supabase-registry-sync-client.js +2 -0
- package/dist/storage/supabase-registry-sync-client.js.map +1 -0
- package/dist/storage/supabase.d.ts +8 -46
- package/dist/storage/supabase.d.ts.map +1 -1
- package/dist/storage/supabase.js +30 -342
- package/dist/storage/supabase.js.map +1 -1
- package/dist/tui/screen.d.ts.map +1 -1
- package/dist/tui/screen.js +5 -3
- package/dist/tui/screen.js.map +1 -1
- package/package.json +1 -1
package/dist/lib/hub.js
ADDED
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
const DEFAULT_HUB_URL = process.env.HUB_URL || 'https://hub.treebird.uk';
|
|
2
|
+
function warnHubError(action, error) {
|
|
3
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
4
|
+
console.warn(`⚠️ Hub ${action} failed: ${message}`);
|
|
5
|
+
}
|
|
6
|
+
class FetchHubAdapter {
|
|
7
|
+
url;
|
|
8
|
+
constructor(url) {
|
|
9
|
+
this.url = url;
|
|
10
|
+
}
|
|
11
|
+
async postToChat(payload) {
|
|
12
|
+
try {
|
|
13
|
+
const response = await fetch(`${this.url}/api/chat`, {
|
|
14
|
+
method: 'POST',
|
|
15
|
+
headers: { 'Content-Type': 'application/json' },
|
|
16
|
+
body: JSON.stringify(payload),
|
|
17
|
+
});
|
|
18
|
+
if (!response.ok) {
|
|
19
|
+
console.warn(`⚠️ Hub chat post failed: ${response.status}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
warnHubError('chat post', error);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
async wakeAgent(agentId, payload) {
|
|
27
|
+
try {
|
|
28
|
+
const response = await fetch(`${this.url}/api/wake/${encodeURIComponent(agentId)}`, {
|
|
29
|
+
method: 'POST',
|
|
30
|
+
headers: { 'Content-Type': 'application/json' },
|
|
31
|
+
body: JSON.stringify(payload),
|
|
32
|
+
});
|
|
33
|
+
if (!response.ok) {
|
|
34
|
+
console.warn(`⚠️ Hub wake failed for ${agentId}: ${response.status}`);
|
|
35
|
+
}
|
|
36
|
+
return response.ok;
|
|
37
|
+
}
|
|
38
|
+
catch (error) {
|
|
39
|
+
warnHubError(`wake for ${agentId}`, error);
|
|
40
|
+
return false;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export class HubClient {
|
|
45
|
+
adapter;
|
|
46
|
+
url;
|
|
47
|
+
constructor(adapter, url = DEFAULT_HUB_URL) {
|
|
48
|
+
this.adapter = adapter;
|
|
49
|
+
this.url = url;
|
|
50
|
+
}
|
|
51
|
+
async postToChat(payload) {
|
|
52
|
+
try {
|
|
53
|
+
await this.adapter.postToChat(payload);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
warnHubError('chat post', error);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
async notifyConflict(branch, conflicts) {
|
|
60
|
+
const actionableConflicts = conflicts.filter((conflict) => conflict.tier >= 2);
|
|
61
|
+
if (actionableConflicts.length === 0)
|
|
62
|
+
return;
|
|
63
|
+
const severity = actionableConflicts.some((conflict) => conflict.tier === 3)
|
|
64
|
+
? '🔴 TIER 3 BLOCK'
|
|
65
|
+
: '🟠 TIER 2 PAUSE';
|
|
66
|
+
const message = `🕷️⚠️ **Conflict Alert** on \`${branch}\`\n\n${severity}\n\nConflicting files require coordination.`;
|
|
67
|
+
await this.postToChat({
|
|
68
|
+
agent: 'spidersan',
|
|
69
|
+
name: 'Spidersan',
|
|
70
|
+
message,
|
|
71
|
+
glyph: '🕷️',
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
async wakeAgent(agentId, reason) {
|
|
75
|
+
try {
|
|
76
|
+
return await this.adapter.wakeAgent(agentId, {
|
|
77
|
+
sender: 'spidersan',
|
|
78
|
+
reason,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
catch (error) {
|
|
82
|
+
warnHubError(`wake for ${agentId}`, error);
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
export function createHubClient(options = {}) {
|
|
88
|
+
const url = options.url || DEFAULT_HUB_URL;
|
|
89
|
+
const adapter = options.adapter || new FetchHubAdapter(url);
|
|
90
|
+
return new HubClient(adapter, url);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=hub.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hub.js","sourceRoot":"","sources":["../../src/lib/hub.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility for combining multiple Regular Expressions into a single efficient RegExp.
|
|
3
|
+
* Consolidates patterns using the OR (|) operator to reduce matching complexity from O(N*M) to O(1).
|
|
4
|
+
*/
|
|
5
|
+
export declare function compilePatterns(patterns: RegExp[]): RegExp[];
|
|
6
|
+
//# sourceMappingURL=regex-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-utils.d.ts","sourceRoot":"","sources":["../../src/lib/regex-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAqB5D"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Utility for combining multiple Regular Expressions into a single efficient RegExp.
|
|
3
|
+
* Consolidates patterns using the OR (|) operator to reduce matching complexity from O(N*M) to O(1).
|
|
4
|
+
*/
|
|
5
|
+
export function compilePatterns(patterns) {
|
|
6
|
+
if (!patterns || patterns.length === 0)
|
|
7
|
+
return [];
|
|
8
|
+
// Group patterns by their flags to preserve behavior (e.g., 'i', 'g', 'm')
|
|
9
|
+
const grouped = new Map();
|
|
10
|
+
for (const p of patterns) {
|
|
11
|
+
const flags = p.flags;
|
|
12
|
+
if (!grouped.has(flags)) {
|
|
13
|
+
grouped.set(flags, []);
|
|
14
|
+
}
|
|
15
|
+
// Use non-capturing groups to ensure OR logic applies correctly to the whole pattern
|
|
16
|
+
grouped.get(flags).push(`(?:${p.source})`);
|
|
17
|
+
}
|
|
18
|
+
const result = [];
|
|
19
|
+
for (const [flags, sources] of grouped.entries()) {
|
|
20
|
+
result.push(new RegExp(sources.join('|'), flags));
|
|
21
|
+
}
|
|
22
|
+
return result;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=regex-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regex-utils.js","sourceRoot":"","sources":["../../src/lib/regex-utils.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,UAAU,eAAe,CAAC,QAAkB;IAC9C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAElD,2EAA2E;IAC3E,MAAM,OAAO,GAAG,IAAI,GAAG,EAAoB,CAAC;IAE5C,KAAK,MAAM,CAAC,IAAI,QAAQ,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QACtB,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;QACD,qFAAqF;QACrF,OAAO,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC;IAChD,CAAC;IAED,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;QAC/C,MAAM,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,MAAM,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* remote-drift.ts
|
|
3
|
+
*
|
|
4
|
+
* Detects whether origin/main has advanced past local HEAD and cross-references
|
|
5
|
+
* the drift zone against (a) the registered file list and (b) unstaged tracked
|
|
6
|
+
* files in the working tree.
|
|
7
|
+
*
|
|
8
|
+
* Core primitives (getDriftZone, getUnstagedTrackedFiles, classifyDriftZone)
|
|
9
|
+
* are exported so that watch --fetch-poll can reuse them without importing
|
|
10
|
+
* from the command layer.
|
|
11
|
+
*/
|
|
12
|
+
export interface DriftEntry {
|
|
13
|
+
file: string;
|
|
14
|
+
registered: boolean;
|
|
15
|
+
tier: 1 | 2 | 3 | null;
|
|
16
|
+
unstaged: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface DriftResult {
|
|
19
|
+
branch: string;
|
|
20
|
+
remote: string;
|
|
21
|
+
localAhead: number;
|
|
22
|
+
remoteAhead: number;
|
|
23
|
+
state: 'synced' | 'local_ahead' | 'remote_ahead' | 'diverged';
|
|
24
|
+
driftZone: string[];
|
|
25
|
+
registeredInDrift: DriftEntry[];
|
|
26
|
+
unstagedInDrift: DriftEntry[];
|
|
27
|
+
safeToPush: boolean;
|
|
28
|
+
rebaseContinueRisk: boolean;
|
|
29
|
+
recommendation: 'synced' | 'push_clean' | 'pull_rebase' | 'rebase_clean' | 'rebase_with_conflict_prep';
|
|
30
|
+
}
|
|
31
|
+
export interface DriftSkipped {
|
|
32
|
+
skipped: true;
|
|
33
|
+
reason: string;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Returns the union of files touched by commits that origin/<branch> has but
|
|
37
|
+
* local HEAD does not. Requires a prior `git fetch origin`.
|
|
38
|
+
*/
|
|
39
|
+
export declare function getDriftZone(remote: string, branch: string): string[];
|
|
40
|
+
/**
|
|
41
|
+
* Returns tracked files that have unstaged modifications (working tree vs index).
|
|
42
|
+
*/
|
|
43
|
+
export declare function getUnstagedTrackedFiles(): string[];
|
|
44
|
+
/**
|
|
45
|
+
* Cross-references driftFiles against registeredFiles + unstagedFiles.
|
|
46
|
+
* Returns a DriftEntry for each file in the drift zone.
|
|
47
|
+
*/
|
|
48
|
+
export declare function classifyDriftZone(driftFiles: string[], registeredFiles: string[], unstagedFiles: string[], tierOptions?: {
|
|
49
|
+
extraTier3?: RegExp[];
|
|
50
|
+
extraTier2?: RegExp[];
|
|
51
|
+
}): DriftEntry[];
|
|
52
|
+
/**
|
|
53
|
+
* Main entry point. Fetches origin, computes drift, classifies against registry
|
|
54
|
+
* and working tree. Returns DriftSkipped for graceful-degradation cases.
|
|
55
|
+
*/
|
|
56
|
+
export declare function computeDriftResult(registeredFiles: string[], options?: {
|
|
57
|
+
remote?: string;
|
|
58
|
+
branch?: string;
|
|
59
|
+
}): Promise<DriftResult | DriftSkipped>;
|
|
60
|
+
//# sourceMappingURL=remote-drift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-drift.d.ts","sourceRoot":"","sources":["../../src/lib/remote-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AASH,MAAM,WAAW,UAAU;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,QAAQ,GAAG,aAAa,GAAG,cAAc,GAAG,UAAU,CAAC;IAC9D,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,iBAAiB,EAAE,UAAU,EAAE,CAAC;IAChC,eAAe,EAAE,UAAU,EAAE,CAAC;IAC9B,UAAU,EAAE,OAAO,CAAC;IACpB,kBAAkB,EAAE,OAAO,CAAC;IAC5B,cAAc,EAAE,QAAQ,GAAG,YAAY,GAAG,aAAa,GAAG,cAAc,GAAG,2BAA2B,CAAC;CAC1G;AAED,MAAM,WAAW,YAAY;IACzB,OAAO,EAAE,IAAI,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAClB;AA0BD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAgCrE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,IAAI,MAAM,EAAE,CAOlD;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC7B,UAAU,EAAE,MAAM,EAAE,EACpB,eAAe,EAAE,MAAM,EAAE,EACzB,aAAa,EAAE,MAAM,EAAE,EACvB,WAAW,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAC/D,UAAU,EAAE,CAgBd;AAuBD;;;GAGG;AACH,wBAAsB,kBAAkB,CACpC,eAAe,EAAE,MAAM,EAAE,EACzB,OAAO,CAAC,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C,OAAO,CAAC,WAAW,GAAG,YAAY,CAAC,CAuGrC"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* remote-drift.ts
|
|
3
|
+
*
|
|
4
|
+
* Detects whether origin/main has advanced past local HEAD and cross-references
|
|
5
|
+
* the drift zone against (a) the registered file list and (b) unstaged tracked
|
|
6
|
+
* files in the working tree.
|
|
7
|
+
*
|
|
8
|
+
* Core primitives (getDriftZone, getUnstagedTrackedFiles, classifyDriftZone)
|
|
9
|
+
* are exported so that watch --fetch-poll can reuse them without importing
|
|
10
|
+
* from the command layer.
|
|
11
|
+
*/
|
|
12
|
+
import { execFileSync } from 'child_process';
|
|
13
|
+
import * as fs from 'fs';
|
|
14
|
+
import * as path from 'path';
|
|
15
|
+
import { getCurrentBranch, getAheadBehind } from './git.js';
|
|
16
|
+
import { classifyTier } from './conflict-tier.js';
|
|
17
|
+
import { validateBranchName } from './security.js';
|
|
18
|
+
function execGit(args) {
|
|
19
|
+
return execFileSync('git', args, {
|
|
20
|
+
encoding: 'utf-8',
|
|
21
|
+
env: { ...process.env },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function isOfflineError(error) {
|
|
25
|
+
const msg = String(error instanceof Error ? error.message : error);
|
|
26
|
+
return /ENOTFOUND|ETIMEDOUT|ECONNREFUSED|network|Could not resolve host|unable to connect|cannot access/i.test(msg);
|
|
27
|
+
}
|
|
28
|
+
function isInRebase() {
|
|
29
|
+
try {
|
|
30
|
+
const gitDir = execGit(['rev-parse', '--git-dir']).trim();
|
|
31
|
+
return (fs.existsSync(path.join(gitDir, 'rebase-merge')) ||
|
|
32
|
+
fs.existsSync(path.join(gitDir, 'rebase-apply')));
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return false;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Returns the union of files touched by commits that origin/<branch> has but
|
|
40
|
+
* local HEAD does not. Requires a prior `git fetch origin`.
|
|
41
|
+
*/
|
|
42
|
+
export function getDriftZone(remote, branch) {
|
|
43
|
+
const safeBranch = validateBranchName(branch);
|
|
44
|
+
const upstreamRef = `${remote}/${safeBranch}`;
|
|
45
|
+
let commitList;
|
|
46
|
+
try {
|
|
47
|
+
commitList = execGit(['rev-list', `HEAD..${upstreamRef}`]).trim();
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
if (!commitList)
|
|
53
|
+
return [];
|
|
54
|
+
const shas = commitList.split('\n').filter(Boolean);
|
|
55
|
+
const files = new Set();
|
|
56
|
+
for (const sha of shas) {
|
|
57
|
+
try {
|
|
58
|
+
const stat = execGit(['show', '--stat', '--format=', sha]);
|
|
59
|
+
for (const line of stat.split('\n')) {
|
|
60
|
+
// Lines like: " src/lib/git.ts | 10 ++--"
|
|
61
|
+
const match = /^\s+(.+?)\s+\|/.exec(line);
|
|
62
|
+
if (match && match[1]) {
|
|
63
|
+
files.add(match[1].trim());
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
// skip unparseable commit
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return [...files];
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Returns tracked files that have unstaged modifications (working tree vs index).
|
|
75
|
+
*/
|
|
76
|
+
export function getUnstagedTrackedFiles() {
|
|
77
|
+
try {
|
|
78
|
+
const output = execGit(['diff', '--name-only']).trim();
|
|
79
|
+
return output ? output.split('\n').filter(Boolean) : [];
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
return [];
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Cross-references driftFiles against registeredFiles + unstagedFiles.
|
|
87
|
+
* Returns a DriftEntry for each file in the drift zone.
|
|
88
|
+
*/
|
|
89
|
+
export function classifyDriftZone(driftFiles, registeredFiles, unstagedFiles, tierOptions) {
|
|
90
|
+
const registeredSet = new Set(registeredFiles);
|
|
91
|
+
const unstagedSet = new Set(unstagedFiles);
|
|
92
|
+
return driftFiles.map((file) => {
|
|
93
|
+
const registered = registeredSet.has(file);
|
|
94
|
+
const unstaged = unstagedSet.has(file);
|
|
95
|
+
const tier = registered
|
|
96
|
+
? classifyTier(file, {
|
|
97
|
+
extraTier3: tierOptions?.extraTier3 ?? [],
|
|
98
|
+
extraTier2: tierOptions?.extraTier2 ?? [],
|
|
99
|
+
})
|
|
100
|
+
: null;
|
|
101
|
+
return { file, registered, tier, unstaged };
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
function deriveState(localAhead, remoteAhead) {
|
|
105
|
+
if (localAhead === 0 && remoteAhead === 0)
|
|
106
|
+
return 'synced';
|
|
107
|
+
if (localAhead > 0 && remoteAhead === 0)
|
|
108
|
+
return 'local_ahead';
|
|
109
|
+
if (localAhead === 0 && remoteAhead > 0)
|
|
110
|
+
return 'remote_ahead';
|
|
111
|
+
return 'diverged';
|
|
112
|
+
}
|
|
113
|
+
function deriveRecommendation(state, registeredInDrift, unstagedInDrift) {
|
|
114
|
+
if (state === 'synced')
|
|
115
|
+
return 'synced';
|
|
116
|
+
if (state === 'local_ahead')
|
|
117
|
+
return 'push_clean';
|
|
118
|
+
// remote_ahead or diverged
|
|
119
|
+
if (registeredInDrift.length > 0 || unstagedInDrift.length > 0) {
|
|
120
|
+
return 'rebase_with_conflict_prep';
|
|
121
|
+
}
|
|
122
|
+
return state === 'diverged' ? 'rebase_clean' : 'pull_rebase';
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Main entry point. Fetches origin, computes drift, classifies against registry
|
|
126
|
+
* and working tree. Returns DriftSkipped for graceful-degradation cases.
|
|
127
|
+
*/
|
|
128
|
+
export async function computeDriftResult(registeredFiles, options) {
|
|
129
|
+
const remote = options?.remote ?? 'origin';
|
|
130
|
+
// Detect mid-rebase
|
|
131
|
+
if (isInRebase()) {
|
|
132
|
+
return { skipped: true, reason: 'Rebase in progress — run after completing or aborting rebase' };
|
|
133
|
+
}
|
|
134
|
+
// Determine branch
|
|
135
|
+
let branch;
|
|
136
|
+
try {
|
|
137
|
+
branch = options?.branch ?? getCurrentBranch();
|
|
138
|
+
}
|
|
139
|
+
catch {
|
|
140
|
+
return { skipped: true, reason: 'Not in a git repository' };
|
|
141
|
+
}
|
|
142
|
+
if (branch === 'HEAD') {
|
|
143
|
+
return { skipped: true, reason: 'Detached HEAD — cannot determine branch' };
|
|
144
|
+
}
|
|
145
|
+
// Fetch
|
|
146
|
+
try {
|
|
147
|
+
execGit(['fetch', remote]);
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
if (isOfflineError(error)) {
|
|
151
|
+
return { skipped: true, reason: '⚠ Remote unreachable — drift check skipped' };
|
|
152
|
+
}
|
|
153
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
154
|
+
if (/No such remote|remote .* not found/i.test(msg)) {
|
|
155
|
+
return { skipped: true, reason: `No remote '${remote}' found` };
|
|
156
|
+
}
|
|
157
|
+
// Unknown fetch error — still skip gracefully
|
|
158
|
+
return { skipped: true, reason: `Fetch failed: ${msg}` };
|
|
159
|
+
}
|
|
160
|
+
// Check if remote branch exists
|
|
161
|
+
const safeBranch = validateBranchName(branch);
|
|
162
|
+
const upstreamRef = `${remote}/${safeBranch}`;
|
|
163
|
+
try {
|
|
164
|
+
execGit(['rev-parse', '--verify', upstreamRef]);
|
|
165
|
+
}
|
|
166
|
+
catch {
|
|
167
|
+
// Remote branch doesn't exist yet (first push)
|
|
168
|
+
return {
|
|
169
|
+
branch,
|
|
170
|
+
remote: upstreamRef,
|
|
171
|
+
localAhead: 0,
|
|
172
|
+
remoteAhead: 0,
|
|
173
|
+
state: 'synced',
|
|
174
|
+
driftZone: [],
|
|
175
|
+
registeredInDrift: [],
|
|
176
|
+
unstagedInDrift: [],
|
|
177
|
+
safeToPush: true,
|
|
178
|
+
rebaseContinueRisk: false,
|
|
179
|
+
recommendation: 'push_clean',
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
// Ahead/behind
|
|
183
|
+
let localAhead;
|
|
184
|
+
let remoteAhead;
|
|
185
|
+
try {
|
|
186
|
+
const ab = getAheadBehind(remote, branch);
|
|
187
|
+
localAhead = ab.ahead;
|
|
188
|
+
remoteAhead = ab.behind; // getAheadBehind returns { ahead: local, behind: remote }
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
const msg = error instanceof Error ? error.message : String(error);
|
|
192
|
+
if (/not a git repository/i.test(msg)) {
|
|
193
|
+
return { skipped: true, reason: 'Not in a git repository' };
|
|
194
|
+
}
|
|
195
|
+
return { skipped: true, reason: `Could not compute ahead/behind: ${msg}` };
|
|
196
|
+
}
|
|
197
|
+
const state = deriveState(localAhead, remoteAhead);
|
|
198
|
+
// Only compute drift zone when remote has new commits
|
|
199
|
+
let driftZone = [];
|
|
200
|
+
let entries = [];
|
|
201
|
+
if (remoteAhead > 0) {
|
|
202
|
+
driftZone = getDriftZone(remote, branch);
|
|
203
|
+
const unstagedFiles = getUnstagedTrackedFiles();
|
|
204
|
+
entries = classifyDriftZone(driftZone, registeredFiles, unstagedFiles);
|
|
205
|
+
}
|
|
206
|
+
const registeredInDrift = entries.filter(e => e.registered);
|
|
207
|
+
const unstagedInDrift = entries.filter(e => e.unstaged);
|
|
208
|
+
const rebaseContinueRisk = unstagedInDrift.length > 0;
|
|
209
|
+
const safeToPush = remoteAhead === 0;
|
|
210
|
+
const recommendation = deriveRecommendation(state, registeredInDrift, unstagedInDrift);
|
|
211
|
+
return {
|
|
212
|
+
branch,
|
|
213
|
+
remote: upstreamRef,
|
|
214
|
+
localAhead,
|
|
215
|
+
remoteAhead,
|
|
216
|
+
state,
|
|
217
|
+
driftZone,
|
|
218
|
+
registeredInDrift,
|
|
219
|
+
unstagedInDrift,
|
|
220
|
+
safeToPush,
|
|
221
|
+
rebaseContinueRisk,
|
|
222
|
+
recommendation,
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=remote-drift.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remote-drift.js","sourceRoot":"","sources":["../../src/lib/remote-drift.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AA4BnD,SAAS,OAAO,CAAC,IAAc;IAC3B,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE;QAC7B,QAAQ,EAAE,OAAO;QACjB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE;KAC1B,CAAC,CAAC;AACP,CAAC;AAED,SAAS,cAAc,CAAC,KAAc;IAClC,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACnE,OAAO,kGAAkG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACxH,CAAC;AAED,SAAS,UAAU;IACf,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,WAAW,EAAE,WAAW,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC1D,OAAO,CACH,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;YAChD,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC,CACnD,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,MAAc,EAAE,MAAc;IACvD,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IAE9C,IAAI,UAAkB,CAAC;IACvB,IAAI,CAAC;QACD,UAAU,GAAG,OAAO,CAAC,CAAC,UAAU,EAAE,SAAS,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IACtE,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;IAED,IAAI,CAAC,UAAU;QAAE,OAAO,EAAE,CAAC;IAE3B,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAEhC,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACrB,IAAI,CAAC;YACD,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,CAAC,CAAC,CAAC;YAC3D,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,0CAA0C;gBAC1C,MAAM,KAAK,GAAG,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1C,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpB,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC/B,CAAC;YACL,CAAC;QACL,CAAC;QAAC,MAAM,CAAC;YACL,0BAA0B;QAC9B,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACtB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB;IACnC,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QACvD,OAAO,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,CAAC;IACd,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC7B,UAAoB,EACpB,eAAyB,EACzB,aAAuB,EACvB,WAA8D;IAE9D,MAAM,aAAa,GAAG,IAAI,GAAG,CAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,CAAC;IAE3C,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,IAAI,EAAc,EAAE;QACvC,MAAM,UAAU,GAAG,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,IAAI,GAAG,UAAU;YACnB,CAAC,CAAC,YAAY,CAAC,IAAI,EAAE;gBACjB,UAAU,EAAE,WAAW,EAAE,UAAU,IAAI,EAAE;gBACzC,UAAU,EAAE,WAAW,EAAE,UAAU,IAAI,EAAE;aAC5C,CAAC;YACF,CAAC,CAAC,IAAI,CAAC;QAEX,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,WAAW,CAAC,UAAkB,EAAE,WAAmB;IACxD,IAAI,UAAU,KAAK,CAAC,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC3D,IAAI,UAAU,GAAG,CAAC,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,aAAa,CAAC;IAC9D,IAAI,UAAU,KAAK,CAAC,IAAI,WAAW,GAAG,CAAC;QAAE,OAAO,cAAc,CAAC;IAC/D,OAAO,UAAU,CAAC;AACtB,CAAC;AAED,SAAS,oBAAoB,CACzB,KAA2B,EAC3B,iBAA+B,EAC/B,eAA6B;IAE7B,IAAI,KAAK,KAAK,QAAQ;QAAE,OAAO,QAAQ,CAAC;IACxC,IAAI,KAAK,KAAK,aAAa;QAAE,OAAO,YAAY,CAAC;IACjD,2BAA2B;IAC3B,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,IAAI,eAAe,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7D,OAAO,2BAA2B,CAAC;IACvC,CAAC;IACD,OAAO,KAAK,KAAK,UAAU,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,aAAa,CAAC;AACjE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACpC,eAAyB,EACzB,OAA8C;IAE9C,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,QAAQ,CAAC;IAE3C,oBAAoB;IACpB,IAAI,UAAU,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,8DAA8D,EAAE,CAAC;IACrG,CAAC;IAED,mBAAmB;IACnB,IAAI,MAAc,CAAC;IACnB,IAAI,CAAC;QACD,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,gBAAgB,EAAE,CAAC;IACnD,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;IAChE,CAAC;IAED,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,yCAAyC,EAAE,CAAC;IAChF,CAAC;IAED,QAAQ;IACR,IAAI,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,IAAI,cAAc,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,4CAA4C,EAAE,CAAC;QACnF,CAAC;QACD,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,qCAAqC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YAClD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,cAAc,MAAM,SAAS,EAAE,CAAC;QACpE,CAAC;QACD,8CAA8C;QAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,iBAAiB,GAAG,EAAE,EAAE,CAAC;IAC7D,CAAC;IAED,gCAAgC;IAChC,MAAM,UAAU,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAC9C,MAAM,WAAW,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IAC9C,IAAI,CAAC;QACD,OAAO,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;IACpD,CAAC;IAAC,MAAM,CAAC;QACL,+CAA+C;QAC/C,OAAO;YACH,MAAM;YACN,MAAM,EAAE,WAAW;YACnB,UAAU,EAAE,CAAC;YACb,WAAW,EAAE,CAAC;YACd,KAAK,EAAE,QAAQ;YACf,SAAS,EAAE,EAAE;YACb,iBAAiB,EAAE,EAAE;YACrB,eAAe,EAAE,EAAE;YACnB,UAAU,EAAE,IAAI;YAChB,kBAAkB,EAAE,KAAK;YACzB,cAAc,EAAE,YAAY;SAC/B,CAAC;IACN,CAAC;IAED,eAAe;IACf,IAAI,UAAkB,CAAC;IACvB,IAAI,WAAmB,CAAC;IACxB,IAAI,CAAC;QACD,MAAM,EAAE,GAAG,cAAc,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC1C,UAAU,GAAG,EAAE,CAAC,KAAK,CAAC;QACtB,WAAW,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,0DAA0D;IACvF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,GAAG,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACnE,IAAI,uBAAuB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACpC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,yBAAyB,EAAE,CAAC;QAChE,CAAC;QACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,mCAAmC,GAAG,EAAE,EAAE,CAAC;IAC/E,CAAC;IAED,MAAM,KAAK,GAAG,WAAW,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;IAEnD,sDAAsD;IACtD,IAAI,SAAS,GAAa,EAAE,CAAC;IAC7B,IAAI,OAAO,GAAiB,EAAE,CAAC;IAE/B,IAAI,WAAW,GAAG,CAAC,EAAE,CAAC;QAClB,SAAS,GAAG,YAAY,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACzC,MAAM,aAAa,GAAG,uBAAuB,EAAE,CAAC;QAChD,OAAO,GAAG,iBAAiB,CAAC,SAAS,EAAE,eAAe,EAAE,aAAa,CAAC,CAAC;IAC3E,CAAC;IAED,MAAM,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IACxD,MAAM,kBAAkB,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,WAAW,KAAK,CAAC,CAAC;IACrC,MAAM,cAAc,GAAG,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,eAAe,CAAC,CAAC;IAEvF,OAAO;QACH,MAAM;QACN,MAAM,EAAE,WAAW;QACnB,UAAU;QACV,WAAW;QACX,KAAK;QACL,SAAS;QACT,iBAAiB;QACjB,eAAe;QACf,UAAU;QACV,kBAAkB;QAClB,cAAc;KACjB,CAAC;AACN,CAAC"}
|
|
@@ -20,10 +20,6 @@ export interface RepoState {
|
|
|
20
20
|
isDiverged: boolean;
|
|
21
21
|
hasUpstream: boolean;
|
|
22
22
|
}
|
|
23
|
-
/**
|
|
24
|
-
* Scan a single repository for git state.
|
|
25
|
-
* Returns null if not a git repo or unreadable.
|
|
26
|
-
*/
|
|
27
23
|
export declare function scanRepo(repoPath: string): RepoState | null;
|
|
28
24
|
/**
|
|
29
25
|
* Scan all repos under a base directory.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-scanner.d.ts","sourceRoot":"","sources":["../../src/lib/repo-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"repo-scanner.d.ts","sourceRoot":"","sources":["../../src/lib/repo-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,MAAM,WAAW,SAAS;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,OAAO,CAAC;CACxB;AAQD,wBAAgB,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,CA0D3D;AA0BD;;GAEG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAG1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,SAAS,EAAE,GAAG,kBAAkB,EAAE,CA0CjF"}
|
package/dist/lib/repo-scanner.js
CHANGED
|
@@ -16,6 +16,7 @@ import { basename, join } from 'path';
|
|
|
16
16
|
* Scan a single repository for git state.
|
|
17
17
|
* Returns null if not a git repo or unreadable.
|
|
18
18
|
*/
|
|
19
|
+
const SKIP_DIRS = new Set(['node_modules', 'dist', 'build', '.cache', '.next']);
|
|
19
20
|
export function scanRepo(repoPath) {
|
|
20
21
|
try {
|
|
21
22
|
if (!existsSync(join(repoPath, '.git')))
|
|
@@ -84,7 +85,7 @@ function findRepos(basePath, maxDepth = 2, currentDepth = 0) {
|
|
|
84
85
|
for (const entry of entries) {
|
|
85
86
|
if (entry.name.startsWith('.') && entry.name !== '.git')
|
|
86
87
|
continue;
|
|
87
|
-
if (
|
|
88
|
+
if (SKIP_DIRS.has(entry.name))
|
|
88
89
|
continue;
|
|
89
90
|
const fullPath = join(basePath, entry.name);
|
|
90
91
|
if (entry.isDirectory()) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-scanner.js","sourceRoot":"","sources":["../../src/lib/repo-scanner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"repo-scanner.js","sourceRoot":"","sources":["../../src/lib/repo-scanner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AActC;;;GAGG;AACH,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,CAAC,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAEhF,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACrC,IAAI,CAAC;QACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;YAAE,OAAO,IAAI,CAAC;QAErD,IAAI,MAAM,GAAG,EAAE,CAAC;QAChB,IAAI,CAAC;YACD,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE;gBAChE,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aACpE,CAAC,CAAC,IAAI,EAAE,CAAC;QACd,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,IAAI,QAAQ,GAAG,CAAC,CAAC;QACjB,IAAI,QAAQ,GAAG,CAAC,CAAC;QAEjB,IAAI,CAAC;YACD,YAAY,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE;gBACvD,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aACpE,CAAC,CAAC;YACH,WAAW,GAAG,IAAI,CAAC;YAEnB,IAAI,CAAC;gBACD,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE;oBAC3E,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;iBACpE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;YAEpC,IAAI,CAAC;gBACD,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,YAAY,CAAC,EAAE;oBAC3E,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;iBACpE,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;YACxB,CAAC;YAAC,MAAM,CAAC,CAAC,wBAAwB,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACL,WAAW,GAAG,KAAK,CAAC;QACxB,CAAC;QAED,IAAI,OAAO,GAAG,KAAK,CAAC;QACpB,IAAI,CAAC;YACD,OAAO,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,EAAE;gBACrD,GAAG,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC;aACpE,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC;QACzB,CAAC;QAAC,MAAM,CAAC,CAAC,2BAA2B,CAAC,CAAC;QAEvC,OAAO;YACH,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC;YACxB,IAAI,EAAE,QAAQ;YACd,MAAM;YACN,QAAQ;YACR,QAAQ;YACR,OAAO;YACP,UAAU,EAAE,QAAQ,GAAG,CAAC,IAAI,QAAQ,GAAG,CAAC;YACxC,WAAW;SACd,CAAC;IACN,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED,SAAS,SAAS,CAAC,QAAgB,EAAE,QAAQ,GAAG,CAAC,EAAE,YAAY,GAAG,CAAC;IAC/D,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,YAAY,IAAI,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE3C,IAAI,CAAC;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC/D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC1B,IAAI,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM;gBAAE,SAAS;YAClE,IAAI,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC;gBAAE,SAAS;YAExC,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACtB,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;oBACrC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACzB,CAAC;qBAAM,CAAC;oBACJ,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,QAAQ,EAAE,QAAQ,EAAE,YAAY,GAAG,CAAC,CAAC,CAAC,CAAC;gBACnE,CAAC;YACL,CAAC;QACL,CAAC;IACL,CAAC;IAAC,MAAM,CAAC,CAAC,uCAAuC,CAAC,CAAC;IAEnD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IAClC,OAAO,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAkB,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACzE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAmB;IACvD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAsB,EAAE;QAC5C,IAAI,MAAM,GAAiC,YAAY,CAAC;QACxD,IAAI,QAAQ,GAAmC,KAAK,CAAC;QACrD,IAAI,MAAM,GAAG,uBAAuB,CAAC;QAErC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC;YACrB,MAAM,GAAG,UAAU,CAAC;YACpB,QAAQ,GAAG,QAAQ,CAAC;YACpB,MAAM,GAAG,wCAAwC,CAAC;QACtD,CAAC;aAAM,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YAC1B,MAAM,GAAG,QAAQ,CAAC;YAClB,QAAQ,GAAG,MAAM,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,mBAAmB,KAAK,CAAC,QAAQ,4BAA4B,CAAC;QAC5F,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,MAAM,CAAC;YAChB,QAAQ,GAAG,MAAM,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,UAAU,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC;QAC1F,CAAC;aAAM,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,GAAG,MAAM,CAAC;YAChB,QAAQ,GAAG,MAAM,CAAC;YAClB,MAAM,GAAG,GAAG,KAAK,CAAC,QAAQ,UAAU,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,gBAAgB,CAAC;QACxF,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACvB,MAAM,GAAG,UAAU,CAAC;YACpB,QAAQ,GAAG,QAAQ,CAAC;YACpB,MAAM,GAAG,8BAA8B,CAAC;QAC5C,CAAC;QAED,OAAO;YACH,SAAS,EAAE,KAAK,CAAC,IAAI;YACrB,WAAW,EAAE,KAAK,CAAC,MAAM;YACzB,YAAY,EAAE,EAAE;YAChB,MAAM;YACN,MAAM;YACN,QAAQ;SACX,CAAC;IACN,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACb,MAAM,MAAM,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC;QAC9C,MAAM,MAAM,GAA2B,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,CAAC;QACrG,IAAI,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC;YAAE,OAAO,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;QAC9F,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salvage-analyzer.d.ts","sourceRoot":"","sources":["../../src/lib/salvage-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,SAAS,GACf,OAAO,CAAC,aAAa,CAAC,
|
|
1
|
+
{"version":3,"file":"salvage-analyzer.d.ts","sourceRoot":"","sources":["../../src/lib/salvage-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AASH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,iBAAiB,EAAE,CAAC;IACjC,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,SAAS,GACf,OAAO,CAAC,aAAa,CAAC,CAwFxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,aAAa,GAAG,MAAM,CAmBjE"}
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
* not present in main (salvageable code). Wired into `rescue --symbols`.
|
|
6
6
|
*/
|
|
7
7
|
import { execFileSync } from 'child_process';
|
|
8
|
-
import {
|
|
8
|
+
import { mkdtempSync, writeFileSync, rmSync } from 'fs';
|
|
9
9
|
import { join } from 'path';
|
|
10
10
|
import { tmpdir } from 'os';
|
|
11
11
|
import { extractSymbols } from './symbol-extractor.js';
|
|
@@ -38,8 +38,7 @@ export async function analyzeSalvage(branch, mainRef = 'main') {
|
|
|
38
38
|
catch {
|
|
39
39
|
return report;
|
|
40
40
|
}
|
|
41
|
-
const tmpDir = join(tmpdir(),
|
|
42
|
-
mkdirSync(tmpDir, { recursive: true });
|
|
41
|
+
const tmpDir = mkdtempSync(join(tmpdir(), 'ssan-salvage-'));
|
|
43
42
|
try {
|
|
44
43
|
for (const file of branchFiles) {
|
|
45
44
|
// Get file content from the abandoned branch
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"salvage-analyzer.js","sourceRoot":"","sources":["../../src/lib/salvage-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"salvage-analyzer.js","sourceRoot":"","sources":["../../src/lib/salvage-analyzer.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/security.d.ts
CHANGED
|
@@ -8,6 +8,11 @@ export declare function validateAgentId(agentId: string): string;
|
|
|
8
8
|
* @throws Error if invalid
|
|
9
9
|
*/
|
|
10
10
|
export declare function validateBranchName(branch: string): string;
|
|
11
|
+
/**
|
|
12
|
+
* Validate PR number
|
|
13
|
+
* @throws Error if invalid
|
|
14
|
+
*/
|
|
15
|
+
export declare function validatePRNumber(prNumber: number | string): number;
|
|
11
16
|
/**
|
|
12
17
|
* Validate task ID (for torrent/task commands)
|
|
13
18
|
* @throws Error if invalid
|
|
@@ -31,6 +36,12 @@ export declare function sanitizeFilePaths(files: string[]): string[];
|
|
|
31
36
|
* Escape a string for safe use in git commands (minimal escaping)
|
|
32
37
|
*/
|
|
33
38
|
export declare function escapeGitArg(arg: string): string;
|
|
39
|
+
/**
|
|
40
|
+
* Escapes a string so it can be safely used in a shell script.
|
|
41
|
+
* Replaces single quotes with '\'' and wraps the result in single quotes.
|
|
42
|
+
* Prevents command injection when generating bash scripts.
|
|
43
|
+
*/
|
|
44
|
+
export declare function escapeShellString(str: string): string;
|
|
34
45
|
export declare const patterns: {
|
|
35
46
|
VALID_AGENT_ID: RegExp;
|
|
36
47
|
VALID_BRANCH_NAME: RegExp;
|
|
@@ -41,6 +52,7 @@ export declare const patterns: {
|
|
|
41
52
|
export declare const sanitizeAgentId: typeof validateAgentId;
|
|
42
53
|
export declare const sanitizeBranchName: typeof validateBranchName;
|
|
43
54
|
export declare const sanitizeFilePath: typeof validateFilePath;
|
|
55
|
+
export declare const sanitizePRNumber: typeof validatePRNumber;
|
|
44
56
|
export declare function isValidMessageId(messageId: string): boolean;
|
|
45
57
|
/**
|
|
46
58
|
* Validate that a file path resolves to a location inside the current repository.
|
|
@@ -57,4 +69,9 @@ export declare function validateRepoPath(filePath: string, rootDir?: string): st
|
|
|
57
69
|
* Replaces '{' with '{open}' and '}' with '{close}'.
|
|
58
70
|
*/
|
|
59
71
|
export declare function escapeBlessed(text: string): string;
|
|
72
|
+
/**
|
|
73
|
+
* Safely resolves the CLI entry point path.
|
|
74
|
+
* Replaces insecure usage of process.argv[1] which can be manipulated.
|
|
75
|
+
*/
|
|
76
|
+
export declare function getCLIPath(): string;
|
|
60
77
|
//# sourceMappingURL=security.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../src/lib/security.ts"],"names":[],"mappings":"AAsBA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQvD;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQzD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAMlE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAQrD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAYzD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKjD;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAU3D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAIhD;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAGrD;AAGD,eAAO,MAAM,QAAQ;;;;;;CAMpB,CAAA;AAGD,eAAO,MAAM,eAAe,wBAAkB,CAAC;AAC/C,eAAO,MAAM,kBAAkB,2BAAqB,CAAC;AACrD,eAAO,MAAM,gBAAgB,yBAAmB,CAAC;AACjD,eAAO,MAAM,gBAAgB,yBAAmB,CAAC;AAIjD,wBAAgB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED;;;;;;;;GAQG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,MAAsB,GAAG,MAAM,CAgB1F;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKlD;AAED;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAKnC"}
|