@camaradesuk/git-worktree-tools 1.5.0 → 1.7.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 (274) hide show
  1. package/README.md +330 -370
  2. package/dist/cli/cleanpr.js +35 -4
  3. package/dist/cli/cleanpr.js.map +1 -1
  4. package/dist/cli/cleanpr.test.js +256 -0
  5. package/dist/cli/cleanpr.test.js.map +1 -1
  6. package/dist/cli/lswt.js +54 -6
  7. package/dist/cli/lswt.js.map +1 -1
  8. package/dist/cli/lswt.test.js +207 -0
  9. package/dist/cli/lswt.test.js.map +1 -1
  10. package/dist/cli/newpr.js +135 -76
  11. package/dist/cli/newpr.js.map +1 -1
  12. package/dist/cli/newpr.test.js +35 -16
  13. package/dist/cli/newpr.test.js.map +1 -1
  14. package/dist/cli/wt/clean.d.ts +17 -0
  15. package/dist/cli/wt/clean.d.ts.map +1 -0
  16. package/dist/cli/wt/clean.js +74 -0
  17. package/dist/cli/wt/clean.js.map +1 -0
  18. package/dist/cli/wt/completion.d.ts +12 -0
  19. package/dist/cli/wt/completion.d.ts.map +1 -0
  20. package/dist/cli/wt/completion.js +246 -0
  21. package/dist/cli/wt/completion.js.map +1 -0
  22. package/dist/cli/wt/completion.test.d.ts +5 -0
  23. package/dist/cli/wt/completion.test.d.ts.map +1 -0
  24. package/dist/cli/wt/completion.test.js +173 -0
  25. package/dist/cli/wt/completion.test.js.map +1 -0
  26. package/dist/cli/wt/config.d.ts +13 -0
  27. package/dist/cli/wt/config.d.ts.map +1 -0
  28. package/dist/cli/wt/config.js +175 -0
  29. package/dist/cli/wt/config.js.map +1 -0
  30. package/dist/cli/wt/config.test.d.ts +5 -0
  31. package/dist/cli/wt/config.test.d.ts.map +1 -0
  32. package/dist/cli/wt/config.test.js +260 -0
  33. package/dist/cli/wt/config.test.js.map +1 -0
  34. package/dist/cli/wt/entry.test.d.ts +8 -0
  35. package/dist/cli/wt/entry.test.d.ts.map +1 -0
  36. package/dist/cli/wt/entry.test.js +201 -0
  37. package/dist/cli/wt/entry.test.js.map +1 -0
  38. package/dist/cli/wt/init.d.ts +14 -0
  39. package/dist/cli/wt/init.d.ts.map +1 -0
  40. package/dist/cli/wt/init.js +209 -0
  41. package/dist/cli/wt/init.js.map +1 -0
  42. package/dist/cli/wt/init.test.d.ts +5 -0
  43. package/dist/cli/wt/init.test.d.ts.map +1 -0
  44. package/dist/cli/wt/init.test.js +165 -0
  45. package/dist/cli/wt/init.test.js.map +1 -0
  46. package/dist/cli/wt/init.unit.test.d.ts +5 -0
  47. package/dist/cli/wt/init.unit.test.d.ts.map +1 -0
  48. package/dist/cli/wt/init.unit.test.js +432 -0
  49. package/dist/cli/wt/init.unit.test.js.map +1 -0
  50. package/dist/cli/wt/interactive-menu.d.ts +41 -0
  51. package/dist/cli/wt/interactive-menu.d.ts.map +1 -0
  52. package/dist/cli/wt/interactive-menu.js +639 -0
  53. package/dist/cli/wt/interactive-menu.js.map +1 -0
  54. package/dist/cli/wt/interactive-menu.test.d.ts +10 -0
  55. package/dist/cli/wt/interactive-menu.test.d.ts.map +1 -0
  56. package/dist/cli/wt/interactive-menu.test.js +711 -0
  57. package/dist/cli/wt/interactive-menu.test.js.map +1 -0
  58. package/dist/cli/wt/link.d.ts +22 -0
  59. package/dist/cli/wt/link.d.ts.map +1 -0
  60. package/dist/cli/wt/link.js +115 -0
  61. package/dist/cli/wt/link.js.map +1 -0
  62. package/dist/cli/wt/list.d.ts +16 -0
  63. package/dist/cli/wt/list.d.ts.map +1 -0
  64. package/dist/cli/wt/list.js +65 -0
  65. package/dist/cli/wt/list.js.map +1 -0
  66. package/dist/cli/wt/new.d.ts +24 -0
  67. package/dist/cli/wt/new.d.ts.map +1 -0
  68. package/dist/cli/wt/new.js +130 -0
  69. package/dist/cli/wt/new.js.map +1 -0
  70. package/dist/cli/wt/run-command.d.ts +31 -0
  71. package/dist/cli/wt/run-command.d.ts.map +1 -0
  72. package/dist/cli/wt/run-command.js +49 -0
  73. package/dist/cli/wt/run-command.js.map +1 -0
  74. package/dist/cli/wt/run-command.test.d.ts +5 -0
  75. package/dist/cli/wt/run-command.test.d.ts.map +1 -0
  76. package/dist/cli/wt/run-command.test.js +88 -0
  77. package/dist/cli/wt/run-command.test.js.map +1 -0
  78. package/dist/cli/wt/state.d.ts +13 -0
  79. package/dist/cli/wt/state.d.ts.map +1 -0
  80. package/dist/cli/wt/state.js +38 -0
  81. package/dist/cli/wt/state.js.map +1 -0
  82. package/dist/cli/wt/wt.test.d.ts +8 -0
  83. package/dist/cli/wt/wt.test.d.ts.map +1 -0
  84. package/dist/cli/wt/wt.test.js +521 -0
  85. package/dist/cli/wt/wt.test.js.map +1 -0
  86. package/dist/cli/wt.d.ts +26 -0
  87. package/dist/cli/wt.d.ts.map +1 -0
  88. package/dist/cli/wt.js +169 -0
  89. package/dist/cli/wt.js.map +1 -0
  90. package/dist/cli/wt.unit.test.d.ts +7 -0
  91. package/dist/cli/wt.unit.test.d.ts.map +1 -0
  92. package/dist/cli/wt.unit.test.js +182 -0
  93. package/dist/cli/wt.unit.test.js.map +1 -0
  94. package/dist/cli/wtconfig.js +22 -8
  95. package/dist/cli/wtconfig.js.map +1 -1
  96. package/dist/cli/wtconfig.test.js +18 -16
  97. package/dist/cli/wtconfig.test.js.map +1 -1
  98. package/dist/cli/wtlink.js +66 -9
  99. package/dist/cli/wtlink.js.map +1 -1
  100. package/dist/cli/wtlink.test.js +101 -0
  101. package/dist/cli/wtlink.test.js.map +1 -1
  102. package/dist/e2e/cli.e2e.test.js +97 -1
  103. package/dist/e2e/cli.e2e.test.js.map +1 -1
  104. package/dist/e2e/lswt/lswt.e2e.test.js +33 -0
  105. package/dist/e2e/lswt/lswt.e2e.test.js.map +1 -1
  106. package/dist/e2e/newpr/scenarios.e2e.test.js +7 -7
  107. package/dist/e2e/newpr/scenarios.e2e.test.js.map +1 -1
  108. package/dist/e2e/wt/wt.e2e.test.d.ts +9 -0
  109. package/dist/e2e/wt/wt.e2e.test.d.ts.map +1 -0
  110. package/dist/e2e/wt/wt.e2e.test.js +384 -0
  111. package/dist/e2e/wt/wt.e2e.test.js.map +1 -0
  112. package/dist/e2e/wtlink/wtlink.e2e.test.js +52 -0
  113. package/dist/e2e/wtlink/wtlink.e2e.test.js.map +1 -1
  114. package/dist/lib/ai/base-provider.d.ts +22 -0
  115. package/dist/lib/ai/base-provider.d.ts.map +1 -1
  116. package/dist/lib/ai/base-provider.js +180 -99
  117. package/dist/lib/ai/base-provider.js.map +1 -1
  118. package/dist/lib/ai/base-provider.test.js +13 -14
  119. package/dist/lib/ai/base-provider.test.js.map +1 -1
  120. package/dist/lib/ai/cli-provider.d.ts +11 -7
  121. package/dist/lib/ai/cli-provider.d.ts.map +1 -1
  122. package/dist/lib/ai/cli-provider.js +19 -49
  123. package/dist/lib/ai/cli-provider.js.map +1 -1
  124. package/dist/lib/ai/cli-provider.test.js +47 -49
  125. package/dist/lib/ai/cli-provider.test.js.map +1 -1
  126. package/dist/lib/ai/index.d.ts +2 -1
  127. package/dist/lib/ai/index.d.ts.map +1 -1
  128. package/dist/lib/ai/index.js +2 -0
  129. package/dist/lib/ai/index.js.map +1 -1
  130. package/dist/lib/ai/provider-manager.js +2 -2
  131. package/dist/lib/ai/provider-manager.js.map +1 -1
  132. package/dist/lib/ai/repo-docs.d.ts +43 -0
  133. package/dist/lib/ai/repo-docs.d.ts.map +1 -0
  134. package/dist/lib/ai/repo-docs.js +274 -0
  135. package/dist/lib/ai/repo-docs.js.map +1 -0
  136. package/dist/lib/ai/repo-docs.test.d.ts +5 -0
  137. package/dist/lib/ai/repo-docs.test.d.ts.map +1 -0
  138. package/dist/lib/ai/repo-docs.test.js +357 -0
  139. package/dist/lib/ai/repo-docs.test.js.map +1 -0
  140. package/dist/lib/ai/types.d.ts +18 -2
  141. package/dist/lib/ai/types.d.ts.map +1 -1
  142. package/dist/lib/ai/types.js.map +1 -1
  143. package/dist/lib/config-editor.d.ts +21 -0
  144. package/dist/lib/config-editor.d.ts.map +1 -0
  145. package/dist/lib/config-editor.js +729 -0
  146. package/dist/lib/config-editor.js.map +1 -0
  147. package/dist/lib/config-editor.test.d.ts +11 -0
  148. package/dist/lib/config-editor.test.d.ts.map +1 -0
  149. package/dist/lib/config-editor.test.js +526 -0
  150. package/dist/lib/config-editor.test.js.map +1 -0
  151. package/dist/lib/config-validation.d.ts +28 -0
  152. package/dist/lib/config-validation.d.ts.map +1 -0
  153. package/dist/lib/config-validation.js +534 -0
  154. package/dist/lib/config-validation.js.map +1 -0
  155. package/dist/lib/config-validation.test.d.ts +5 -0
  156. package/dist/lib/config-validation.test.d.ts.map +1 -0
  157. package/dist/lib/config-validation.test.js +398 -0
  158. package/dist/lib/config-validation.test.js.map +1 -0
  159. package/dist/lib/config.d.ts +115 -6
  160. package/dist/lib/config.d.ts.map +1 -1
  161. package/dist/lib/config.js +251 -55
  162. package/dist/lib/config.js.map +1 -1
  163. package/dist/lib/config.test.js +2 -1
  164. package/dist/lib/config.test.js.map +1 -1
  165. package/dist/lib/constants.d.ts +50 -1
  166. package/dist/lib/constants.d.ts.map +1 -1
  167. package/dist/lib/constants.js +67 -1
  168. package/dist/lib/constants.js.map +1 -1
  169. package/dist/lib/constants.test.d.ts +5 -0
  170. package/dist/lib/constants.test.d.ts.map +1 -0
  171. package/dist/lib/constants.test.js +121 -0
  172. package/dist/lib/constants.test.js.map +1 -0
  173. package/dist/lib/git.d.ts +12 -0
  174. package/dist/lib/git.d.ts.map +1 -1
  175. package/dist/lib/git.js +26 -0
  176. package/dist/lib/git.js.map +1 -1
  177. package/dist/lib/global-check.d.ts +38 -0
  178. package/dist/lib/global-check.d.ts.map +1 -0
  179. package/dist/lib/global-check.js +135 -0
  180. package/dist/lib/global-check.js.map +1 -0
  181. package/dist/lib/global-check.test.d.ts +5 -0
  182. package/dist/lib/global-check.test.d.ts.map +1 -0
  183. package/dist/lib/global-check.test.js +153 -0
  184. package/dist/lib/global-check.test.js.map +1 -0
  185. package/dist/lib/global-config.d.ts +102 -0
  186. package/dist/lib/global-config.d.ts.map +1 -0
  187. package/dist/lib/global-config.js +234 -0
  188. package/dist/lib/global-config.js.map +1 -0
  189. package/dist/lib/global-config.test.d.ts +5 -0
  190. package/dist/lib/global-config.test.d.ts.map +1 -0
  191. package/dist/lib/global-config.test.js +282 -0
  192. package/dist/lib/global-config.test.js.map +1 -0
  193. package/dist/lib/json-output.d.ts +11 -1
  194. package/dist/lib/json-output.d.ts.map +1 -1
  195. package/dist/lib/json-output.js +42 -1
  196. package/dist/lib/json-output.js.map +1 -1
  197. package/dist/lib/json-output.test.js +2 -0
  198. package/dist/lib/json-output.test.js.map +1 -1
  199. package/dist/lib/logger.d.ts +175 -0
  200. package/dist/lib/logger.d.ts.map +1 -0
  201. package/dist/lib/logger.js +475 -0
  202. package/dist/lib/logger.js.map +1 -0
  203. package/dist/lib/logger.test.d.ts +5 -0
  204. package/dist/lib/logger.test.d.ts.map +1 -0
  205. package/dist/lib/logger.test.js +292 -0
  206. package/dist/lib/logger.test.js.map +1 -0
  207. package/dist/lib/lswt/action-executors.test.js +2 -0
  208. package/dist/lib/lswt/action-executors.test.js.map +1 -1
  209. package/dist/lib/lswt/formatters.d.ts +1 -0
  210. package/dist/lib/lswt/formatters.d.ts.map +1 -1
  211. package/dist/lib/lswt/formatters.js +6 -1
  212. package/dist/lib/lswt/formatters.js.map +1 -1
  213. package/dist/lib/lswt/formatters.test.js +2 -2
  214. package/dist/lib/lswt/formatters.test.js.map +1 -1
  215. package/dist/lib/lswt/fuzzy-search.d.ts +27 -0
  216. package/dist/lib/lswt/fuzzy-search.d.ts.map +1 -0
  217. package/dist/lib/lswt/fuzzy-search.js +130 -0
  218. package/dist/lib/lswt/fuzzy-search.js.map +1 -0
  219. package/dist/lib/lswt/fuzzy-search.test.d.ts +5 -0
  220. package/dist/lib/lswt/fuzzy-search.test.d.ts.map +1 -0
  221. package/dist/lib/lswt/fuzzy-search.test.js +207 -0
  222. package/dist/lib/lswt/fuzzy-search.test.js.map +1 -0
  223. package/dist/lib/lswt/index.d.ts +1 -0
  224. package/dist/lib/lswt/index.d.ts.map +1 -1
  225. package/dist/lib/lswt/index.js +2 -0
  226. package/dist/lib/lswt/index.js.map +1 -1
  227. package/dist/lib/lswt/interactive.d.ts +8 -0
  228. package/dist/lib/lswt/interactive.d.ts.map +1 -1
  229. package/dist/lib/lswt/interactive.js +169 -20
  230. package/dist/lib/lswt/interactive.js.map +1 -1
  231. package/dist/lib/newpr/action-deps.test.d.ts +5 -0
  232. package/dist/lib/newpr/action-deps.test.d.ts.map +1 -0
  233. package/dist/lib/newpr/action-deps.test.js +111 -0
  234. package/dist/lib/newpr/action-deps.test.js.map +1 -0
  235. package/dist/lib/newpr/args.d.ts.map +1 -1
  236. package/dist/lib/newpr/args.js +15 -4
  237. package/dist/lib/newpr/args.js.map +1 -1
  238. package/dist/lib/newpr/args.test.js +210 -2
  239. package/dist/lib/newpr/args.test.js.map +1 -1
  240. package/dist/lib/newpr/types.d.ts +2 -0
  241. package/dist/lib/newpr/types.d.ts.map +1 -1
  242. package/dist/lib/prompts.d.ts +10 -0
  243. package/dist/lib/prompts.d.ts.map +1 -1
  244. package/dist/lib/prompts.js +200 -1
  245. package/dist/lib/prompts.js.map +1 -1
  246. package/dist/lib/prompts.test.js +351 -1
  247. package/dist/lib/prompts.test.js.map +1 -1
  248. package/dist/lib/schema.test.d.ts +10 -0
  249. package/dist/lib/schema.test.d.ts.map +1 -0
  250. package/dist/lib/schema.test.js +309 -0
  251. package/dist/lib/schema.test.js.map +1 -0
  252. package/dist/lib/wtconfig/environment.d.ts.map +1 -1
  253. package/dist/lib/wtconfig/environment.js +6 -4
  254. package/dist/lib/wtconfig/environment.js.map +1 -1
  255. package/dist/lib/wtconfig/environment.test.js +2 -7
  256. package/dist/lib/wtconfig/environment.test.js.map +1 -1
  257. package/dist/lib/wtconfig/types.d.ts +3 -1
  258. package/dist/lib/wtconfig/types.d.ts.map +1 -1
  259. package/dist/lib/wtlink/link-configs.test.js +282 -2
  260. package/dist/lib/wtlink/link-configs.test.js.map +1 -1
  261. package/dist/lib/wtlink/main-menu.js +1 -0
  262. package/dist/lib/wtlink/main-menu.js.map +1 -1
  263. package/dist/lib/wtlink/main-menu.test.d.ts +5 -0
  264. package/dist/lib/wtlink/main-menu.test.d.ts.map +1 -0
  265. package/dist/lib/wtlink/main-menu.test.js +124 -0
  266. package/dist/lib/wtlink/main-menu.test.js.map +1 -0
  267. package/dist/lib/wtlink/manage-manifest.d.ts +5 -0
  268. package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -1
  269. package/dist/lib/wtlink/manage-manifest.js +65 -2
  270. package/dist/lib/wtlink/manage-manifest.js.map +1 -1
  271. package/dist/lib/wtlink/manage-manifest.test.js +282 -2
  272. package/dist/lib/wtlink/manage-manifest.test.js.map +1 -1
  273. package/package.json +3 -1
  274. package/schemas/worktreerc.schema.json +416 -0
@@ -0,0 +1,432 @@
1
+ /**
2
+ * Unit tests for wt init command functions
3
+ */
4
+ import { describe, it, expect, beforeEach, afterEach, vi, } from 'vitest';
5
+ // Helper to create valid yargs argv for tests
6
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
7
+ function createArgv(args) {
8
+ return {
9
+ _: [],
10
+ $0: 'wt',
11
+ ...args,
12
+ };
13
+ }
14
+ // Mock dependencies before importing the module
15
+ vi.mock('../../lib/git.js', () => ({
16
+ getRepoRoot: vi.fn(),
17
+ }));
18
+ vi.mock('../../lib/colors.js', () => ({
19
+ error: vi.fn((s) => s),
20
+ dim: vi.fn((s) => s),
21
+ success: vi.fn((s) => s),
22
+ info: vi.fn((s) => s),
23
+ bold: vi.fn((s) => s),
24
+ warning: vi.fn((s) => s),
25
+ }));
26
+ vi.mock('../../lib/global-config.js', () => ({
27
+ initializeLocalConfig: vi.fn(() => ({
28
+ configPath: '/repo/.worktreerc.local',
29
+ gitignoreUpdated: true,
30
+ })),
31
+ saveGlobalConfig: vi.fn(),
32
+ getConfigSummary: vi.fn(() => ({
33
+ global: false,
34
+ repo: false,
35
+ local: false,
36
+ paths: {
37
+ global: {
38
+ path: '/home/user/.config/git-worktree-tools/config.json',
39
+ level: 'global',
40
+ exists: false,
41
+ },
42
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
43
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: false },
44
+ },
45
+ })),
46
+ ensureLocalConfigInGitignore: vi.fn(() => true),
47
+ getGlobalConfigPath: vi.fn(() => '/home/user/.config/git-worktree-tools/config.json'),
48
+ }));
49
+ vi.mock('../../lib/prompts.js', () => ({
50
+ promptChoice: vi.fn(() => 'cancel'),
51
+ promptConfirm: vi.fn(() => false),
52
+ promptInput: vi.fn(() => 'main'),
53
+ }));
54
+ import { initCommand } from './init.js';
55
+ import * as git from '../../lib/git.js';
56
+ import * as globalConfig from '../../lib/global-config.js';
57
+ import * as prompts from '../../lib/prompts.js';
58
+ describe('wt init command', () => {
59
+ // Using 'any' for spies since vitest's MockInstance typing is complex for these methods
60
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
+ let consoleLogSpy;
62
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
63
+ let consoleErrorSpy;
64
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
65
+ let processExitSpy;
66
+ beforeEach(() => {
67
+ vi.clearAllMocks();
68
+ consoleLogSpy = vi.spyOn(console, 'log').mockImplementation(() => { });
69
+ consoleErrorSpy = vi.spyOn(console, 'error').mockImplementation(() => { });
70
+ processExitSpy = vi.spyOn(process, 'exit').mockImplementation((() => { }));
71
+ });
72
+ afterEach(() => {
73
+ consoleLogSpy.mockRestore();
74
+ consoleErrorSpy.mockRestore();
75
+ processExitSpy.mockRestore();
76
+ });
77
+ describe('command structure', () => {
78
+ it('has correct command name', () => {
79
+ expect(initCommand.command).toBe('init');
80
+ });
81
+ it('has description', () => {
82
+ expect(initCommand.describe).toBeDefined();
83
+ expect(initCommand.describe).toContain('Initialize');
84
+ });
85
+ it('has handler function', () => {
86
+ expect(typeof initCommand.handler).toBe('function');
87
+ });
88
+ it('builder configures options', () => {
89
+ const mockYargs = {
90
+ option: vi.fn().mockReturnThis(),
91
+ example: vi.fn().mockReturnThis(),
92
+ };
93
+ if (typeof initCommand.builder === 'function') {
94
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
95
+ initCommand.builder(mockYargs);
96
+ }
97
+ expect(mockYargs.option).toHaveBeenCalledWith('local', expect.any(Object));
98
+ expect(mockYargs.option).toHaveBeenCalledWith('global', expect.any(Object));
99
+ expect(mockYargs.option).toHaveBeenCalledWith('force', expect.any(Object));
100
+ });
101
+ });
102
+ describe('handler - --local flag', () => {
103
+ it('creates local config when in git repo', async () => {
104
+ git.getRepoRoot.mockReturnValue('/repo');
105
+ prompts.promptConfirm.mockResolvedValue(false);
106
+ await initCommand.handler(createArgv({ local: true, global: false, force: false }));
107
+ expect(globalConfig.initializeLocalConfig).toHaveBeenCalledWith('/repo', expect.any(Object));
108
+ });
109
+ it('includes logging config when user confirms', async () => {
110
+ git.getRepoRoot.mockReturnValue('/repo');
111
+ prompts.promptConfirm.mockResolvedValue(true);
112
+ prompts.promptChoice.mockResolvedValue('debug');
113
+ await initCommand.handler(createArgv({ local: true, global: false, force: false }));
114
+ expect(globalConfig.initializeLocalConfig).toHaveBeenCalledWith('/repo', expect.objectContaining({
115
+ logging: { level: 'debug' },
116
+ }));
117
+ });
118
+ it('exits with error when not in git repo', async () => {
119
+ git.getRepoRoot.mockImplementation(() => {
120
+ throw new Error('Not a git repo');
121
+ });
122
+ await initCommand.handler(createArgv({ local: true, global: false, force: false }));
123
+ expect(consoleErrorSpy).toHaveBeenCalledWith('Not in a git repository.');
124
+ expect(processExitSpy).toHaveBeenCalledWith(1);
125
+ });
126
+ it('warns when local config already exists without --force', async () => {
127
+ git.getRepoRoot.mockReturnValue('/repo');
128
+ globalConfig.getConfigSummary.mockReturnValue({
129
+ global: false,
130
+ repo: false,
131
+ local: true,
132
+ paths: {
133
+ global: {
134
+ path: '/home/user/.config/git-worktree-tools/config.json',
135
+ level: 'global',
136
+ exists: false,
137
+ },
138
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
139
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: true },
140
+ },
141
+ });
142
+ await initCommand.handler(createArgv({ local: true, global: false, force: false }));
143
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('already exists'));
144
+ expect(globalConfig.initializeLocalConfig).not.toHaveBeenCalled();
145
+ });
146
+ it('overwrites when --force is provided', async () => {
147
+ git.getRepoRoot.mockReturnValue('/repo');
148
+ globalConfig.getConfigSummary.mockReturnValue({
149
+ global: false,
150
+ repo: false,
151
+ local: true,
152
+ paths: {
153
+ global: {
154
+ path: '/home/user/.config/git-worktree-tools/config.json',
155
+ level: 'global',
156
+ exists: false,
157
+ },
158
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
159
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: true },
160
+ },
161
+ });
162
+ prompts.promptConfirm.mockResolvedValue(false);
163
+ await initCommand.handler(createArgv({ local: true, global: false, force: true }));
164
+ expect(globalConfig.initializeLocalConfig).toHaveBeenCalled();
165
+ });
166
+ it('shows success message after creation', async () => {
167
+ git.getRepoRoot.mockReturnValue('/repo');
168
+ prompts.promptConfirm.mockResolvedValue(false);
169
+ // Ensure config summary shows no local config exists
170
+ globalConfig.getConfigSummary.mockReturnValue({
171
+ global: false,
172
+ repo: false,
173
+ local: false,
174
+ paths: {
175
+ global: {
176
+ path: '/home/user/.config/git-worktree-tools/config.json',
177
+ level: 'global',
178
+ exists: false,
179
+ },
180
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
181
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: false },
182
+ },
183
+ });
184
+ await initCommand.handler(createArgv({ local: true, global: false, force: false }));
185
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Created local config'));
186
+ });
187
+ it('shows gitignore update message when updated', async () => {
188
+ git.getRepoRoot.mockReturnValue('/repo');
189
+ prompts.promptConfirm.mockResolvedValue(false);
190
+ // Ensure config summary shows no local config exists
191
+ globalConfig.getConfigSummary.mockReturnValue({
192
+ global: false,
193
+ repo: false,
194
+ local: false,
195
+ paths: {
196
+ global: {
197
+ path: '/home/user/.config/git-worktree-tools/config.json',
198
+ level: 'global',
199
+ exists: false,
200
+ },
201
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
202
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: false },
203
+ },
204
+ });
205
+ globalConfig.initializeLocalConfig.mockReturnValue({
206
+ configPath: '/repo/.worktreerc.local',
207
+ gitignoreUpdated: true,
208
+ });
209
+ await initCommand.handler(createArgv({ local: true, global: false, force: false }));
210
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('gitignore'));
211
+ });
212
+ });
213
+ describe('handler - --global flag', () => {
214
+ it('creates global config', async () => {
215
+ git.getRepoRoot.mockReturnValue('/repo');
216
+ prompts.promptConfirm.mockResolvedValue(true);
217
+ prompts.promptInput.mockResolvedValue('main');
218
+ prompts.promptChoice.mockResolvedValue('vscode');
219
+ await initCommand.handler(createArgv({ local: false, global: true, force: false }));
220
+ expect(globalConfig.saveGlobalConfig).toHaveBeenCalled();
221
+ });
222
+ it('warns when global config already exists without --force', async () => {
223
+ git.getRepoRoot.mockReturnValue('/repo');
224
+ globalConfig.getConfigSummary.mockReturnValue({
225
+ global: true,
226
+ repo: false,
227
+ local: false,
228
+ paths: {
229
+ global: {
230
+ path: '/home/user/.config/git-worktree-tools/config.json',
231
+ level: 'global',
232
+ exists: true,
233
+ },
234
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
235
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: false },
236
+ },
237
+ });
238
+ await initCommand.handler(createArgv({ local: false, global: true, force: false }));
239
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('already exists'));
240
+ expect(globalConfig.saveGlobalConfig).not.toHaveBeenCalled();
241
+ });
242
+ it('includes warnNotGlobal setting based on prompt', async () => {
243
+ git.getRepoRoot.mockReturnValue('/repo');
244
+ // Ensure global config doesn't exist
245
+ globalConfig.getConfigSummary.mockReturnValue({
246
+ global: false,
247
+ repo: false,
248
+ local: false,
249
+ paths: {
250
+ global: {
251
+ path: '/home/user/.config/git-worktree-tools/config.json',
252
+ level: 'global',
253
+ exists: false,
254
+ },
255
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
256
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: false },
257
+ },
258
+ });
259
+ prompts.promptConfirm.mockResolvedValue(true);
260
+ prompts.promptInput.mockResolvedValue('main');
261
+ prompts.promptChoice.mockResolvedValue('vscode');
262
+ await initCommand.handler(createArgv({ local: false, global: true, force: false }));
263
+ expect(globalConfig.saveGlobalConfig).toHaveBeenCalledWith(expect.objectContaining({
264
+ global: { warnNotGlobal: true },
265
+ }));
266
+ });
267
+ it('includes preferredEditor when not vscode', async () => {
268
+ git.getRepoRoot.mockReturnValue('/repo');
269
+ // Ensure global config doesn't exist
270
+ globalConfig.getConfigSummary.mockReturnValue({
271
+ global: false,
272
+ repo: false,
273
+ local: false,
274
+ paths: {
275
+ global: {
276
+ path: '/home/user/.config/git-worktree-tools/config.json',
277
+ level: 'global',
278
+ exists: false,
279
+ },
280
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
281
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: false },
282
+ },
283
+ });
284
+ prompts.promptConfirm.mockResolvedValue(true);
285
+ prompts.promptInput.mockResolvedValue('main');
286
+ prompts.promptChoice.mockResolvedValue('cursor');
287
+ await initCommand.handler(createArgv({ local: false, global: true, force: false }));
288
+ expect(globalConfig.saveGlobalConfig).toHaveBeenCalledWith(expect.objectContaining({
289
+ preferredEditor: 'cursor',
290
+ }));
291
+ });
292
+ it('includes baseBranch when not main', async () => {
293
+ git.getRepoRoot.mockReturnValue('/repo');
294
+ // Ensure global config doesn't exist
295
+ globalConfig.getConfigSummary.mockReturnValue({
296
+ global: false,
297
+ repo: false,
298
+ local: false,
299
+ paths: {
300
+ global: {
301
+ path: '/home/user/.config/git-worktree-tools/config.json',
302
+ level: 'global',
303
+ exists: false,
304
+ },
305
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: false },
306
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: false },
307
+ },
308
+ });
309
+ prompts.promptConfirm.mockResolvedValue(true);
310
+ prompts.promptInput.mockResolvedValue('develop');
311
+ prompts.promptChoice.mockResolvedValue('vscode');
312
+ await initCommand.handler(createArgv({ local: false, global: true, force: false }));
313
+ expect(globalConfig.saveGlobalConfig).toHaveBeenCalledWith(expect.objectContaining({
314
+ baseBranch: 'develop',
315
+ }));
316
+ });
317
+ });
318
+ describe('handler - interactive mode (no flags)', () => {
319
+ it('shows interactive menu when no flags specified', async () => {
320
+ git.getRepoRoot.mockReturnValue('/repo');
321
+ prompts.promptChoice.mockResolvedValue('cancel');
322
+ await initCommand.handler(createArgv({ local: false, global: false, force: false }));
323
+ expect(prompts.promptChoice).toHaveBeenCalled();
324
+ });
325
+ it('handles global choice in interactive mode', async () => {
326
+ git.getRepoRoot.mockReturnValue('/repo');
327
+ prompts.promptChoice
328
+ .mockResolvedValueOnce('global')
329
+ .mockResolvedValueOnce('vscode');
330
+ prompts.promptConfirm.mockResolvedValue(true);
331
+ prompts.promptInput.mockResolvedValue('main');
332
+ await initCommand.handler(createArgv({ local: false, global: false, force: false }));
333
+ expect(globalConfig.saveGlobalConfig).toHaveBeenCalled();
334
+ });
335
+ it('handles local choice in interactive mode', async () => {
336
+ git.getRepoRoot.mockReturnValue('/repo');
337
+ prompts.promptChoice.mockResolvedValueOnce('local');
338
+ prompts.promptConfirm.mockResolvedValue(false);
339
+ await initCommand.handler(createArgv({ local: false, global: false, force: false }));
340
+ expect(globalConfig.initializeLocalConfig).toHaveBeenCalled();
341
+ });
342
+ it('handles gitignore choice in interactive mode', async () => {
343
+ git.getRepoRoot.mockReturnValue('/repo');
344
+ globalConfig.getConfigSummary.mockReturnValue({
345
+ global: false,
346
+ repo: false,
347
+ local: true,
348
+ paths: {
349
+ global: {
350
+ path: '/home/user/.config/git-worktree-tools/config.json',
351
+ level: 'global',
352
+ exists: false,
353
+ },
354
+ repo: null,
355
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: true },
356
+ },
357
+ });
358
+ prompts.promptChoice.mockResolvedValueOnce('gitignore');
359
+ await initCommand.handler(createArgv({ local: false, global: false, force: false }));
360
+ expect(globalConfig.ensureLocalConfigInGitignore).toHaveBeenCalledWith('/repo');
361
+ });
362
+ it('handles cancel choice in interactive mode', async () => {
363
+ git.getRepoRoot.mockReturnValue('/repo');
364
+ prompts.promptChoice.mockResolvedValue('cancel');
365
+ await initCommand.handler(createArgv({ local: false, global: false, force: false }));
366
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Cancelled'));
367
+ });
368
+ it('shows all set message when configs already exist', async () => {
369
+ git.getRepoRoot.mockReturnValue('/repo');
370
+ globalConfig.getConfigSummary.mockReturnValue({
371
+ global: true,
372
+ repo: true,
373
+ local: true,
374
+ paths: {
375
+ global: {
376
+ path: '/home/user/.config/git-worktree-tools/config.json',
377
+ level: 'global',
378
+ exists: true,
379
+ },
380
+ repo: { path: '/repo/.worktreerc', level: 'repo', exists: true },
381
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: true },
382
+ },
383
+ });
384
+ await initCommand.handler(createArgv({ local: false, global: false, force: false }));
385
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('already set up'));
386
+ });
387
+ it('shows status when not in git repo', async () => {
388
+ git.getRepoRoot.mockImplementation(() => {
389
+ throw new Error('Not a git repo');
390
+ });
391
+ globalConfig.getConfigSummary.mockReturnValue({
392
+ global: false,
393
+ repo: null,
394
+ local: null,
395
+ paths: {
396
+ global: {
397
+ path: '/home/user/.config/git-worktree-tools/config.json',
398
+ level: 'global',
399
+ exists: false,
400
+ },
401
+ repo: null,
402
+ local: null,
403
+ },
404
+ });
405
+ prompts.promptChoice.mockResolvedValue('cancel');
406
+ await initCommand.handler(createArgv({ local: false, global: false, force: false }));
407
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('Not in a git repository'));
408
+ });
409
+ it('shows gitignore no changes message when already up to date', async () => {
410
+ git.getRepoRoot.mockReturnValue('/repo');
411
+ globalConfig.getConfigSummary.mockReturnValue({
412
+ global: false,
413
+ repo: false,
414
+ local: true,
415
+ paths: {
416
+ global: {
417
+ path: '/home/user/.config/git-worktree-tools/config.json',
418
+ level: 'global',
419
+ exists: false,
420
+ },
421
+ repo: null,
422
+ local: { path: '/repo/.worktreerc.local', level: 'local', exists: true },
423
+ },
424
+ });
425
+ prompts.promptChoice.mockResolvedValueOnce('gitignore');
426
+ globalConfig.ensureLocalConfigInGitignore.mockReturnValue(false);
427
+ await initCommand.handler(createArgv({ local: false, global: false, force: false }));
428
+ expect(consoleLogSpy).toHaveBeenCalledWith(expect.stringContaining('No changes needed'));
429
+ });
430
+ });
431
+ });
432
+ //# sourceMappingURL=init.unit.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.unit.test.js","sourceRoot":"","sources":["../../../src/cli/wt/init.unit.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Interactive main menu for `wt` command
3
+ *
4
+ * Provides a complete TUI experience for all worktree operations.
5
+ * Each menu option gathers required inputs before executing.
6
+ */
7
+ /**
8
+ * Result from an interactive flow
9
+ */
10
+ export interface FlowResult {
11
+ /** Whether the flow completed (vs cancelled) */
12
+ completed: boolean;
13
+ /** Whether to return to main menu */
14
+ returnToMenu: boolean;
15
+ }
16
+ /**
17
+ * Display the interactive main menu
18
+ */
19
+ export declare function showMainMenu(): Promise<void>;
20
+ declare function handleListWorktrees(): Promise<FlowResult>;
21
+ declare function handleNewPR(): Promise<FlowResult>;
22
+ declare function handleNewPRFromDescription(): Promise<FlowResult>;
23
+ declare function handleNewPRFromExisting(): Promise<FlowResult>;
24
+ declare function handleNewPRFromBranch(): Promise<FlowResult>;
25
+ declare function handleCleanPRs(): Promise<FlowResult>;
26
+ declare function handleLinkConfig(): Promise<FlowResult>;
27
+ declare function handleShowState(): Promise<FlowResult>;
28
+ declare function handleConfigure(): Promise<FlowResult>;
29
+ export declare const flows: {
30
+ handleListWorktrees: typeof handleListWorktrees;
31
+ handleNewPR: typeof handleNewPR;
32
+ handleNewPRFromDescription: typeof handleNewPRFromDescription;
33
+ handleNewPRFromExisting: typeof handleNewPRFromExisting;
34
+ handleNewPRFromBranch: typeof handleNewPRFromBranch;
35
+ handleCleanPRs: typeof handleCleanPRs;
36
+ handleLinkConfig: typeof handleLinkConfig;
37
+ handleShowState: typeof handleShowState;
38
+ handleConfigure: typeof handleConfigure;
39
+ };
40
+ export {};
41
+ //# sourceMappingURL=interactive-menu.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"interactive-menu.d.ts","sourceRoot":"","sources":["../../../src/cli/wt/interactive-menu.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAcH;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,SAAS,EAAE,OAAO,CAAC;IACnB,qCAAqC;IACrC,YAAY,EAAE,OAAO,CAAC;CACvB;AAuED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC,CA8DlD;AAMD,iBAAe,mBAAmB,IAAI,OAAO,CAAC,UAAU,CAAC,CAIxD;AA+BD,iBAAe,WAAW,IAAI,OAAO,CAAC,UAAU,CAAC,CAiChD;AAED,iBAAe,0BAA0B,IAAI,OAAO,CAAC,UAAU,CAAC,CAqE/D;AAED,iBAAe,uBAAuB,IAAI,OAAO,CAAC,UAAU,CAAC,CAuD5D;AAED,iBAAe,qBAAqB,IAAI,OAAO,CAAC,UAAU,CAAC,CAiF1D;AA+BD,iBAAe,cAAc,IAAI,OAAO,CAAC,UAAU,CAAC,CA0DnD;AAyCD,iBAAe,gBAAgB,IAAI,OAAO,CAAC,UAAU,CAAC,CA6DrD;AAMD,iBAAe,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,CAIpD;AA+BD,iBAAe,eAAe,IAAI,OAAO,CAAC,UAAU,CAAC,CAsEpD;AAMD,eAAO,MAAM,KAAK;;;;;;;;;;CAUjB,CAAC"}