@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.
Files changed (103) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +233 -0
  3. package/dist/bin/claude-worktree.d.ts +3 -0
  4. package/dist/bin/claude-worktree.d.ts.map +1 -0
  5. package/dist/bin/claude-worktree.js +14 -0
  6. package/dist/bin/claude-worktree.js.map +1 -0
  7. package/dist/src/cli.d.ts +17 -0
  8. package/dist/src/cli.d.ts.map +1 -0
  9. package/dist/src/cli.js +360 -0
  10. package/dist/src/cli.js.map +1 -0
  11. package/dist/src/commands/clean.d.ts +3 -0
  12. package/dist/src/commands/clean.d.ts.map +1 -0
  13. package/dist/src/commands/clean.js +190 -0
  14. package/dist/src/commands/clean.js.map +1 -0
  15. package/dist/src/commands/create.d.ts +14 -0
  16. package/dist/src/commands/create.d.ts.map +1 -0
  17. package/dist/src/commands/create.js +458 -0
  18. package/dist/src/commands/create.js.map +1 -0
  19. package/dist/src/commands/hooks.d.ts +8 -0
  20. package/dist/src/commands/hooks.d.ts.map +1 -0
  21. package/dist/src/commands/hooks.js +28 -0
  22. package/dist/src/commands/hooks.js.map +1 -0
  23. package/dist/src/commands/list.d.ts +17 -0
  24. package/dist/src/commands/list.d.ts.map +1 -0
  25. package/dist/src/commands/list.js +228 -0
  26. package/dist/src/commands/list.js.map +1 -0
  27. package/dist/src/commands/rollback.d.ts +3 -0
  28. package/dist/src/commands/rollback.d.ts.map +1 -0
  29. package/dist/src/commands/rollback.js +99 -0
  30. package/dist/src/commands/rollback.js.map +1 -0
  31. package/dist/src/commands/run-in-pane.d.ts +4 -0
  32. package/dist/src/commands/run-in-pane.d.ts.map +1 -0
  33. package/dist/src/commands/run-in-pane.js +120 -0
  34. package/dist/src/commands/run-in-pane.js.map +1 -0
  35. package/dist/src/core/cache.d.ts +10 -0
  36. package/dist/src/core/cache.d.ts.map +1 -0
  37. package/dist/src/core/cache.js +66 -0
  38. package/dist/src/core/cache.js.map +1 -0
  39. package/dist/src/core/config.d.ts +11 -0
  40. package/dist/src/core/config.d.ts.map +1 -0
  41. package/dist/src/core/config.js +181 -0
  42. package/dist/src/core/config.js.map +1 -0
  43. package/dist/src/core/errors.d.ts +9 -0
  44. package/dist/src/core/errors.d.ts.map +1 -0
  45. package/dist/src/core/errors.js +20 -0
  46. package/dist/src/core/errors.js.map +1 -0
  47. package/dist/src/core/exec.d.ts +73 -0
  48. package/dist/src/core/exec.d.ts.map +1 -0
  49. package/dist/src/core/exec.js +138 -0
  50. package/dist/src/core/exec.js.map +1 -0
  51. package/dist/src/core/git.d.ts +28 -0
  52. package/dist/src/core/git.d.ts.map +1 -0
  53. package/dist/src/core/git.js +291 -0
  54. package/dist/src/core/git.js.map +1 -0
  55. package/dist/src/core/session.d.ts +9 -0
  56. package/dist/src/core/session.d.ts.map +1 -0
  57. package/dist/src/core/session.js +87 -0
  58. package/dist/src/core/session.js.map +1 -0
  59. package/dist/src/core/slot.d.ts +7 -0
  60. package/dist/src/core/slot.d.ts.map +1 -0
  61. package/dist/src/core/slot.js +73 -0
  62. package/dist/src/core/slot.js.map +1 -0
  63. package/dist/src/external/claude.d.ts +3 -0
  64. package/dist/src/external/claude.d.ts.map +1 -0
  65. package/dist/src/external/claude.js +71 -0
  66. package/dist/src/external/claude.js.map +1 -0
  67. package/dist/src/external/wezterm.d.ts +11 -0
  68. package/dist/src/external/wezterm.d.ts.map +1 -0
  69. package/dist/src/external/wezterm.js +87 -0
  70. package/dist/src/external/wezterm.js.map +1 -0
  71. package/dist/src/index.d.ts +24 -0
  72. package/dist/src/index.d.ts.map +1 -0
  73. package/dist/src/index.js +44 -0
  74. package/dist/src/index.js.map +1 -0
  75. package/dist/src/options.d.ts +3 -0
  76. package/dist/src/options.d.ts.map +1 -0
  77. package/dist/src/options.js +54 -0
  78. package/dist/src/options.js.map +1 -0
  79. package/dist/src/types.d.ts +273 -0
  80. package/dist/src/types.d.ts.map +1 -0
  81. package/dist/src/types.js +5 -0
  82. package/dist/src/types.js.map +1 -0
  83. package/dist/src/ui/color.d.ts +12 -0
  84. package/dist/src/ui/color.d.ts.map +1 -0
  85. package/dist/src/ui/color.js +40 -0
  86. package/dist/src/ui/color.js.map +1 -0
  87. package/dist/src/ui/icons.d.ts +22 -0
  88. package/dist/src/ui/icons.d.ts.map +1 -0
  89. package/dist/src/ui/icons.js +26 -0
  90. package/dist/src/ui/icons.js.map +1 -0
  91. package/dist/src/ui/logger.d.ts +14 -0
  92. package/dist/src/ui/logger.d.ts.map +1 -0
  93. package/dist/src/ui/logger.js +35 -0
  94. package/dist/src/ui/logger.js.map +1 -0
  95. package/dist/src/ui/prompt.d.ts +4 -0
  96. package/dist/src/ui/prompt.d.ts.map +1 -0
  97. package/dist/src/ui/prompt.js +57 -0
  98. package/dist/src/ui/prompt.js.map +1 -0
  99. package/dist/src/ui/spinner.d.ts +26 -0
  100. package/dist/src/ui/spinner.d.ts.map +1 -0
  101. package/dist/src/ui/spinner.js +319 -0
  102. package/dist/src/ui/spinner.js.map +1 -0
  103. 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,4 @@
1
+ import type { WorktreeStatus } from "../types.ts";
2
+ export declare function confirm(message: string): Promise<boolean>;
3
+ export declare function selectMultiple(statuses: WorktreeStatus[]): Promise<WorktreeStatus[]>;
4
+ //# sourceMappingURL=prompt.d.ts.map
@@ -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
+ }