@hytfjwr/claude-worktree 0.1.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/LICENSE +21 -0
- package/README.md +233 -0
- package/dist/bin/claude-worktree.d.ts +3 -0
- package/dist/bin/claude-worktree.d.ts.map +1 -0
- package/dist/bin/claude-worktree.js +14 -0
- package/dist/bin/claude-worktree.js.map +1 -0
- package/dist/src/cli.d.ts +17 -0
- package/dist/src/cli.d.ts.map +1 -0
- package/dist/src/cli.js +360 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/commands/clean.d.ts +3 -0
- package/dist/src/commands/clean.d.ts.map +1 -0
- package/dist/src/commands/clean.js +190 -0
- package/dist/src/commands/clean.js.map +1 -0
- package/dist/src/commands/create.d.ts +14 -0
- package/dist/src/commands/create.d.ts.map +1 -0
- package/dist/src/commands/create.js +458 -0
- package/dist/src/commands/create.js.map +1 -0
- package/dist/src/commands/hooks.d.ts +8 -0
- package/dist/src/commands/hooks.d.ts.map +1 -0
- package/dist/src/commands/hooks.js +28 -0
- package/dist/src/commands/hooks.js.map +1 -0
- package/dist/src/commands/list.d.ts +17 -0
- package/dist/src/commands/list.d.ts.map +1 -0
- package/dist/src/commands/list.js +228 -0
- package/dist/src/commands/list.js.map +1 -0
- package/dist/src/commands/rollback.d.ts +3 -0
- package/dist/src/commands/rollback.d.ts.map +1 -0
- package/dist/src/commands/rollback.js +99 -0
- package/dist/src/commands/rollback.js.map +1 -0
- package/dist/src/commands/run-in-pane.d.ts +4 -0
- package/dist/src/commands/run-in-pane.d.ts.map +1 -0
- package/dist/src/commands/run-in-pane.js +120 -0
- package/dist/src/commands/run-in-pane.js.map +1 -0
- package/dist/src/core/cache.d.ts +10 -0
- package/dist/src/core/cache.d.ts.map +1 -0
- package/dist/src/core/cache.js +66 -0
- package/dist/src/core/cache.js.map +1 -0
- package/dist/src/core/config.d.ts +11 -0
- package/dist/src/core/config.d.ts.map +1 -0
- package/dist/src/core/config.js +181 -0
- package/dist/src/core/config.js.map +1 -0
- package/dist/src/core/errors.d.ts +9 -0
- package/dist/src/core/errors.d.ts.map +1 -0
- package/dist/src/core/errors.js +20 -0
- package/dist/src/core/errors.js.map +1 -0
- package/dist/src/core/exec.d.ts +73 -0
- package/dist/src/core/exec.d.ts.map +1 -0
- package/dist/src/core/exec.js +138 -0
- package/dist/src/core/exec.js.map +1 -0
- package/dist/src/core/git.d.ts +28 -0
- package/dist/src/core/git.d.ts.map +1 -0
- package/dist/src/core/git.js +291 -0
- package/dist/src/core/git.js.map +1 -0
- package/dist/src/core/session.d.ts +9 -0
- package/dist/src/core/session.d.ts.map +1 -0
- package/dist/src/core/session.js +87 -0
- package/dist/src/core/session.js.map +1 -0
- package/dist/src/core/slot.d.ts +7 -0
- package/dist/src/core/slot.d.ts.map +1 -0
- package/dist/src/core/slot.js +73 -0
- package/dist/src/core/slot.js.map +1 -0
- package/dist/src/external/claude.d.ts +3 -0
- package/dist/src/external/claude.d.ts.map +1 -0
- package/dist/src/external/claude.js +71 -0
- package/dist/src/external/claude.js.map +1 -0
- package/dist/src/external/wezterm.d.ts +11 -0
- package/dist/src/external/wezterm.d.ts.map +1 -0
- package/dist/src/external/wezterm.js +87 -0
- package/dist/src/external/wezterm.js.map +1 -0
- package/dist/src/index.d.ts +24 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +44 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/options.d.ts +3 -0
- package/dist/src/options.d.ts.map +1 -0
- package/dist/src/options.js +54 -0
- package/dist/src/options.js.map +1 -0
- package/dist/src/types.d.ts +273 -0
- package/dist/src/types.d.ts.map +1 -0
- package/dist/src/types.js +5 -0
- package/dist/src/types.js.map +1 -0
- package/dist/src/ui/color.d.ts +12 -0
- package/dist/src/ui/color.d.ts.map +1 -0
- package/dist/src/ui/color.js +40 -0
- package/dist/src/ui/color.js.map +1 -0
- package/dist/src/ui/icons.d.ts +22 -0
- package/dist/src/ui/icons.d.ts.map +1 -0
- package/dist/src/ui/icons.js +26 -0
- package/dist/src/ui/icons.js.map +1 -0
- package/dist/src/ui/logger.d.ts +14 -0
- package/dist/src/ui/logger.d.ts.map +1 -0
- package/dist/src/ui/logger.js +35 -0
- package/dist/src/ui/logger.js.map +1 -0
- package/dist/src/ui/prompt.d.ts +4 -0
- package/dist/src/ui/prompt.d.ts.map +1 -0
- package/dist/src/ui/prompt.js +57 -0
- package/dist/src/ui/prompt.js.map +1 -0
- package/dist/src/ui/spinner.d.ts +26 -0
- package/dist/src/ui/spinner.d.ts.map +1 -0
- package/dist/src/ui/spinner.js +319 -0
- package/dist/src/ui/spinner.js.map +1 -0
- package/package.json +54 -0
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { isColorEnabled } from "./color.js";
|
|
2
|
+
function icon(rich, plain) {
|
|
3
|
+
return () => (isColorEnabled() ? rich : plain);
|
|
4
|
+
}
|
|
5
|
+
export const icons = {
|
|
6
|
+
success: icon("\u2713", "*"),
|
|
7
|
+
fail: icon("\u2717", "x"),
|
|
8
|
+
warning: icon("\u26a0\ufe0f", "!"),
|
|
9
|
+
done: icon("\u2705", "[done]"),
|
|
10
|
+
error: icon("\u274c", "[error]"),
|
|
11
|
+
pin: icon("\ud83d\udccd", "[pin]"),
|
|
12
|
+
tree: icon("\ud83c\udf33", "[tree]"),
|
|
13
|
+
branch: icon("\ud83c\udf3f", "[branch]"),
|
|
14
|
+
folder: icon("\ud83d\udcc2", "[folder]"),
|
|
15
|
+
clipboard: icon("\ud83d\udccb", "[clipboard]"),
|
|
16
|
+
memo: icon("\ud83d\udcdd", "[memo]"),
|
|
17
|
+
merge: icon("\ud83d\udd00", "[merge]"),
|
|
18
|
+
trash: icon("\ud83d\uddd1\ufe0f", "[trash]"),
|
|
19
|
+
window: icon("\ud83e\ude9f", "[window]"),
|
|
20
|
+
sparkle: icon("\u2728", "[sparkle]"),
|
|
21
|
+
lock: icon("\ud83d\udd12", "[lock]"),
|
|
22
|
+
bullet: icon("\u2022", "*"),
|
|
23
|
+
active: icon("\u25cf", "*"),
|
|
24
|
+
inactive: icon("\u25cb", "o"),
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=icons.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"icons.js","sourceRoot":"","sources":["../../../src/ui/icons.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,SAAS,IAAI,CAAC,IAAY,EAAE,KAAa;IACvC,OAAO,GAAG,EAAE,CAAC,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;IAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;IACzB,OAAO,EAAE,IAAI,CAAC,cAAc,EAAE,GAAG,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC;IAC9B,KAAK,EAAE,IAAI,CAAC,QAAQ,EAAE,SAAS,CAAC;IAEhC,GAAG,EAAE,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC;IAClC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;IACpC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;IACxC,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;IACxC,SAAS,EAAE,IAAI,CAAC,cAAc,EAAE,aAAa,CAAC;IAC9C,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;IACpC,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,SAAS,CAAC;IACtC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,SAAS,CAAC;IAC5C,MAAM,EAAE,IAAI,CAAC,cAAc,EAAE,UAAU,CAAC;IACxC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,WAAW,CAAC;IACpC,IAAI,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,CAAC;IAEpC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;IAC3B,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;IAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC;CAC9B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface Logger {
|
|
2
|
+
log(msg: string): void;
|
|
3
|
+
warn(msg: string): void;
|
|
4
|
+
error(msg: string): void;
|
|
5
|
+
debug(msg: string): void;
|
|
6
|
+
}
|
|
7
|
+
export declare function logInfo(msg: string): void;
|
|
8
|
+
export declare function logWarn(msg: string): void;
|
|
9
|
+
export declare function logError(msg: string): void;
|
|
10
|
+
export declare function logDebug(msg: string): void;
|
|
11
|
+
export declare function setLogger(logger: Logger): void;
|
|
12
|
+
export declare function resetLogger(): void;
|
|
13
|
+
export declare function createSilentLogger(): Logger;
|
|
14
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../../src/ui/logger.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,MAAM;IACrB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAC;CAC1B;AAWD,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAEzC;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,CAE1C;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAE9C;AAED,wBAAgB,WAAW,IAAI,IAAI,CAElC;AAED,wBAAgB,kBAAkB,IAAI,MAAM,CAO3C"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { icons } from "./icons.js";
|
|
2
|
+
const defaultLogger = {
|
|
3
|
+
log: (msg) => console.log(msg),
|
|
4
|
+
warn: (msg) => console.warn(msg),
|
|
5
|
+
error: (msg) => console.error(msg),
|
|
6
|
+
debug: (msg) => console.debug(msg),
|
|
7
|
+
};
|
|
8
|
+
let currentLogger = defaultLogger;
|
|
9
|
+
export function logInfo(msg) {
|
|
10
|
+
currentLogger.log(msg);
|
|
11
|
+
}
|
|
12
|
+
export function logWarn(msg) {
|
|
13
|
+
currentLogger.warn(`${icons.warning()} ${msg}`);
|
|
14
|
+
}
|
|
15
|
+
export function logError(msg) {
|
|
16
|
+
currentLogger.error(`${icons.error()} ${msg}`);
|
|
17
|
+
}
|
|
18
|
+
export function logDebug(msg) {
|
|
19
|
+
currentLogger.debug(msg);
|
|
20
|
+
}
|
|
21
|
+
export function setLogger(logger) {
|
|
22
|
+
currentLogger = logger;
|
|
23
|
+
}
|
|
24
|
+
export function resetLogger() {
|
|
25
|
+
currentLogger = defaultLogger;
|
|
26
|
+
}
|
|
27
|
+
export function createSilentLogger() {
|
|
28
|
+
return {
|
|
29
|
+
log: () => { },
|
|
30
|
+
warn: () => { },
|
|
31
|
+
error: () => { },
|
|
32
|
+
debug: () => { },
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/ui/logger.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AASnC,MAAM,aAAa,GAAW;IAC5B,GAAG,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;IAC9B,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC;IAChC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;IAClC,KAAK,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC;CACnC,CAAC;AAEF,IAAI,aAAa,GAAW,aAAa,CAAC;AAE1C,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,aAAa,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,OAAO,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAClD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,aAAa,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,QAAQ,CAAC,GAAW;IAClC,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAc;IACtC,aAAa,GAAG,MAAM,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,WAAW;IACzB,aAAa,GAAG,aAAa,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,kBAAkB;IAChC,OAAO;QACL,GAAG,EAAE,GAAG,EAAE,GAAE,CAAC;QACb,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../../src/ui/prompt.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAkBlD,wBAAsB,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAS/D;AAED,wBAAsB,cAAc,CAAC,QAAQ,EAAE,cAAc,EAAE,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAkC1F"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import * as readline from "node:readline";
|
|
2
|
+
import { icons } from "./icons.js";
|
|
3
|
+
function createReadlineInterface() {
|
|
4
|
+
return readline.createInterface({
|
|
5
|
+
input: process.stdin,
|
|
6
|
+
output: process.stdout,
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
function question(rl, prompt) {
|
|
10
|
+
return new Promise((resolve) => {
|
|
11
|
+
rl.question(prompt, (answer) => {
|
|
12
|
+
resolve(answer);
|
|
13
|
+
});
|
|
14
|
+
});
|
|
15
|
+
}
|
|
16
|
+
export async function confirm(message) {
|
|
17
|
+
const rl = createReadlineInterface();
|
|
18
|
+
try {
|
|
19
|
+
const answer = await question(rl, `${message} (y/N): `);
|
|
20
|
+
const input = answer.trim().toLowerCase();
|
|
21
|
+
return input === "y" || input === "yes";
|
|
22
|
+
}
|
|
23
|
+
finally {
|
|
24
|
+
rl.close();
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export async function selectMultiple(statuses) {
|
|
28
|
+
console.log("\nSelect worktrees to delete (enter numbers separated by spaces):");
|
|
29
|
+
console.log("Example: 1 3 5 or 'all' to select all, empty to cancel\n");
|
|
30
|
+
statuses.forEach((status, index) => {
|
|
31
|
+
const marker = status.canAutoClean ? icons.active() : icons.inactive();
|
|
32
|
+
const branch = status.worktree.branch || "(detached)";
|
|
33
|
+
console.log(` ${index + 1}. ${marker} ${branch}`);
|
|
34
|
+
console.log(` Path: ${status.worktree.path}`);
|
|
35
|
+
console.log(` Status: ${status.reason}`);
|
|
36
|
+
});
|
|
37
|
+
const rl = createReadlineInterface();
|
|
38
|
+
try {
|
|
39
|
+
const answer = await question(rl, "\nSelection: ");
|
|
40
|
+
const input = answer.trim().toLowerCase();
|
|
41
|
+
if (!input) {
|
|
42
|
+
return [];
|
|
43
|
+
}
|
|
44
|
+
if (input === "all") {
|
|
45
|
+
return statuses;
|
|
46
|
+
}
|
|
47
|
+
const indices = input
|
|
48
|
+
.split(/\s+/)
|
|
49
|
+
.map((s) => Number.parseInt(s, 10) - 1)
|
|
50
|
+
.filter((i) => i >= 0 && i < statuses.length);
|
|
51
|
+
return indices.map((i) => statuses[i]);
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
rl.close();
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=prompt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../../src/ui/prompt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import type { Spinner } from "../types.ts";
|
|
2
|
+
type Color = {
|
|
3
|
+
r: number;
|
|
4
|
+
g: number;
|
|
5
|
+
b: number;
|
|
6
|
+
};
|
|
7
|
+
export type ColorTheme = {
|
|
8
|
+
base: Color;
|
|
9
|
+
bright: Color;
|
|
10
|
+
};
|
|
11
|
+
export declare const COLOR_THEMES: readonly ColorTheme[];
|
|
12
|
+
export declare function pickRandomTheme(): ColorTheme;
|
|
13
|
+
export declare function stripAnsi(str: string): string;
|
|
14
|
+
export declare function formatTailLine(line: string, maxWidth: number): string;
|
|
15
|
+
export declare function lerp(a: number, b: number, t: number): number;
|
|
16
|
+
export declare function smoothstep(t: number): number;
|
|
17
|
+
export declare function shimmerText(text: string, shimmerPos: number, theme?: ColorTheme): string;
|
|
18
|
+
export declare function getMaxExpandedLines(): number;
|
|
19
|
+
export declare function formatDuration(seconds: number): string;
|
|
20
|
+
export declare function formatInfoLine(hiddenCount: number, elapsedSec: number, timeoutSec?: number): string;
|
|
21
|
+
export declare function createTailUpdater(spinner: Spinner): (line: string) => void;
|
|
22
|
+
export declare function startSpinner(message: string, options?: {
|
|
23
|
+
timeoutSec?: number;
|
|
24
|
+
}): Spinner;
|
|
25
|
+
export {};
|
|
26
|
+
//# sourceMappingURL=spinner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../../src/ui/spinner.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAY3C,KAAK,KAAK,GAAG;IAAE,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAC;IAAC,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AACjD,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC;AAExD,eAAO,MAAM,YAAY,EAAE,SAAS,UAAU,EAS7C,CAAC;AAIF,wBAAgB,eAAe,IAAI,UAAU,CAE5C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAUrE;AAED,wBAAgB,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE5C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,CAmBxF;AAOD,wBAAgB,mBAAmB,IAAI,MAAM,CAG5C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGtD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAMnG;AAID,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,GAAG,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CA2C1E;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAyMxF"}
|
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
import { isColorEnabled } from "./color.js";
|
|
2
|
+
import { icons } from "./icons.js";
|
|
3
|
+
const FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
|
|
4
|
+
const INTERVAL = 80; // ms
|
|
5
|
+
// Shimmer effect configuration
|
|
6
|
+
const SHIMMER_WIDTH = 6;
|
|
7
|
+
const SHIMMER_SPEED = 2; // characters per frame
|
|
8
|
+
const SHIMMER_PAUSE = 6; // extra dark frames between sweeps
|
|
9
|
+
export const COLOR_THEMES = [
|
|
10
|
+
{ base: { r: 120, g: 110, b: 170 }, bright: { r: 230, g: 225, b: 255 } }, // Purple
|
|
11
|
+
{ base: { r: 60, g: 150, b: 160 }, bright: { r: 180, g: 240, b: 255 } }, // Cyan
|
|
12
|
+
{ base: { r: 80, g: 160, b: 100 }, bright: { r: 180, g: 255, b: 200 } }, // Green
|
|
13
|
+
{ base: { r: 180, g: 120, b: 60 }, bright: { r: 255, g: 220, b: 150 } }, // Amber
|
|
14
|
+
{ base: { r: 170, g: 90, b: 130 }, bright: { r: 255, g: 190, b: 220 } }, // Rose
|
|
15
|
+
{ base: { r: 80, g: 120, b: 180 }, bright: { r: 180, g: 210, b: 255 } }, // Blue
|
|
16
|
+
{ base: { r: 170, g: 150, b: 60 }, bright: { r: 255, g: 240, b: 150 } }, // Gold
|
|
17
|
+
{ base: { r: 180, g: 90, b: 80 }, bright: { r: 255, g: 180, b: 170 } }, // Coral
|
|
18
|
+
];
|
|
19
|
+
const DEFAULT_THEME = COLOR_THEMES[0];
|
|
20
|
+
export function pickRandomTheme() {
|
|
21
|
+
return COLOR_THEMES[Math.floor(Math.random() * COLOR_THEMES.length)];
|
|
22
|
+
}
|
|
23
|
+
export function stripAnsi(str) {
|
|
24
|
+
// CSI sequences (including ? for cursor hide/show), OSC sequences, and simple escapes
|
|
25
|
+
// biome-ignore lint/suspicious/noControlCharactersInRegex: intentional ANSI escape sequence matching
|
|
26
|
+
return str.replace(/\x1b(?:\[[0-9;?]*[a-zA-Z]|\][^\x07]*(?:\x07|\x1b\\)|\[[0-9;]*m)/g, "");
|
|
27
|
+
}
|
|
28
|
+
export function formatTailLine(line, maxWidth) {
|
|
29
|
+
const stripped = stripAnsi(line);
|
|
30
|
+
const safeWidth = Math.max(1, maxWidth);
|
|
31
|
+
if (stripped.length > safeWidth) {
|
|
32
|
+
if (safeWidth <= 1) {
|
|
33
|
+
return "…";
|
|
34
|
+
}
|
|
35
|
+
return `${stripped.substring(0, safeWidth - 1)}…`;
|
|
36
|
+
}
|
|
37
|
+
return stripped;
|
|
38
|
+
}
|
|
39
|
+
export function lerp(a, b, t) {
|
|
40
|
+
return Math.round(a + (b - a) * t);
|
|
41
|
+
}
|
|
42
|
+
export function smoothstep(t) {
|
|
43
|
+
return t * t * (3 - 2 * t);
|
|
44
|
+
}
|
|
45
|
+
export function shimmerText(text, shimmerPos, theme) {
|
|
46
|
+
if (!isColorEnabled()) {
|
|
47
|
+
return text;
|
|
48
|
+
}
|
|
49
|
+
const baseColor = theme?.base ?? DEFAULT_THEME.base;
|
|
50
|
+
const brightColor = theme?.bright ?? DEFAULT_THEME.bright;
|
|
51
|
+
const chars = [...text];
|
|
52
|
+
let result = "";
|
|
53
|
+
for (let i = 0; i < chars.length; i++) {
|
|
54
|
+
const distance = Math.abs(i - shimmerPos);
|
|
55
|
+
const t = Math.max(0, 1 - distance / SHIMMER_WIDTH);
|
|
56
|
+
const st = smoothstep(t);
|
|
57
|
+
const r = lerp(baseColor.r, brightColor.r, st);
|
|
58
|
+
const g = lerp(baseColor.g, brightColor.g, st);
|
|
59
|
+
const b = lerp(baseColor.b, brightColor.b, st);
|
|
60
|
+
result += `\x1b[38;2;${r};${g};${b}m${chars[i]}`;
|
|
61
|
+
}
|
|
62
|
+
result += "\x1b[0m";
|
|
63
|
+
return result;
|
|
64
|
+
}
|
|
65
|
+
const TAIL_LINE_COUNT = 3;
|
|
66
|
+
const MAX_ALL_LINES = 10000;
|
|
67
|
+
const EXPANDED_RATIO = 0.8;
|
|
68
|
+
const DEFAULT_ROWS = 24;
|
|
69
|
+
export function getMaxExpandedLines() {
|
|
70
|
+
const rows = process.stdout.rows || DEFAULT_ROWS;
|
|
71
|
+
return Math.max(1, Math.floor(rows * EXPANDED_RATIO));
|
|
72
|
+
}
|
|
73
|
+
export function formatDuration(seconds) {
|
|
74
|
+
if (seconds < 60)
|
|
75
|
+
return `${seconds}s`;
|
|
76
|
+
return `${Math.floor(seconds / 60)}m`;
|
|
77
|
+
}
|
|
78
|
+
export function formatInfoLine(hiddenCount, elapsedSec, timeoutSec) {
|
|
79
|
+
const timeoutPart = timeoutSec != null ? ` · timeout ${formatDuration(timeoutSec)}` : "";
|
|
80
|
+
if (hiddenCount > 0) {
|
|
81
|
+
return `..+${hiddenCount} more lines (${formatDuration(elapsedSec)}${timeoutPart})`;
|
|
82
|
+
}
|
|
83
|
+
return `(${formatDuration(elapsedSec)}${timeoutPart})`;
|
|
84
|
+
}
|
|
85
|
+
const TAIL_UPDATE_INTERVAL = 1000; // 1 second
|
|
86
|
+
export function createTailUpdater(spinner) {
|
|
87
|
+
const tailLines = [];
|
|
88
|
+
const allLines = [];
|
|
89
|
+
let totalCount = 0;
|
|
90
|
+
let lastFlushTime = 0;
|
|
91
|
+
let flushTimer = null;
|
|
92
|
+
const flush = () => {
|
|
93
|
+
if (flushTimer) {
|
|
94
|
+
clearTimeout(flushTimer);
|
|
95
|
+
flushTimer = null;
|
|
96
|
+
}
|
|
97
|
+
lastFlushTime = Date.now();
|
|
98
|
+
spinner.updateTail([...tailLines], totalCount, [...allLines]);
|
|
99
|
+
};
|
|
100
|
+
return (line) => {
|
|
101
|
+
if (allLines.length < MAX_ALL_LINES) {
|
|
102
|
+
allLines.push(line);
|
|
103
|
+
}
|
|
104
|
+
tailLines.push(line);
|
|
105
|
+
totalCount++;
|
|
106
|
+
if (tailLines.length > TAIL_LINE_COUNT)
|
|
107
|
+
tailLines.shift();
|
|
108
|
+
// In expanded mode, update immediately without cloning arrays
|
|
109
|
+
if (spinner.isExpanded()) {
|
|
110
|
+
if (flushTimer) {
|
|
111
|
+
clearTimeout(flushTimer);
|
|
112
|
+
flushTimer = null;
|
|
113
|
+
}
|
|
114
|
+
lastFlushTime = Date.now();
|
|
115
|
+
spinner.updateTail(tailLines, totalCount, allLines);
|
|
116
|
+
return;
|
|
117
|
+
}
|
|
118
|
+
const now = Date.now();
|
|
119
|
+
if (now - lastFlushTime >= TAIL_UPDATE_INTERVAL) {
|
|
120
|
+
flush();
|
|
121
|
+
}
|
|
122
|
+
else if (!flushTimer) {
|
|
123
|
+
flushTimer = setTimeout(flush, TAIL_UPDATE_INTERVAL - (now - lastFlushTime));
|
|
124
|
+
flushTimer.unref();
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
export function startSpinner(message, options) {
|
|
129
|
+
// Non-TTY fallback: no cursor control, no animation, plain text only
|
|
130
|
+
if (!process.stdout.isTTY) {
|
|
131
|
+
let stopped = false;
|
|
132
|
+
process.stdout.write(`- ${message}\n`);
|
|
133
|
+
return {
|
|
134
|
+
stop(finalMessage) {
|
|
135
|
+
if (stopped)
|
|
136
|
+
return;
|
|
137
|
+
stopped = true;
|
|
138
|
+
process.stdout.write(`${finalMessage || `${icons.success()} ${message}`}\n`);
|
|
139
|
+
},
|
|
140
|
+
fail(errorMessage) {
|
|
141
|
+
if (stopped)
|
|
142
|
+
return;
|
|
143
|
+
stopped = true;
|
|
144
|
+
process.stdout.write(`${icons.fail()} ${errorMessage}\n`);
|
|
145
|
+
},
|
|
146
|
+
updateTail(_lines, _totalCount, _newAllLines) {
|
|
147
|
+
// No-op in non-TTY mode
|
|
148
|
+
},
|
|
149
|
+
isExpanded() {
|
|
150
|
+
return false;
|
|
151
|
+
},
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
const theme = pickRandomTheme();
|
|
155
|
+
let frameIndex = 0;
|
|
156
|
+
let shimmerPos = -SHIMMER_WIDTH;
|
|
157
|
+
const chars = [...message];
|
|
158
|
+
const shimmerEnd = chars.length + SHIMMER_WIDTH;
|
|
159
|
+
let extraLines = 0;
|
|
160
|
+
let tailLines = [];
|
|
161
|
+
let totalLineCount = 0;
|
|
162
|
+
let allLines = [];
|
|
163
|
+
let expanded = false;
|
|
164
|
+
let expandedLogLines = 0;
|
|
165
|
+
let stopped = false;
|
|
166
|
+
const startTime = Date.now();
|
|
167
|
+
const timeoutSec = options?.timeoutSec;
|
|
168
|
+
const colorEnabled = isColorEnabled();
|
|
169
|
+
const frameColor = colorEnabled ? `\x1b[38;2;${theme.bright.r};${theme.bright.g};${theme.bright.b}m` : "";
|
|
170
|
+
const dimCode = colorEnabled ? "\x1b[38;5;245m" : "";
|
|
171
|
+
const resetCode = colorEnabled ? "\x1b[0m" : "";
|
|
172
|
+
const writeFrame = () => {
|
|
173
|
+
if (extraLines > 0) {
|
|
174
|
+
process.stdout.write(`\x1b[${extraLines}A`);
|
|
175
|
+
}
|
|
176
|
+
const frame = FRAMES[frameIndex];
|
|
177
|
+
const maxWidth = (process.stdout.columns || 80) - 6;
|
|
178
|
+
let output = `\r\x1b[J${frameColor}${frame}${resetCode} ${shimmerText(message, shimmerPos, theme)}`;
|
|
179
|
+
if (!expanded && tailLines.length > 0) {
|
|
180
|
+
for (const line of tailLines) {
|
|
181
|
+
const formatted = formatTailLine(line, maxWidth);
|
|
182
|
+
output += `\n${dimCode} ${formatted}${resetCode}`;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
if (timeoutSec != null) {
|
|
186
|
+
const elapsedSec = Math.floor((Date.now() - startTime) / 1000);
|
|
187
|
+
const visibleCount = expanded ? Math.min(allLines.length, getMaxExpandedLines()) : tailLines.length;
|
|
188
|
+
const hiddenCount = Math.max(0, totalLineCount - visibleCount);
|
|
189
|
+
const infoText = formatInfoLine(hiddenCount, elapsedSec, timeoutSec);
|
|
190
|
+
let toggleHint = "";
|
|
191
|
+
if (expanded) {
|
|
192
|
+
toggleHint = "Ctrl+O to collapse";
|
|
193
|
+
}
|
|
194
|
+
else if (totalLineCount > TAIL_LINE_COUNT) {
|
|
195
|
+
toggleHint = "Ctrl+O to expand";
|
|
196
|
+
}
|
|
197
|
+
const fullInfo = toggleHint ? `${infoText} — ${toggleHint}` : infoText;
|
|
198
|
+
const formattedInfo = formatTailLine(fullInfo, maxWidth);
|
|
199
|
+
output += `\n${dimCode} ${formattedInfo}${resetCode}`;
|
|
200
|
+
}
|
|
201
|
+
process.stdout.write(output);
|
|
202
|
+
extraLines = (expanded ? 0 : tailLines.length) + (timeoutSec != null ? 1 : 0);
|
|
203
|
+
};
|
|
204
|
+
const clearRenderedArea = () => {
|
|
205
|
+
const linesToClear = expandedLogLines + extraLines;
|
|
206
|
+
if (linesToClear > 0) {
|
|
207
|
+
process.stdout.write(`\x1b[${linesToClear}A`);
|
|
208
|
+
}
|
|
209
|
+
process.stdout.write("\r\x1b[J");
|
|
210
|
+
};
|
|
211
|
+
const printExpandedWindow = () => {
|
|
212
|
+
const maxLines = getMaxExpandedLines();
|
|
213
|
+
const startIdx = Math.max(0, allLines.length - maxLines);
|
|
214
|
+
const linesToPrint = allLines.slice(startIdx);
|
|
215
|
+
const maxWidth = (process.stdout.columns || 80) - 6;
|
|
216
|
+
for (const line of linesToPrint) {
|
|
217
|
+
const formatted = formatTailLine(line, maxWidth);
|
|
218
|
+
process.stdout.write(`${dimCode} ${formatted}${resetCode}\n`);
|
|
219
|
+
}
|
|
220
|
+
expandedLogLines = linesToPrint.length;
|
|
221
|
+
};
|
|
222
|
+
const toggleExpand = () => {
|
|
223
|
+
if (!expanded) {
|
|
224
|
+
clearRenderedArea();
|
|
225
|
+
extraLines = 0;
|
|
226
|
+
expandedLogLines = 0;
|
|
227
|
+
// Print bounded window of recent lines
|
|
228
|
+
printExpandedWindow();
|
|
229
|
+
expanded = true;
|
|
230
|
+
}
|
|
231
|
+
else {
|
|
232
|
+
// Collapse: clear expanded lines + spinner area
|
|
233
|
+
clearRenderedArea();
|
|
234
|
+
extraLines = 0;
|
|
235
|
+
expandedLogLines = 0;
|
|
236
|
+
expanded = false;
|
|
237
|
+
}
|
|
238
|
+
writeFrame();
|
|
239
|
+
};
|
|
240
|
+
// Setup keyboard listener for Ctrl+O toggle
|
|
241
|
+
let stdinHandler = null;
|
|
242
|
+
const setupKeyboard = () => {
|
|
243
|
+
if (!process.stdin.isTTY)
|
|
244
|
+
return;
|
|
245
|
+
process.stdin.setRawMode(true);
|
|
246
|
+
process.stdin.resume();
|
|
247
|
+
stdinHandler = (data) => {
|
|
248
|
+
if (data[0] === 0x03) {
|
|
249
|
+
// Ctrl+C
|
|
250
|
+
cleanupKeyboard();
|
|
251
|
+
clearInterval(timer);
|
|
252
|
+
process.stdout.write("\r\x1b[J\x1b[?25h");
|
|
253
|
+
process.exit(130);
|
|
254
|
+
}
|
|
255
|
+
if (data[0] === 0x0f) {
|
|
256
|
+
// Ctrl+O
|
|
257
|
+
toggleExpand();
|
|
258
|
+
}
|
|
259
|
+
};
|
|
260
|
+
process.stdin.on("data", stdinHandler);
|
|
261
|
+
};
|
|
262
|
+
const cleanupKeyboard = () => {
|
|
263
|
+
if (stdinHandler) {
|
|
264
|
+
process.stdin.removeListener("data", stdinHandler);
|
|
265
|
+
stdinHandler = null;
|
|
266
|
+
}
|
|
267
|
+
if (process.stdin.isTTY) {
|
|
268
|
+
process.stdin.setRawMode(false);
|
|
269
|
+
process.stdin.pause();
|
|
270
|
+
}
|
|
271
|
+
};
|
|
272
|
+
process.stdout.write("\x1b[?25l"); // Hide cursor
|
|
273
|
+
writeFrame();
|
|
274
|
+
const timer = setInterval(() => {
|
|
275
|
+
frameIndex = (frameIndex + 1) % FRAMES.length;
|
|
276
|
+
shimmerPos += SHIMMER_SPEED;
|
|
277
|
+
if (shimmerPos > shimmerEnd + SHIMMER_PAUSE * SHIMMER_SPEED) {
|
|
278
|
+
shimmerPos = -SHIMMER_WIDTH;
|
|
279
|
+
}
|
|
280
|
+
writeFrame();
|
|
281
|
+
}, INTERVAL);
|
|
282
|
+
setupKeyboard();
|
|
283
|
+
const clearAndWrite = (text) => {
|
|
284
|
+
cleanupKeyboard();
|
|
285
|
+
clearRenderedArea();
|
|
286
|
+
process.stdout.write(`${text}\n\x1b[?25h`); // Show cursor
|
|
287
|
+
};
|
|
288
|
+
return {
|
|
289
|
+
stop(finalMessage) {
|
|
290
|
+
stopped = true;
|
|
291
|
+
clearInterval(timer);
|
|
292
|
+
clearAndWrite(finalMessage || `${icons.success()} ${message}`);
|
|
293
|
+
},
|
|
294
|
+
fail(errorMessage) {
|
|
295
|
+
stopped = true;
|
|
296
|
+
clearInterval(timer);
|
|
297
|
+
clearAndWrite(`${icons.fail()} ${errorMessage}`);
|
|
298
|
+
},
|
|
299
|
+
updateTail(lines, totalCount, newAllLines) {
|
|
300
|
+
if (stopped)
|
|
301
|
+
return;
|
|
302
|
+
tailLines = [...lines];
|
|
303
|
+
totalLineCount = totalCount;
|
|
304
|
+
if (newAllLines)
|
|
305
|
+
allLines = newAllLines;
|
|
306
|
+
if (expanded) {
|
|
307
|
+
// Full redraw of bounded window
|
|
308
|
+
clearRenderedArea();
|
|
309
|
+
extraLines = 0;
|
|
310
|
+
printExpandedWindow();
|
|
311
|
+
}
|
|
312
|
+
writeFrame();
|
|
313
|
+
},
|
|
314
|
+
isExpanded() {
|
|
315
|
+
return expanded;
|
|
316
|
+
},
|
|
317
|
+
};
|
|
318
|
+
}
|
|
319
|
+
//# sourceMappingURL=spinner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../../src/ui/spinner.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@hytfjwr/claude-worktree",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "CLI for parallel development with WezTerm + git worktree + Claude Code",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "dist/src/index.js",
|
|
7
|
+
"types": "dist/src/index.d.ts",
|
|
8
|
+
"bin": {
|
|
9
|
+
"claude-worktree": "dist/bin/claude-worktree.js"
|
|
10
|
+
},
|
|
11
|
+
"files": [
|
|
12
|
+
"dist",
|
|
13
|
+
"LICENSE"
|
|
14
|
+
],
|
|
15
|
+
"scripts": {
|
|
16
|
+
"dev": "tsc -p tsconfig.build.json && node dist/bin/claude-worktree.js",
|
|
17
|
+
"build": "tsc -p tsconfig.build.json && node scripts/postbuild.cjs",
|
|
18
|
+
"typecheck": "tsc --noEmit",
|
|
19
|
+
"lint": "biome check src bin",
|
|
20
|
+
"lint:fix": "biome check --write src bin",
|
|
21
|
+
"test": "vitest run",
|
|
22
|
+
"test:watch": "vitest",
|
|
23
|
+
"test:coverage": "vitest run --coverage",
|
|
24
|
+
"prepublishOnly": "pnpm run build",
|
|
25
|
+
"prepare": "lefthook install"
|
|
26
|
+
},
|
|
27
|
+
"devDependencies": {
|
|
28
|
+
"@biomejs/biome": "^2.3.14",
|
|
29
|
+
"@types/node": "^22",
|
|
30
|
+
"@vitest/coverage-v8": "^3",
|
|
31
|
+
"lefthook": "^1",
|
|
32
|
+
"typescript": "^5.8",
|
|
33
|
+
"vitest": "^3"
|
|
34
|
+
},
|
|
35
|
+
"keywords": [
|
|
36
|
+
"claude",
|
|
37
|
+
"claude-code",
|
|
38
|
+
"worktree",
|
|
39
|
+
"git-worktree",
|
|
40
|
+
"wezterm",
|
|
41
|
+
"cli",
|
|
42
|
+
"parallel-development",
|
|
43
|
+
"ai-development"
|
|
44
|
+
],
|
|
45
|
+
"author": "hytfjwr",
|
|
46
|
+
"license": "MIT",
|
|
47
|
+
"engines": {
|
|
48
|
+
"node": ">=22"
|
|
49
|
+
},
|
|
50
|
+
"publishConfig": {
|
|
51
|
+
"access": "public"
|
|
52
|
+
},
|
|
53
|
+
"packageManager": "pnpm@10.29.1"
|
|
54
|
+
}
|