@slope-dev/slope 1.25.4 → 1.26.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/dist/cli/commands/doctor.d.ts +4 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +262 -3
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/guard.d.ts.map +1 -1
- package/dist/cli/commands/guard.js +154 -0
- package/dist/cli/commands/guard.js.map +1 -1
- package/dist/cli/commands/help.d.ts +5 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +98 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/hook.d.ts.map +1 -1
- package/dist/cli/commands/hook.js +10 -9
- package/dist/cli/commands/hook.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +111 -15
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/prep.d.ts.map +1 -1
- package/dist/cli/commands/prep.js +22 -3
- package/dist/cli/commands/prep.js.map +1 -1
- package/dist/cli/commands/quickstart.d.ts +6 -0
- package/dist/cli/commands/quickstart.d.ts.map +1 -0
- package/dist/cli/commands/quickstart.js +103 -0
- package/dist/cli/commands/quickstart.js.map +1 -0
- package/dist/cli/commands/worktree.d.ts +2 -0
- package/dist/cli/commands/worktree.d.ts.map +1 -0
- package/dist/cli/commands/worktree.js +224 -0
- package/dist/cli/commands/worktree.js.map +1 -0
- package/dist/cli/guards/docs.d.ts +19 -0
- package/dist/cli/guards/docs.d.ts.map +1 -0
- package/dist/cli/guards/docs.js +187 -0
- package/dist/cli/guards/docs.js.map +1 -0
- package/dist/cli/guards/next-action.d.ts +1 -1
- package/dist/cli/guards/next-action.d.ts.map +1 -1
- package/dist/cli/guards/next-action.js +7 -3
- package/dist/cli/guards/next-action.js.map +1 -1
- package/dist/cli/guards/worktree-self-remove.d.ts +8 -0
- package/dist/cli/guards/worktree-self-remove.d.ts.map +1 -0
- package/dist/cli/guards/worktree-self-remove.js +50 -0
- package/dist/cli/guards/worktree-self-remove.js.map +1 -0
- package/dist/cli/index.js +23 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/cli/registry.js +23 -0
- package/dist/cli/registry.js.map +1 -1
- package/dist/cli/template-generator.d.ts.map +1 -1
- package/dist/cli/template-generator.js +20 -4
- package/dist/cli/template-generator.js.map +1 -1
- package/dist/core/adapters/claude-code.d.ts.map +1 -1
- package/dist/core/adapters/claude-code.js +17 -20
- package/dist/core/adapters/claude-code.js.map +1 -1
- package/dist/core/adapters/cline.d.ts.map +1 -1
- package/dist/core/adapters/cline.js +19 -17
- package/dist/core/adapters/cline.js.map +1 -1
- package/dist/core/adapters/cursor.d.ts.map +1 -1
- package/dist/core/adapters/cursor.js +19 -17
- package/dist/core/adapters/cursor.js.map +1 -1
- package/dist/core/adapters/generic.d.ts.map +1 -1
- package/dist/core/adapters/generic.js +21 -19
- package/dist/core/adapters/generic.js.map +1 -1
- package/dist/core/adapters/ob1.d.ts.map +1 -1
- package/dist/core/adapters/ob1.js +19 -17
- package/dist/core/adapters/ob1.js.map +1 -1
- package/dist/core/adapters/windsurf.d.ts.map +1 -1
- package/dist/core/adapters/windsurf.js +32 -31
- package/dist/core/adapters/windsurf.js.map +1 -1
- package/dist/core/config.d.ts +7 -0
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js.map +1 -1
- package/dist/core/guard.d.ts +1 -1
- package/dist/core/guard.d.ts.map +1 -1
- package/dist/core/guard.js +8 -0
- package/dist/core/guard.js.map +1 -1
- package/dist/core/harness.d.ts +18 -0
- package/dist/core/harness.d.ts.map +1 -1
- package/dist/core/harness.js +59 -0
- package/dist/core/harness.js.map +1 -1
- package/dist/core/index.d.ts +1 -1
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/prep.d.ts +10 -0
- package/dist/core/prep.d.ts.map +1 -1
- package/dist/core/prep.js +28 -0
- package/dist/core/prep.js.map +1 -1
- package/dist/store/index.d.ts.map +1 -1
- package/dist/store/index.js +5 -2
- package/dist/store/index.js.map +1 -1
- package/dist/store-pg/index.js +1 -1
- package/dist/store-pg/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,16 +3,20 @@
|
|
|
3
3
|
import { loadConfig } from '../../core/config.js';
|
|
4
4
|
import { hasEmbeddingSupport } from '../../core/embedding-store.js';
|
|
5
5
|
import { loadScorecards } from '../../core/loader.js';
|
|
6
|
-
import { generatePrepPlan, formatPrepPlan } from '../../core/prep.js';
|
|
6
|
+
import { generatePrepPlan, formatPrepPlan, resolveTicket, findSimilarTickets, extractHazards, formatLitePrepPlan } from '../../core/prep.js';
|
|
7
7
|
import { SqliteSlopeStore } from '../../store/index.js';
|
|
8
8
|
function parseArgs(args) {
|
|
9
9
|
let ticketId = null;
|
|
10
10
|
let json = false;
|
|
11
|
+
let lite = false;
|
|
11
12
|
let top = 5;
|
|
12
13
|
for (const arg of args) {
|
|
13
14
|
if (arg === '--json') {
|
|
14
15
|
json = true;
|
|
15
16
|
}
|
|
17
|
+
else if (arg === '--lite') {
|
|
18
|
+
lite = true;
|
|
19
|
+
}
|
|
16
20
|
else if (arg.startsWith('--top=')) {
|
|
17
21
|
top = parseInt(arg.slice('--top='.length), 10) || 5;
|
|
18
22
|
}
|
|
@@ -20,7 +24,7 @@ function parseArgs(args) {
|
|
|
20
24
|
ticketId = arg;
|
|
21
25
|
}
|
|
22
26
|
}
|
|
23
|
-
return { ticketId, json, top };
|
|
27
|
+
return { ticketId, json, lite, top };
|
|
24
28
|
}
|
|
25
29
|
export async function prepCommand(args) {
|
|
26
30
|
const cwd = process.cwd();
|
|
@@ -34,6 +38,19 @@ export async function prepCommand(args) {
|
|
|
34
38
|
console.error('Error: Provide a ticket ID. Usage: slope prep <ticket-id>');
|
|
35
39
|
process.exit(1);
|
|
36
40
|
}
|
|
41
|
+
// --lite mode: hazards + similar tickets only (no embedding required)
|
|
42
|
+
if (flags.lite) {
|
|
43
|
+
const ticket = resolveTicket(flags.ticketId, cwd, undefined, config.roadmapPath);
|
|
44
|
+
if (!ticket) {
|
|
45
|
+
console.error(`Ticket not found: ${flags.ticketId}`);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
const scorecards = loadScorecards(config, cwd);
|
|
49
|
+
const similarTickets = findSimilarTickets(ticket.title, scorecards);
|
|
50
|
+
const hazards = extractHazards(ticket.modules, scorecards);
|
|
51
|
+
console.log(formatLitePrepPlan(flags.ticketId, ticket.title, similarTickets, hazards));
|
|
52
|
+
return;
|
|
53
|
+
}
|
|
37
54
|
// Resolve embedding config
|
|
38
55
|
const emb = config.embedding;
|
|
39
56
|
if (!emb) {
|
|
@@ -85,9 +102,11 @@ slope prep — Generate execution plan for a ticket
|
|
|
85
102
|
Usage:
|
|
86
103
|
slope prep <ticket-id> Generate execution plan
|
|
87
104
|
slope prep <ticket-id> --json Output as JSON
|
|
105
|
+
slope prep <ticket-id> --lite Hazards + similar tickets only (no embedding)
|
|
88
106
|
slope prep <ticket-id> --top=5 Max context files (default: 5)
|
|
89
107
|
|
|
90
|
-
|
|
108
|
+
Full mode requires a built semantic index. Run \`slope index\` first.
|
|
109
|
+
--lite mode works without embeddings (uses scorecard keyword matching).
|
|
91
110
|
Looks up ticket in roadmap.json and slope-loop/backlog.json.
|
|
92
111
|
`);
|
|
93
112
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"prep.js","sourceRoot":"","sources":["../../../src/cli/commands/prep.ts"],"names":[],"mappings":"AAAA,oDAAoD;AACpD,mDAAmD;AAEnD,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"prep.js","sourceRoot":"","sources":["../../../src/cli/commands/prep.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickstart.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/quickstart.ts"],"names":[],"mappings":"AAIA;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiIrE"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { existsSync, readdirSync } from 'node:fs';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
import * as p from '@clack/prompts';
|
|
4
|
+
/**
|
|
5
|
+
* slope quickstart — Interactive tutorial for new users.
|
|
6
|
+
* Walks through the core SLOPE workflow, checking current state along the way.
|
|
7
|
+
*/
|
|
8
|
+
export async function quickstartCommand(args) {
|
|
9
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
10
|
+
console.log(`
|
|
11
|
+
slope quickstart — Interactive SLOPE tutorial
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
slope quickstart Walk through the core SLOPE workflow step by step
|
|
15
|
+
|
|
16
|
+
Non-destructive — shows commands to run, does not modify your project.
|
|
17
|
+
`);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
const cwd = process.cwd();
|
|
21
|
+
p.intro('SLOPE Quickstart');
|
|
22
|
+
console.log(`
|
|
23
|
+
SLOPE (Sprint Lifecycle & Operational Performance Engine) helps you
|
|
24
|
+
track, score, and improve your sprint execution over time.
|
|
25
|
+
|
|
26
|
+
This guide walks through the core workflow. No files will be modified.
|
|
27
|
+
`);
|
|
28
|
+
// ── Step 0: Check prerequisites ──────────────────────────────────
|
|
29
|
+
const slopeDir = join(cwd, '.slope');
|
|
30
|
+
const hasSlope = existsSync(join(slopeDir, 'config.json'));
|
|
31
|
+
const retrosDir = join(cwd, 'docs', 'retros');
|
|
32
|
+
const hasScorecards = existsSync(retrosDir) && readdirSync(retrosDir).some(f => f.endsWith('.json'));
|
|
33
|
+
if (!hasSlope) {
|
|
34
|
+
p.note('Your project has not been initialized with SLOPE yet.\n\n' +
|
|
35
|
+
'Run one of:\n' +
|
|
36
|
+
' slope init Basic setup\n' +
|
|
37
|
+
' slope init --interactive Guided wizard\n' +
|
|
38
|
+
' slope init --claude-code Setup with Claude Code hooks\n' +
|
|
39
|
+
' slope init --cursor Setup with Cursor IDE rules', 'Step 0 — Initialize');
|
|
40
|
+
const shouldContinue = await p.confirm({
|
|
41
|
+
message: 'Continue the tutorial anyway?',
|
|
42
|
+
initialValue: true,
|
|
43
|
+
});
|
|
44
|
+
if (p.isCancel(shouldContinue) || !shouldContinue) {
|
|
45
|
+
p.outro('Run `slope init` first, then `slope quickstart` again.');
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
p.log.success('Project initialized — .slope/config.json found');
|
|
51
|
+
}
|
|
52
|
+
// ── Step 1: Pre-Sprint Briefing ──────────────────────────────────
|
|
53
|
+
p.note('Before starting a sprint, get a briefing on your current state:\n\n' +
|
|
54
|
+
' slope briefing\n\n' +
|
|
55
|
+
'This shows:\n' +
|
|
56
|
+
' - Handicap snapshot (trending performance)\n' +
|
|
57
|
+
' - Hazard index (known gotchas in your code areas)\n' +
|
|
58
|
+
' - Session continuity (active claims, unfinished work)\n\n' +
|
|
59
|
+
'Filter by area: slope briefing --categories=testing,api\n' +
|
|
60
|
+
'Filter by keyword: slope briefing --keywords=migration', 'Step 1 — Pre-Sprint Briefing');
|
|
61
|
+
// ── Step 2: Sprint Planning ──────────────────────────────────────
|
|
62
|
+
p.note('Plan each ticket before writing code:\n\n' +
|
|
63
|
+
' slope plan --complexity=medium\n\n' +
|
|
64
|
+
'This recommends:\n' +
|
|
65
|
+
' - Club selection (approach complexity: putter → driver)\n' +
|
|
66
|
+
' - Known hazards for the code areas you\'ll touch\n' +
|
|
67
|
+
' - Training tips based on your miss patterns\n\n' +
|
|
68
|
+
'Claim tickets to avoid conflicts in multi-agent setups:\n' +
|
|
69
|
+
' slope claim --target=S1-1 --sprint=1', 'Step 2 — Planning & Claims');
|
|
70
|
+
// ── Step 3: Scoring ──────────────────────────────────────────────
|
|
71
|
+
p.note('After completing sprint work, score and validate:\n\n' +
|
|
72
|
+
' slope validate docs/retros/sprint-1.json\n' +
|
|
73
|
+
' slope review docs/retros/sprint-1.json\n\n' +
|
|
74
|
+
'Or auto-generate a scorecard from git history:\n' +
|
|
75
|
+
' slope auto-card --sprint=1\n\n' +
|
|
76
|
+
'View your performance trend:\n' +
|
|
77
|
+
' slope card', 'Step 3 — Scoring & Review');
|
|
78
|
+
// ── Step 4: Guards & Hooks ───────────────────────────────────────
|
|
79
|
+
p.note('Guards are hooks that guide your agent during coding:\n\n' +
|
|
80
|
+
' slope hook add --level=full Install all guards\n' +
|
|
81
|
+
' slope guard list See available guards\n' +
|
|
82
|
+
' slope guard status Check installation state\n' +
|
|
83
|
+
' slope guard docs Detailed guard documentation\n\n' +
|
|
84
|
+
'Guards can:\n' +
|
|
85
|
+
' - Nudge you to commit/push regularly\n' +
|
|
86
|
+
' - Warn about known hazards in files you\'re editing\n' +
|
|
87
|
+
' - Block commits on main (branch discipline)\n' +
|
|
88
|
+
' - Detect scope drift outside your claimed tickets', 'Step 4 — Guards & Hooks');
|
|
89
|
+
// ── Next Steps ───────────────────────────────────────────────────
|
|
90
|
+
const nextSteps = [];
|
|
91
|
+
if (!hasSlope) {
|
|
92
|
+
nextSteps.push('slope init --interactive Initialize SLOPE for this project');
|
|
93
|
+
}
|
|
94
|
+
if (!hasScorecards) {
|
|
95
|
+
nextSteps.push('slope auto-card --sprint=1 Generate your first scorecard from git');
|
|
96
|
+
}
|
|
97
|
+
nextSteps.push('slope briefing Get a pre-sprint briefing');
|
|
98
|
+
nextSteps.push('slope help Browse all commands');
|
|
99
|
+
nextSteps.push('slope doctor Check repo health');
|
|
100
|
+
p.note(nextSteps.join('\n'), 'Next Steps');
|
|
101
|
+
p.outro('Ready to score your sprints!');
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=quickstart.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quickstart.js","sourceRoot":"","sources":["../../../src/cli/commands/quickstart.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/worktree.ts"],"names":[],"mappings":"AA0NA,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8BnE"}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
// slope worktree cleanup — Clean up stale git worktrees
|
|
2
|
+
// Usage: slope worktree cleanup [--path=<path>] [--all] [--dry-run]
|
|
3
|
+
import { execSync } from 'node:child_process';
|
|
4
|
+
function parseArgs(args) {
|
|
5
|
+
let subcommand = null;
|
|
6
|
+
let targetPath = null;
|
|
7
|
+
let all = false;
|
|
8
|
+
let dryRun = false;
|
|
9
|
+
for (const arg of args) {
|
|
10
|
+
if (arg === '--all') {
|
|
11
|
+
all = true;
|
|
12
|
+
}
|
|
13
|
+
else if (arg === '--dry-run') {
|
|
14
|
+
dryRun = true;
|
|
15
|
+
}
|
|
16
|
+
else if (arg.startsWith('--path=')) {
|
|
17
|
+
targetPath = arg.slice('--path='.length);
|
|
18
|
+
}
|
|
19
|
+
else if (!arg.startsWith('-')) {
|
|
20
|
+
subcommand = arg;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
return { subcommand, targetPath, all, dryRun };
|
|
24
|
+
}
|
|
25
|
+
/** Parse `git worktree list --porcelain` output */
|
|
26
|
+
function listWorktrees(cwd) {
|
|
27
|
+
let output;
|
|
28
|
+
try {
|
|
29
|
+
output = execSync('git worktree list --porcelain', { cwd, encoding: 'utf8' });
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
return [];
|
|
33
|
+
}
|
|
34
|
+
const worktrees = [];
|
|
35
|
+
let current = {};
|
|
36
|
+
for (const line of output.split('\n')) {
|
|
37
|
+
if (line.startsWith('worktree ')) {
|
|
38
|
+
if (current.path)
|
|
39
|
+
worktrees.push(current);
|
|
40
|
+
current = { path: line.slice('worktree '.length) };
|
|
41
|
+
}
|
|
42
|
+
else if (line.startsWith('HEAD ')) {
|
|
43
|
+
current.head = line.slice('HEAD '.length);
|
|
44
|
+
}
|
|
45
|
+
else if (line.startsWith('branch ')) {
|
|
46
|
+
// refs/heads/feat/foo → feat/foo
|
|
47
|
+
current.branch = line.slice('branch '.length).replace('refs/heads/', '');
|
|
48
|
+
}
|
|
49
|
+
else if (line === '') {
|
|
50
|
+
if (current.path)
|
|
51
|
+
worktrees.push(current);
|
|
52
|
+
current = {};
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
if (current.path)
|
|
56
|
+
worktrees.push(current);
|
|
57
|
+
return worktrees;
|
|
58
|
+
}
|
|
59
|
+
/** Check if we're currently inside a worktree */
|
|
60
|
+
function isInsideWorktree(cwd) {
|
|
61
|
+
try {
|
|
62
|
+
const commonDir = execSync('git rev-parse --git-common-dir 2>/dev/null', { cwd, encoding: 'utf8' }).trim();
|
|
63
|
+
const gitDir = execSync('git rev-parse --git-dir 2>/dev/null', { cwd, encoding: 'utf8' }).trim();
|
|
64
|
+
return gitDir !== commonDir && gitDir !== '.git';
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
/** Check if gh CLI is available */
|
|
71
|
+
function hasGhCli() {
|
|
72
|
+
try {
|
|
73
|
+
execSync('gh --version', { encoding: 'utf8', stdio: 'pipe' });
|
|
74
|
+
return true;
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
return false;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/** Check if a branch's PR is merged */
|
|
81
|
+
function isPrMerged(branch) {
|
|
82
|
+
try {
|
|
83
|
+
const result = execSync(`gh pr list --head "${branch}" --state merged --json url --limit 1`, { encoding: 'utf8', stdio: 'pipe' });
|
|
84
|
+
const prs = JSON.parse(result);
|
|
85
|
+
return Array.isArray(prs) && prs.length > 0;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
function cleanupWorktree(wt, dryRun, ghAvailable) {
|
|
92
|
+
const branch = wt.branch || '';
|
|
93
|
+
if (ghAvailable && branch) {
|
|
94
|
+
const merged = isPrMerged(branch);
|
|
95
|
+
if (!merged) {
|
|
96
|
+
console.log(` Skip: ${wt.path} (branch "${branch}" — PR not merged)`);
|
|
97
|
+
return false;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (dryRun) {
|
|
101
|
+
console.log(` [dry-run] Would remove worktree: ${wt.path}`);
|
|
102
|
+
if (branch) {
|
|
103
|
+
console.log(` [dry-run] Would delete branch: ${branch}`);
|
|
104
|
+
console.log(` [dry-run] Would delete remote branch: origin/${branch}`);
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
// Remove worktree
|
|
109
|
+
try {
|
|
110
|
+
execSync(`git worktree remove "${wt.path}" --force`, { encoding: 'utf8', stdio: 'pipe' });
|
|
111
|
+
console.log(` Removed worktree: ${wt.path}`);
|
|
112
|
+
}
|
|
113
|
+
catch (err) {
|
|
114
|
+
console.error(` Error removing worktree ${wt.path}: ${err.message}`);
|
|
115
|
+
return false;
|
|
116
|
+
}
|
|
117
|
+
// Delete local branch
|
|
118
|
+
if (branch) {
|
|
119
|
+
try {
|
|
120
|
+
execSync(`git branch -d "${branch}"`, { encoding: 'utf8', stdio: 'pipe' });
|
|
121
|
+
console.log(` Deleted branch: ${branch}`);
|
|
122
|
+
}
|
|
123
|
+
catch { /* branch already deleted or not fully merged — ignore */ }
|
|
124
|
+
// Delete remote branch
|
|
125
|
+
try {
|
|
126
|
+
execSync(`git push origin --delete "${branch}"`, { encoding: 'utf8', stdio: 'pipe' });
|
|
127
|
+
console.log(` Deleted remote branch: origin/${branch}`);
|
|
128
|
+
}
|
|
129
|
+
catch { /* remote branch already gone — ignore */ }
|
|
130
|
+
}
|
|
131
|
+
return true;
|
|
132
|
+
}
|
|
133
|
+
async function cleanupCommand(args) {
|
|
134
|
+
const flags = parseArgs(args);
|
|
135
|
+
const cwd = process.cwd();
|
|
136
|
+
// Safety: block if running from inside a worktree
|
|
137
|
+
if (isInsideWorktree(cwd)) {
|
|
138
|
+
console.error('Error: Cannot run worktree cleanup from inside a worktree.');
|
|
139
|
+
console.error('Call ExitWorktree first to return to the main repo, then retry.');
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
const allWorktrees = listWorktrees(cwd);
|
|
143
|
+
if (allWorktrees.length === 0) {
|
|
144
|
+
console.log('No worktrees found.');
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
// First entry is the main worktree — skip it
|
|
148
|
+
const mainPath = allWorktrees[0]?.path;
|
|
149
|
+
const secondaryWorktrees = allWorktrees.filter(wt => wt.path !== mainPath);
|
|
150
|
+
if (secondaryWorktrees.length === 0) {
|
|
151
|
+
console.log('No secondary worktrees to clean up.');
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
// Determine targets
|
|
155
|
+
let targets;
|
|
156
|
+
if (flags.targetPath) {
|
|
157
|
+
const found = secondaryWorktrees.find(wt => wt.path === flags.targetPath || wt.path.endsWith(flags.targetPath));
|
|
158
|
+
if (!found) {
|
|
159
|
+
console.error(`Worktree not found: ${flags.targetPath}`);
|
|
160
|
+
console.error('Available worktrees:');
|
|
161
|
+
for (const wt of secondaryWorktrees) {
|
|
162
|
+
console.error(` ${wt.path} [${wt.branch || 'detached'}]`);
|
|
163
|
+
}
|
|
164
|
+
process.exit(1);
|
|
165
|
+
}
|
|
166
|
+
targets = [found];
|
|
167
|
+
}
|
|
168
|
+
else if (flags.all) {
|
|
169
|
+
targets = secondaryWorktrees;
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
console.error('Error: Specify --path=<path> or --all');
|
|
173
|
+
console.error('Available worktrees:');
|
|
174
|
+
for (const wt of secondaryWorktrees) {
|
|
175
|
+
console.error(` ${wt.path} [${wt.branch || 'detached'}]`);
|
|
176
|
+
}
|
|
177
|
+
process.exit(1);
|
|
178
|
+
}
|
|
179
|
+
const ghAvailable = hasGhCli();
|
|
180
|
+
if (!ghAvailable) {
|
|
181
|
+
console.log('Note: gh CLI not found — skipping PR merge checks');
|
|
182
|
+
}
|
|
183
|
+
let cleaned = 0;
|
|
184
|
+
for (const wt of targets) {
|
|
185
|
+
if (cleanupWorktree(wt, flags.dryRun, ghAvailable)) {
|
|
186
|
+
cleaned++;
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
if (flags.dryRun) {
|
|
190
|
+
console.log(`\n${cleaned} worktree(s) would be cleaned.`);
|
|
191
|
+
}
|
|
192
|
+
else {
|
|
193
|
+
console.log(`\nCleaned ${cleaned} worktree(s).`);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
export async function worktreeCommand(args) {
|
|
197
|
+
const sub = args[0];
|
|
198
|
+
if (sub === 'cleanup') {
|
|
199
|
+
return cleanupCommand(args.slice(1));
|
|
200
|
+
}
|
|
201
|
+
if (args.includes('--help') || args.includes('-h') || !sub) {
|
|
202
|
+
console.log(`
|
|
203
|
+
slope worktree — Manage git worktrees
|
|
204
|
+
|
|
205
|
+
Usage:
|
|
206
|
+
slope worktree cleanup [--path=<path>] [--all] [--dry-run]
|
|
207
|
+
|
|
208
|
+
Options:
|
|
209
|
+
--path=<path> Target a specific worktree
|
|
210
|
+
--all Clean up all secondary worktrees
|
|
211
|
+
--dry-run Preview what would happen without making changes
|
|
212
|
+
|
|
213
|
+
For each worktree, cleanup will:
|
|
214
|
+
1. Check if the branch's PR is merged (requires gh CLI)
|
|
215
|
+
2. Remove the worktree (git worktree remove)
|
|
216
|
+
3. Delete the local branch (git branch -d)
|
|
217
|
+
4. Delete the remote branch (git push origin --delete)
|
|
218
|
+
`);
|
|
219
|
+
return;
|
|
220
|
+
}
|
|
221
|
+
console.error(`Unknown subcommand: ${sub}. Run slope worktree --help for usage.`);
|
|
222
|
+
process.exit(1);
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=worktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../../src/cli/commands/worktree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
export interface GuardDoc {
|
|
2
|
+
/** What problem this guard solves */
|
|
3
|
+
purpose: string;
|
|
4
|
+
/** Hook event + matcher (what tools/actions fire it) */
|
|
5
|
+
triggers: string;
|
|
6
|
+
/** What it does when fired (block vs advisory vs context injection) */
|
|
7
|
+
behavior: string;
|
|
8
|
+
/** How to enable/disable, relevant config.json fields */
|
|
9
|
+
configuration: string;
|
|
10
|
+
/** Which --level installs it */
|
|
11
|
+
level: 'scoring' | 'full';
|
|
12
|
+
}
|
|
13
|
+
export declare const GUARD_DOCS: Record<string, GuardDoc>;
|
|
14
|
+
/**
|
|
15
|
+
* Format guard documentation for console output.
|
|
16
|
+
* @param name — specific guard name, or undefined for all guards
|
|
17
|
+
*/
|
|
18
|
+
export declare function formatGuardDocs(name?: string): void;
|
|
19
|
+
//# sourceMappingURL=docs.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docs.d.ts","sourceRoot":"","sources":["../../../src/cli/guards/docs.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,QAAQ;IACvB,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,QAAQ,EAAE,MAAM,CAAC;IACjB,uEAAuE;IACvE,QAAQ,EAAE,MAAM,CAAC;IACjB,yDAAyD;IACzD,aAAa,EAAE,MAAM,CAAC;IACtB,gCAAgC;IAChC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAsI/C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAuCnD"}
|