spidersan 0.20.1 â 0.20.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +8 -0
- package/dist/bin/command-registry.d.ts +25 -0
- package/dist/bin/command-registry.d.ts.map +1 -0
- package/dist/bin/command-registry.js +29 -0
- package/dist/bin/command-registry.js.map +1 -0
- package/dist/bin/spidersan.d.ts +16 -0
- package/dist/bin/spidersan.d.ts.map +1 -0
- package/dist/bin/spidersan.js +98 -0
- package/dist/bin/spidersan.js.map +1 -0
- package/dist/commands/abandon.d.ts +8 -0
- package/dist/commands/abandon.d.ts.map +1 -0
- package/dist/commands/abandon.js +43 -0
- package/dist/commands/abandon.js.map +1 -0
- package/dist/commands/cleanup.d.ts +8 -0
- package/dist/commands/cleanup.d.ts.map +1 -0
- package/dist/commands/cleanup.js +50 -0
- package/dist/commands/cleanup.js.map +1 -0
- package/dist/commands/config.d.ts +15 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +309 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/conflicts.d.ts +34 -0
- package/dist/commands/conflicts.d.ts.map +1 -0
- package/dist/commands/conflicts.js +773 -0
- package/dist/commands/conflicts.js.map +1 -0
- 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 +17 -0
- package/dist/commands/cross-conflicts.d.ts.map +1 -0
- package/dist/commands/cross-conflicts.js +273 -0
- package/dist/commands/cross-conflicts.js.map +1 -0
- package/dist/commands/depends.d.ts +11 -0
- package/dist/commands/depends.d.ts.map +1 -0
- package/dist/commands/depends.js +63 -0
- package/dist/commands/depends.js.map +1 -0
- package/dist/commands/doctor.d.ts +30 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +558 -0
- package/dist/commands/doctor.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/github-sync.d.ts +42 -0
- package/dist/commands/github-sync.d.ts.map +1 -0
- package/dist/commands/github-sync.js +191 -0
- package/dist/commands/github-sync.js.map +1 -0
- package/dist/commands/index.d.ts +25 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +29 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init.d.ts +8 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +23 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +45 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/log.d.ts +7 -0
- package/dist/commands/log.d.ts.map +1 -0
- package/dist/commands/log.js +110 -0
- package/dist/commands/log.js.map +1 -0
- package/dist/commands/merge-order.d.ts +9 -0
- package/dist/commands/merge-order.d.ts.map +1 -0
- package/dist/commands/merge-order.js +100 -0
- package/dist/commands/merge-order.js.map +1 -0
- package/dist/commands/merged.d.ts +8 -0
- package/dist/commands/merged.d.ts.map +1 -0
- package/dist/commands/merged.js +37 -0
- package/dist/commands/merged.js.map +1 -0
- package/dist/commands/pr-check.d.ts +24 -0
- package/dist/commands/pr-check.d.ts.map +1 -0
- package/dist/commands/pr-check.js +85 -0
- package/dist/commands/pr-check.js.map +1 -0
- package/dist/commands/ready-check.d.ts +11 -0
- package/dist/commands/ready-check.d.ts.map +1 -0
- package/dist/commands/ready-check.js +150 -0
- package/dist/commands/ready-check.js.map +1 -0
- 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 +10 -0
- package/dist/commands/register.d.ts.map +1 -0
- package/dist/commands/register.js +176 -0
- package/dist/commands/register.js.map +1 -0
- 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 +129 -0
- package/dist/commands/registry-sync.js.map +1 -0
- package/dist/commands/stale.d.ts +17 -0
- package/dist/commands/stale.d.ts.map +1 -0
- package/dist/commands/stale.js +136 -0
- package/dist/commands/stale.js.map +1 -0
- package/dist/commands/sync.d.ts +21 -0
- package/dist/commands/sync.d.ts.map +1 -0
- package/dist/commands/sync.js +78 -0
- package/dist/commands/sync.js.map +1 -0
- package/dist/commands/verify-trunk.d.ts +18 -0
- package/dist/commands/verify-trunk.d.ts.map +1 -0
- package/dist/commands/verify-trunk.js +77 -0
- package/dist/commands/verify-trunk.js.map +1 -0
- package/dist/commands/watch.d.ts +8 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +509 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/index.d.ts +8 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/activity.d.ts +53 -0
- package/dist/lib/activity.d.ts.map +1 -0
- package/dist/lib/activity.js +271 -0
- package/dist/lib/activity.js.map +1 -0
- package/dist/lib/agent-errors.d.ts +41 -0
- package/dist/lib/agent-errors.d.ts.map +1 -0
- package/dist/lib/agent-errors.js +145 -0
- package/dist/lib/agent-errors.js.map +1 -0
- 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 +229 -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 +111 -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 +227 -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 +42 -0
- package/dist/lib/ai/types.js.map +1 -0
- package/dist/lib/ast.d.ts +44 -0
- package/dist/lib/ast.d.ts.map +1 -0
- package/dist/lib/ast.js +160 -0
- package/dist/lib/ast.js.map +1 -0
- package/dist/lib/carries.d.ts +22 -0
- package/dist/lib/carries.d.ts.map +1 -0
- package/dist/lib/carries.js +56 -0
- package/dist/lib/carries.js.map +1 -0
- package/dist/lib/colony-subscriber.d.ts +56 -0
- package/dist/lib/colony-subscriber.d.ts.map +1 -0
- package/dist/lib/colony-subscriber.js +265 -0
- package/dist/lib/colony-subscriber.js.map +1 -0
- package/dist/lib/config.d.ts +62 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +235 -0
- package/dist/lib/config.js.map +1 -0
- 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 +145 -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.d.ts +71 -0
- package/dist/lib/crypto.d.ts.map +1 -0
- package/dist/lib/crypto.js +176 -0
- package/dist/lib/crypto.js.map +1 -0
- package/dist/lib/ecosystem-env.d.ts +33 -0
- package/dist/lib/ecosystem-env.d.ts.map +1 -0
- package/dist/lib/ecosystem-env.js +62 -0
- package/dist/lib/ecosystem-env.js.map +1 -0
- package/dist/lib/errors.d.ts +35 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +71 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/git-events-subscriber.d.ts +86 -0
- package/dist/lib/git-events-subscriber.d.ts.map +1 -0
- package/dist/lib/git-events-subscriber.js +870 -0
- package/dist/lib/git-events-subscriber.js.map +1 -0
- package/dist/lib/git-merge-analyzer.d.ts +38 -0
- package/dist/lib/git-merge-analyzer.d.ts.map +1 -0
- package/dist/lib/git-merge-analyzer.js +23 -0
- package/dist/lib/git-merge-analyzer.js.map +1 -0
- package/dist/lib/git.d.ts +103 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +670 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/github.d.ts +151 -0
- package/dist/lib/github.d.ts.map +1 -0
- package/dist/lib/github.js +425 -0
- package/dist/lib/github.js.map +1 -0
- package/dist/lib/graph.d.ts +38 -0
- package/dist/lib/graph.d.ts.map +1 -0
- package/dist/lib/graph.js +165 -0
- package/dist/lib/graph.js.map +1 -0
- package/dist/lib/machine.d.ts +14 -0
- package/dist/lib/machine.d.ts.map +1 -0
- package/dist/lib/machine.js +38 -0
- package/dist/lib/machine.js.map +1 -0
- package/dist/lib/notify.d.ts +68 -0
- package/dist/lib/notify.d.ts.map +1 -0
- package/dist/lib/notify.js +111 -0
- package/dist/lib/notify.js.map +1 -0
- package/dist/lib/outline.d.ts +6 -0
- package/dist/lib/outline.d.ts.map +1 -0
- package/dist/lib/outline.js +60 -0
- package/dist/lib/outline.js.map +1 -0
- package/dist/lib/push-registry.d.ts +22 -0
- package/dist/lib/push-registry.d.ts.map +1 -0
- package/dist/lib/push-registry.js +21 -0
- package/dist/lib/push-registry.js.map +1 -0
- package/dist/lib/reconcile.d.ts +100 -0
- package/dist/lib/reconcile.d.ts.map +1 -0
- package/dist/lib/reconcile.js +121 -0
- package/dist/lib/reconcile.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/register-renderer.d.ts +10 -0
- package/dist/lib/register-renderer.d.ts.map +1 -0
- package/dist/lib/register-renderer.js +19 -0
- package/dist/lib/register-renderer.js.map +1 -0
- package/dist/lib/remote-drift.d.ts +61 -0
- package/dist/lib/remote-drift.d.ts.map +1 -0
- package/dist/lib/remote-drift.js +227 -0
- package/dist/lib/remote-drift.js.map +1 -0
- package/dist/lib/security.d.ts +72 -0
- package/dist/lib/security.d.ts.map +1 -0
- package/dist/lib/security.js +180 -0
- package/dist/lib/security.js.map +1 -0
- package/dist/lib/semantic-analysis.d.ts +31 -0
- package/dist/lib/semantic-analysis.d.ts.map +1 -0
- package/dist/lib/semantic-analysis.js +120 -0
- package/dist/lib/semantic-analysis.js.map +1 -0
- package/dist/lib/supabase-credentials.d.ts +36 -0
- package/dist/lib/supabase-credentials.d.ts.map +1 -0
- package/dist/lib/supabase-credentials.js +43 -0
- package/dist/lib/supabase-credentials.js.map +1 -0
- package/dist/lib/trunk.d.ts +39 -0
- package/dist/lib/trunk.d.ts.map +1 -0
- package/dist/lib/trunk.js +116 -0
- package/dist/lib/trunk.js.map +1 -0
- package/dist/lib/update-check.d.ts +11 -0
- package/dist/lib/update-check.d.ts.map +1 -0
- package/dist/lib/update-check.js +113 -0
- package/dist/lib/update-check.js.map +1 -0
- package/dist/lib/watch-renderer.d.ts +13 -0
- package/dist/lib/watch-renderer.d.ts.map +1 -0
- package/dist/lib/watch-renderer.js +35 -0
- package/dist/lib/watch-renderer.js.map +1 -0
- package/dist/storage/adapter.d.ts +81 -0
- package/dist/storage/adapter.d.ts.map +1 -0
- package/dist/storage/adapter.js +8 -0
- package/dist/storage/adapter.js.map +1 -0
- package/dist/storage/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 +6 -0
- package/dist/storage/factory.d.ts.map +1 -0
- package/dist/storage/factory.js +14 -0
- package/dist/storage/factory.js.map +1 -0
- package/dist/storage/index.d.ts +10 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +11 -0
- package/dist/storage/index.js.map +1 -0
- 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 +138 -0
- package/dist/storage/json-branch-registry-store.js.map +1 -0
- package/dist/storage/local.d.ts +20 -0
- package/dist/storage/local.d.ts.map +1 -0
- package/dist/storage/local.js +40 -0
- package/dist/storage/local.js.map +1 -0
- 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 +68 -0
- package/dist/storage/memory-branch-registry-store.js.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts +40 -0
- package/dist/storage/supabase-registry-sync-client-impl.d.ts.map +1 -0
- package/dist/storage/supabase-registry-sync-client-impl.js +278 -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 +28 -0
- package/dist/storage/supabase.d.ts.map +1 -0
- package/dist/storage/supabase.js +56 -0
- package/dist/storage/supabase.js.map +1 -0
- package/dist/types/cloud.d.ts +102 -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 +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log.js","sourceRoot":"","sources":["../../src/commands/log.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan merge-order
|
|
3
|
+
*
|
|
4
|
+
* Get optimal merge order based on dependencies and conflicts.
|
|
5
|
+
* Supports --blocking-count to prioritize tasks that block others (rarest-first).
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
export declare const mergeOrderCommand: Command;
|
|
9
|
+
//# sourceMappingURL=merge-order.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-order.d.ts","sourceRoot":"","sources":["../../src/commands/merge-order.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,eAAO,MAAM,iBAAiB,SA8FxB,CAAC"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan merge-order
|
|
3
|
+
*
|
|
4
|
+
* Get optimal merge order based on dependencies and conflicts.
|
|
5
|
+
* Supports --blocking-count to prioritize tasks that block others (rarest-first).
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import { getStorage } from '../storage/index.js';
|
|
9
|
+
import { addDependencyEdges, buildConflictGraph, calculateBlockingCounts, topologicalSort } from '../lib/graph.js';
|
|
10
|
+
import { activeBranches } from '../lib/reconcile.js';
|
|
11
|
+
export const mergeOrderCommand = new Command('merge-order')
|
|
12
|
+
.description('Get optimal merge order for all branches')
|
|
13
|
+
.option('--json', 'Output as JSON')
|
|
14
|
+
.option('--blocking-count', 'Show how many branches each task blocks (rarest-first priority)')
|
|
15
|
+
.action(async (options) => {
|
|
16
|
+
const storage = await getStorage();
|
|
17
|
+
if (!await storage.isInitialized()) {
|
|
18
|
+
console.error('â Spidersan not initialized. Run: spidersan init');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
// Reconcile-on-read: don't order branches already merged into trunk â
|
|
22
|
+
// they drop out of the merge plan (tb-8sa.1).
|
|
23
|
+
const branches = activeBranches(await storage.list());
|
|
24
|
+
if (branches.length === 0) {
|
|
25
|
+
console.log('đˇī¸ No branches registered.');
|
|
26
|
+
return;
|
|
27
|
+
}
|
|
28
|
+
const branchNames = branches.map(branch => branch.name);
|
|
29
|
+
const branchByName = new Map(branches.map(branch => [branch.name, branch]));
|
|
30
|
+
// Build conflict graph, then fold in declared dependencies
|
|
31
|
+
// (`spidersan depends`) as directed dep-merges-first edges.
|
|
32
|
+
const conflictGraph = addDependencyEdges(buildConflictGraph(branches), branches);
|
|
33
|
+
// Calculate blocking counts (how many branches are blocked by each branch)
|
|
34
|
+
const blockingCounts = options.blockingCount
|
|
35
|
+
? calculateBlockingCounts(branchNames, conflictGraph)
|
|
36
|
+
: undefined;
|
|
37
|
+
// Topological sort with conflict awareness (optionally prioritize by blocking count)
|
|
38
|
+
const order = topologicalSort(branchNames, conflictGraph, blockingCounts);
|
|
39
|
+
if (options.json) {
|
|
40
|
+
const result = order.map(name => ({
|
|
41
|
+
name,
|
|
42
|
+
blocksCount: blockingCounts?.get(name) || 0,
|
|
43
|
+
conflicts: conflictGraph.get(name) || []
|
|
44
|
+
}));
|
|
45
|
+
console.log(JSON.stringify({ order: result }, null, 2));
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
if (options.blockingCount) {
|
|
49
|
+
console.log('đˇī¸ Merge Order (Rarest-First Priority)\n');
|
|
50
|
+
console.log('â'.repeat(40) + '\n');
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
console.log('đˇī¸ Recommended Merge Order:\n');
|
|
54
|
+
}
|
|
55
|
+
order.forEach((branchName, i) => {
|
|
56
|
+
const branch = branchByName.get(branchName);
|
|
57
|
+
if (!branch) {
|
|
58
|
+
return;
|
|
59
|
+
}
|
|
60
|
+
const conflicts = conflictGraph.get(branch.name) || [];
|
|
61
|
+
const blocksCount = blockingCounts?.get(branch.name) || 0;
|
|
62
|
+
// Status indicator
|
|
63
|
+
let status = 'â
';
|
|
64
|
+
let priorityTag = '';
|
|
65
|
+
if (options.blockingCount && blocksCount > 0) {
|
|
66
|
+
status = blocksCount >= 3 ? 'đ´' : blocksCount >= 1 ? 'đ ' : 'â
';
|
|
67
|
+
priorityTag = blocksCount >= 3
|
|
68
|
+
? ' ⥠CRITICAL'
|
|
69
|
+
: blocksCount >= 1
|
|
70
|
+
? ` (blocks ${blocksCount})`
|
|
71
|
+
: '';
|
|
72
|
+
}
|
|
73
|
+
else if (conflicts.length > 0) {
|
|
74
|
+
status = 'â ī¸';
|
|
75
|
+
}
|
|
76
|
+
console.log(` ${i + 1}. ${status} ${branch.name}${priorityTag}`);
|
|
77
|
+
if (conflicts.length > 0 && !options.blockingCount) {
|
|
78
|
+
console.log(` ââ After merging, rebase: ${conflicts.join(', ')}`);
|
|
79
|
+
}
|
|
80
|
+
else if (options.blockingCount && blocksCount > 0) {
|
|
81
|
+
// Show which branches this one blocks
|
|
82
|
+
const blockedBranches = getBlockedBranches(branch.name, conflictGraph);
|
|
83
|
+
if (blockedBranches.length > 0) {
|
|
84
|
+
console.log(` ââ Blocks: ${blockedBranches.join(', ')}`);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
if (options.blockingCount) {
|
|
89
|
+
console.log('\n' + 'â'.repeat(40));
|
|
90
|
+
console.log('đĄ Merge high-priority (đ´) branches first to unblock others.');
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
/**
|
|
94
|
+
* Get list of branch names that are blocked by a given branch.
|
|
95
|
+
*/
|
|
96
|
+
function getBlockedBranches(branchName, conflictGraph) {
|
|
97
|
+
// Return the branches that this branch conflicts with
|
|
98
|
+
return conflictGraph.get(branchName) || [];
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=merge-order.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge-order.js","sourceRoot":"","sources":["../../src/commands/merge-order.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merged.d.ts","sourceRoot":"","sources":["../../src/commands/merged.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA+BpB,CAAC"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan merged
|
|
3
|
+
*
|
|
4
|
+
* Mark a branch as merged.
|
|
5
|
+
*/
|
|
6
|
+
import { Command } from 'commander';
|
|
7
|
+
import { getStorage } from '../storage/index.js';
|
|
8
|
+
import { logActivity } from '../lib/activity.js';
|
|
9
|
+
import { getCurrentBranch } from '../lib/git.js';
|
|
10
|
+
export const mergedCommand = new Command('merged')
|
|
11
|
+
.description('Mark a branch as merged')
|
|
12
|
+
.argument('[branch]', 'Branch that was merged (default: current)')
|
|
13
|
+
.option('--pr <number>', 'PR number for tracking')
|
|
14
|
+
.action(async (branchArg, options) => {
|
|
15
|
+
const storage = await getStorage();
|
|
16
|
+
if (!await storage.isInitialized()) {
|
|
17
|
+
console.error('â Spidersan not initialized. Run: spidersan init');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const branchName = branchArg || getCurrentBranch();
|
|
21
|
+
const branch = await storage.get(branchName);
|
|
22
|
+
if (!branch) {
|
|
23
|
+
console.error(`â Branch "${branchName}" not found in registry.`);
|
|
24
|
+
process.exit(1);
|
|
25
|
+
}
|
|
26
|
+
const prNumber = options.pr ? parseInt(options.pr, 10) : undefined;
|
|
27
|
+
await storage.update(branchName, {
|
|
28
|
+
status: 'completed',
|
|
29
|
+
...(Number.isFinite(prNumber) ? { prNumber } : {}),
|
|
30
|
+
});
|
|
31
|
+
logActivity({ event: 'merge', branch: branchName, agent: branch.agent ?? undefined, details: { pr_number: options.pr } });
|
|
32
|
+
console.log(`đˇī¸ Marked as merged: ${branchName}`);
|
|
33
|
+
if (options.pr) {
|
|
34
|
+
console.log(` PR: #${options.pr}`);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
//# sourceMappingURL=merged.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merged.js","sourceRoot":"","sources":["../../src/commands/merged.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAEjD,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC7C,WAAW,CAAC,yBAAyB,CAAC;KACtC,QAAQ,CAAC,UAAU,EAAE,2CAA2C,CAAC;KACjE,MAAM,CAAC,eAAe,EAAE,wBAAwB,CAAC;KACjD,MAAM,CAAC,KAAK,EAAE,SAA6B,EAAE,OAAO,EAAE,EAAE;IACrD,MAAM,OAAO,GAAG,MAAM,UAAU,EAAE,CAAC;IAEnC,IAAI,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC;QACjC,OAAO,CAAC,KAAK,CAAC,kDAAkD,CAAC,CAAC;QAClE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,UAAU,GAAG,SAAS,IAAI,gBAAgB,EAAE,CAAC;IACnD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;IAE7C,IAAI,CAAC,MAAM,EAAE,CAAC;QACV,OAAO,CAAC,KAAK,CAAC,aAAa,UAAU,0BAA0B,CAAC,CAAC;QACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACnE,MAAM,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE;QAC7B,MAAM,EAAE,WAAW;QACnB,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACrD,CAAC,CAAC;IACH,WAAW,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,IAAI,SAAS,EAAE,OAAO,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;IAE1H,OAAO,CAAC,GAAG,CAAC,yBAAyB,UAAU,EAAE,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,EAAE,EAAE,CAAC;QACb,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC;IACzC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan pr-check <number>
|
|
3
|
+
*
|
|
4
|
+
* Check a PR's merge readiness: stacked-base detection and red/behind/conflict
|
|
5
|
+
* state, with the failing *required* checks surfaced. Advisory by default
|
|
6
|
+
* (exit 0); `--exit-code` makes it gate (so a Claude-Code pre-merge hook can
|
|
7
|
+
* shell out to this instead of re-implementing the logic in bash).
|
|
8
|
+
*
|
|
9
|
+
* Promotes the 2026-06-15 `spidersan-pre.sh` hook into a first-class command.
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import { type PRMergeState } from '../lib/github.js';
|
|
13
|
+
/**
|
|
14
|
+
* Build the advisory list for a PR's merge state against trunk.
|
|
15
|
+
* Pure â no I/O â so it is trivially unit-testable.
|
|
16
|
+
*
|
|
17
|
+
* @returns advisory strings (empty â looks clean) plus the derived `stacked` flag.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildPrCheckAdvisories(state: PRMergeState, trunk: string): {
|
|
20
|
+
advisories: string[];
|
|
21
|
+
stacked: boolean;
|
|
22
|
+
};
|
|
23
|
+
export declare const prCheckCommand: Command;
|
|
24
|
+
//# sourceMappingURL=pr-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-check.d.ts","sourceRoot":"","sources":["../../src/commands/pr-check.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAmB,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAYtE;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAClC,KAAK,EAAE,YAAY,EACnB,KAAK,EAAE,MAAM,GACd;IAAE,UAAU,EAAE,MAAM,EAAE,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAqB5C;AAED,eAAO,MAAM,cAAc,SA+CrB,CAAC"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan pr-check <number>
|
|
3
|
+
*
|
|
4
|
+
* Check a PR's merge readiness: stacked-base detection and red/behind/conflict
|
|
5
|
+
* state, with the failing *required* checks surfaced. Advisory by default
|
|
6
|
+
* (exit 0); `--exit-code` makes it gate (so a Claude-Code pre-merge hook can
|
|
7
|
+
* shell out to this instead of re-implementing the logic in bash).
|
|
8
|
+
*
|
|
9
|
+
* Promotes the 2026-06-15 `spidersan-pre.sh` hook into a first-class command.
|
|
10
|
+
*/
|
|
11
|
+
import { Command } from 'commander';
|
|
12
|
+
import { getPRMergeState } from '../lib/github.js';
|
|
13
|
+
import { getTrunkBranch } from '../lib/trunk.js';
|
|
14
|
+
/** Merge-state statuses that mean "don't merge yet" (red / behind / conflicts). */
|
|
15
|
+
const RED_STATES = new Set(['UNSTABLE', 'DIRTY', 'BEHIND', 'BLOCKED']);
|
|
16
|
+
/**
|
|
17
|
+
* Build the advisory list for a PR's merge state against trunk.
|
|
18
|
+
* Pure â no I/O â so it is trivially unit-testable.
|
|
19
|
+
*
|
|
20
|
+
* @returns advisory strings (empty â looks clean) plus the derived `stacked` flag.
|
|
21
|
+
*/
|
|
22
|
+
export function buildPrCheckAdvisories(state, trunk) {
|
|
23
|
+
const advisories = [];
|
|
24
|
+
const stacked = state.baseRefName !== trunk;
|
|
25
|
+
if (stacked) {
|
|
26
|
+
advisories.push(`STACKED PR: base=${state.baseRefName} (not trunk) â merging lands on ${state.baseRefName}, not ${trunk}.`);
|
|
27
|
+
}
|
|
28
|
+
if (RED_STATES.has(state.mergeStateStatus)) {
|
|
29
|
+
const failing = state.checkRollup.failingRequired;
|
|
30
|
+
const failingNote = failing.length > 0
|
|
31
|
+
? ` Failing required checks: ${failing.join(', ')}.`
|
|
32
|
+
: '';
|
|
33
|
+
advisories.push(`state=${state.mergeStateStatus} â red/behind/conflicts; verify before merging.${failingNote}`);
|
|
34
|
+
}
|
|
35
|
+
return { advisories, stacked };
|
|
36
|
+
}
|
|
37
|
+
export const prCheckCommand = new Command('pr-check')
|
|
38
|
+
.description('Check a PR\'s merge readiness (stacked base, red/behind state)')
|
|
39
|
+
.argument('<number>', 'PR number to check')
|
|
40
|
+
.option('--json', 'Output as JSON')
|
|
41
|
+
.option('--exit-code', 'Exit 1 if any advisory fired (2 if PR/gh unavailable) â for hook gating')
|
|
42
|
+
.option('--repo <owner/name>', 'Target repository (defaults to the current repo)')
|
|
43
|
+
.action(async (numberArg, options) => {
|
|
44
|
+
const prNumber = Number.parseInt(numberArg, 10);
|
|
45
|
+
if (!Number.isInteger(prNumber) || prNumber <= 0) {
|
|
46
|
+
console.error(`â Invalid PR number: ${numberArg}`);
|
|
47
|
+
// Advisory by default (exit 0 = return cleanly); --exit-code â 2 (unusable input).
|
|
48
|
+
if (options.exitCode)
|
|
49
|
+
process.exit(2);
|
|
50
|
+
return;
|
|
51
|
+
}
|
|
52
|
+
const trunk = getTrunkBranch();
|
|
53
|
+
const state = await getPRMergeState(prNumber, options.repo ? { repo: options.repo } : undefined);
|
|
54
|
+
// gh unavailable / PR not found â friendly advisory message.
|
|
55
|
+
if (!state) {
|
|
56
|
+
const msg = `â ī¸ Could not fetch PR #${prNumber} (gh unavailable or PR not found). Skipping merge-readiness check.`;
|
|
57
|
+
if (options.json) {
|
|
58
|
+
console.log(JSON.stringify({ error: msg, trunk, stacked: false, advisories: [] }, null, 2));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
console.log(msg);
|
|
62
|
+
}
|
|
63
|
+
// Advisory by default (exit 0 = return cleanly); --exit-code â 2.
|
|
64
|
+
if (options.exitCode)
|
|
65
|
+
process.exit(2);
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const { advisories, stacked } = buildPrCheckAdvisories(state, trunk);
|
|
69
|
+
if (options.json) {
|
|
70
|
+
console.log(JSON.stringify({ ...state, stacked, trunk, advisories }, null, 2));
|
|
71
|
+
}
|
|
72
|
+
else if (advisories.length === 0) {
|
|
73
|
+
console.log(`â
PR #${state.number} base=${state.baseRefName} state=${state.mergeStateStatus} â looks clean.`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(`đˇī¸ PR #${state.number} â merge readiness:`);
|
|
77
|
+
for (const advisory of advisories) {
|
|
78
|
+
console.log(` â ī¸ ${advisory}`);
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (options.exitCode && advisories.length > 0) {
|
|
82
|
+
process.exit(1);
|
|
83
|
+
}
|
|
84
|
+
});
|
|
85
|
+
//# sourceMappingURL=pr-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-check.js","sourceRoot":"","sources":["../../src/commands/pr-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan ready-check
|
|
3
|
+
*
|
|
4
|
+
* Verify branch is ready to merge (no WIP markers, no conflicts).
|
|
5
|
+
* Uses .spidersanrc config for customizable patterns.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import { Minimatch } from 'minimatch';
|
|
9
|
+
export declare function shouldExcludeFile(file: string, excludePatterns: Minimatch[]): boolean;
|
|
10
|
+
export declare const readyCheckCommand: Command;
|
|
11
|
+
//# sourceMappingURL=ready-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ready-check.d.ts","sourceRoot":"","sources":["../../src/commands/ready-check.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,eAAe,EAAE,SAAS,EAAE,GAAG,OAAO,CAErF;AAED,eAAO,MAAM,iBAAiB,SAoJxB,CAAC"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* spidersan ready-check
|
|
3
|
+
*
|
|
4
|
+
* Verify branch is ready to merge (no WIP markers, no conflicts).
|
|
5
|
+
* Uses .spidersanrc config for customizable patterns.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from 'commander';
|
|
8
|
+
import { readFile } from 'fs/promises';
|
|
9
|
+
import { getStorage } from '../storage/index.js';
|
|
10
|
+
import { loadConfig, getWipPatterns } from '../lib/config.js';
|
|
11
|
+
import { getChangedFiles, getCurrentBranch } from '../lib/git.js';
|
|
12
|
+
import { getTrunkBranch } from '../lib/trunk.js';
|
|
13
|
+
import { activeBranches } from '../lib/reconcile.js';
|
|
14
|
+
import { Minimatch } from 'minimatch';
|
|
15
|
+
export function shouldExcludeFile(file, excludePatterns) {
|
|
16
|
+
return excludePatterns.some(pattern => pattern.match(file));
|
|
17
|
+
}
|
|
18
|
+
export const readyCheckCommand = new Command('ready-check')
|
|
19
|
+
.description('Verify branch is ready to merge')
|
|
20
|
+
.option('--strict', 'Warn on WIP markers (kept for compatibility, no longer blocks)')
|
|
21
|
+
.option('--json', 'Output as JSON')
|
|
22
|
+
.option('--skip-wip', 'Skip WIP detection')
|
|
23
|
+
.action(async (options) => {
|
|
24
|
+
const storage = await getStorage();
|
|
25
|
+
const config = await loadConfig();
|
|
26
|
+
if (!await storage.isInitialized()) {
|
|
27
|
+
console.error('â Spidersan not initialized. Run: spidersan init');
|
|
28
|
+
process.exit(1);
|
|
29
|
+
}
|
|
30
|
+
const branchName = getCurrentBranch();
|
|
31
|
+
const branch = await storage.get(branchName);
|
|
32
|
+
const changedFiles = getChangedFiles({ base: getTrunkBranch() });
|
|
33
|
+
const issues = [];
|
|
34
|
+
// Check for WIP markers (if enabled and not skipped)
|
|
35
|
+
if (config.readyCheck.enableWipDetection && !options.skipWip) {
|
|
36
|
+
// Performance Optimization: Hoist RegExp creation outside the loop
|
|
37
|
+
// Note: RegExp instances here do not use the global 'g' flag, so they are stateless
|
|
38
|
+
// and safe to reuse across files and lines.
|
|
39
|
+
const wipRegexes = getWipPatterns(config);
|
|
40
|
+
// Performance Optimization: Compile minimatch patterns once outside the loop
|
|
41
|
+
const compiledExcludePatterns = config.readyCheck.excludeFiles.map(p => new Minimatch(p));
|
|
42
|
+
for (const file of changedFiles) {
|
|
43
|
+
// Skip excluded files
|
|
44
|
+
if (shouldExcludeFile(file, compiledExcludePatterns)) {
|
|
45
|
+
continue;
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
const content = await readFile(file, 'utf-8');
|
|
49
|
+
const lines = content.split('\n');
|
|
50
|
+
lines.forEach((line, i) => {
|
|
51
|
+
for (const regex of wipRegexes) {
|
|
52
|
+
if (regex.test(line)) {
|
|
53
|
+
issues.push({
|
|
54
|
+
type: 'wip',
|
|
55
|
+
file,
|
|
56
|
+
line: i + 1,
|
|
57
|
+
pattern: regex.source,
|
|
58
|
+
});
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
catch {
|
|
64
|
+
// File might not exist (deleted)
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
// Check for experimental patterns â hoist combined regex as pre-filter (PR#79)
|
|
68
|
+
if (config.readyCheck.enableExperimentalDetection && config.readyCheck.experimentalPatterns.length > 0) {
|
|
69
|
+
const combinedRegex = new RegExp(config.readyCheck.experimentalPatterns.map(p => p.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')).join('|'));
|
|
70
|
+
for (const file of changedFiles) {
|
|
71
|
+
if (!combinedRegex.test(file))
|
|
72
|
+
continue;
|
|
73
|
+
for (const pattern of config.readyCheck.experimentalPatterns) {
|
|
74
|
+
if (file.includes(pattern)) {
|
|
75
|
+
issues.push({
|
|
76
|
+
type: 'experimental',
|
|
77
|
+
file,
|
|
78
|
+
pattern,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Check for conflicts â reconcile-on-read drops branches already merged
|
|
86
|
+
// into trunk so a stale registry can't report a phantom conflict (tb-8sa.1).
|
|
87
|
+
const allBranches = activeBranches(await storage.list());
|
|
88
|
+
const conflicts = [];
|
|
89
|
+
if (branch) {
|
|
90
|
+
// Performance Optimization: Convert branch files to Set for O(1) lookup
|
|
91
|
+
const branchFilesSet = new Set(branch.files);
|
|
92
|
+
for (const other of allBranches) {
|
|
93
|
+
if (other.name === branchName)
|
|
94
|
+
continue;
|
|
95
|
+
if (other.files.some(f => branchFilesSet.has(f))) {
|
|
96
|
+
conflicts.push(other.name);
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
const result = {
|
|
101
|
+
branch: branchName,
|
|
102
|
+
ready: conflicts.length === 0, // WIP markers are advisory only â don't block merges
|
|
103
|
+
issues,
|
|
104
|
+
conflicts,
|
|
105
|
+
config: {
|
|
106
|
+
wipDetection: config.readyCheck.enableWipDetection,
|
|
107
|
+
patternsChecked: config.readyCheck.wipPatterns.length,
|
|
108
|
+
},
|
|
109
|
+
};
|
|
110
|
+
if (options.json) {
|
|
111
|
+
console.log(JSON.stringify(result, null, 2));
|
|
112
|
+
process.exit(result.ready ? 0 : 1); // only exits 1 on file conflicts
|
|
113
|
+
}
|
|
114
|
+
console.log(`đˇī¸ Ready Check: ${branchName}\n`);
|
|
115
|
+
if (issues.length > 0) {
|
|
116
|
+
const wipIssues = issues.filter(i => i.type === 'wip');
|
|
117
|
+
const expIssues = issues.filter(i => i.type === 'experimental');
|
|
118
|
+
if (wipIssues.length > 0) {
|
|
119
|
+
console.log(`â ī¸ Found ${wipIssues.length} WIP marker(s):\n`);
|
|
120
|
+
for (const issue of wipIssues.slice(0, 10)) {
|
|
121
|
+
console.log(` ${issue.file}:${issue.line} - ${issue.pattern}`);
|
|
122
|
+
}
|
|
123
|
+
if (wipIssues.length > 10) {
|
|
124
|
+
console.log(` ... and ${wipIssues.length - 10} more`);
|
|
125
|
+
}
|
|
126
|
+
console.log('');
|
|
127
|
+
}
|
|
128
|
+
if (expIssues.length > 0) {
|
|
129
|
+
console.log(`âšī¸ Found ${expIssues.length} experimental file(s) (advisory):\n`);
|
|
130
|
+
for (const issue of expIssues) {
|
|
131
|
+
console.log(` ${issue.file}`);
|
|
132
|
+
}
|
|
133
|
+
console.log('');
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
if (conflicts.length > 0) {
|
|
137
|
+
console.log(`â ī¸ File conflicts with: ${conflicts.join(', ')}\n`);
|
|
138
|
+
}
|
|
139
|
+
if (result.ready) {
|
|
140
|
+
console.log('â
Branch is ready to merge!');
|
|
141
|
+
if (issues.length > 0) {
|
|
142
|
+
console.log(' (WIP/XXX/experimental markers above are advisory â not blocking)');
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
console.log('â Branch is NOT ready to merge (file conflicts with other branches).');
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
});
|
|
150
|
+
//# sourceMappingURL=ready-check.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ready-check.js","sourceRoot":"","sources":["../../src/commands/ready-check.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebase-helper.d.ts","sourceRoot":"","sources":["../../src/commands/rebase-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,mBAAmB,SAgD1B,CAAC"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { existsSync } from 'fs';
|
|
3
|
+
import { join } from 'path';
|
|
4
|
+
import { execFileSync } from 'child_process';
|
|
5
|
+
export const rebaseHelperCommand = new Command('rebase-helper')
|
|
6
|
+
.description('Detect and help resolve local git rebase states (non-interactive guidance)')
|
|
7
|
+
.option('--abort', 'Abort an in-progress rebase')
|
|
8
|
+
.option('--continue', 'Attempt to continue rebase (will skip editor prompts where possible)')
|
|
9
|
+
.action(async (options) => {
|
|
10
|
+
const repoRoot = process.cwd();
|
|
11
|
+
const rebaseMerge = join(repoRoot, '.git', 'rebase-merge');
|
|
12
|
+
const rebaseApply = join(repoRoot, '.git', 'rebase-apply');
|
|
13
|
+
const inMerge = existsSync(rebaseMerge) || existsSync(rebaseApply);
|
|
14
|
+
if (!inMerge) {
|
|
15
|
+
console.log('â
No rebase in progress.');
|
|
16
|
+
return;
|
|
17
|
+
}
|
|
18
|
+
console.log('â ī¸ Rebase state detected in this repository.');
|
|
19
|
+
console.log('Common fixes:');
|
|
20
|
+
console.log(' - To abort: git rebase --abort');
|
|
21
|
+
console.log(' - To continue: git rebase --continue');
|
|
22
|
+
console.log('If an editor opens during these commands, close it (ESC :q! for vim, Ctrl+X for nano).');
|
|
23
|
+
if (options.abort) {
|
|
24
|
+
try {
|
|
25
|
+
execFileSync('git', ['rebase', '--abort'], {
|
|
26
|
+
stdio: 'inherit',
|
|
27
|
+
env: { ...process.env, GIT_EDITOR: 'true', GIT_SEQUENCE_EDITOR: 'true' }
|
|
28
|
+
});
|
|
29
|
+
console.log('â
Rebase aborted successfully');
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
console.error('â Failed to abort rebase non-interactively. Try aborting in your terminal.');
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
if (options.continue) {
|
|
38
|
+
try {
|
|
39
|
+
execFileSync('git', ['rebase', '--continue'], {
|
|
40
|
+
stdio: 'inherit',
|
|
41
|
+
env: { ...process.env, GIT_EDITOR: 'true', GIT_SEQUENCE_EDITOR: 'true' }
|
|
42
|
+
});
|
|
43
|
+
console.log('â
Rebase continued (or completed).');
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
console.error('â Failed to continue rebase non-interactively. Please resolve conflicts and run git rebase --continue');
|
|
47
|
+
process.exit(1);
|
|
48
|
+
}
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
//# sourceMappingURL=rebase-helper.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rebase-helper.js","sourceRoot":"","sources":["../../src/commands/rebase-helper.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAE7C,MAAM,CAAC,MAAM,mBAAmB,GAAG,IAAI,OAAO,CAAC,eAAe,CAAC;KAC1D,WAAW,CAAC,4EAA4E,CAAC;KACzF,MAAM,CAAC,SAAS,EAAE,6BAA6B,CAAC;KAChD,MAAM,CAAC,YAAY,EAAE,sEAAsE,CAAC;KAC5F,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACtB,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAC3D,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;IAE3D,MAAM,OAAO,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,UAAU,CAAC,WAAW,CAAC,CAAC;IACnE,IAAI,CAAC,OAAO,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;IAC5D,OAAO,CAAC,GAAG,CAAC,eAAe,CAAC,CAAC;IAC7B,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAChD,OAAO,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC;IACtD,OAAO,CAAC,GAAG,CAAC,wFAAwF,CAAC,CAAC;IAEtG,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAChB,IAAI,CAAC;YACD,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE;gBACvC,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE;aAC3E,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,+BAA+B,CAAC,CAAC;QACjD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,KAAK,CAAC,4EAA4E,CAAC,CAAC;YAC5F,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO;IACX,CAAC;IAED,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;QACnB,IAAI,CAAC;YACD,YAAY,CAAC,KAAK,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,EAAE;gBAC1C,KAAK,EAAE,SAAS;gBAChB,GAAG,EAAE,EAAE,GAAG,OAAO,CAAC,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,MAAM,EAAE;aAC3E,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,oCAAoC,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACL,OAAO,CAAC,KAAK,CAAC,uGAAuG,CAAC,CAAC;YACvH,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,CAAC;QACD,OAAO;IACX,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare function isExcludedPath(file: string): boolean;
|
|
3
|
+
/**
|
|
4
|
+
* The Claude Code session running this command, or undefined. The id is written to the
|
|
5
|
+
* registry and later printed into agent context, so accept only a plain UUID-ish token.
|
|
6
|
+
*/
|
|
7
|
+
export declare function resolveSessionId(env?: NodeJS.ProcessEnv): string | undefined;
|
|
8
|
+
export declare function validateRegistrationFiles(files: string[]): void;
|
|
9
|
+
export declare const registerCommand: Command;
|
|
10
|
+
//# sourceMappingURL=register.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.ts","sourceRoot":"","sources":["../../src/commands/register.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAIpD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,GAAG,SAAS,CAGzF;AAED,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,CAI/D;AA+CD,eAAO,MAAM,eAAe,SA+FtB,CAAC"}
|