@camaradesuk/git-worktree-tools 1.7.0 → 1.8.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 (190) hide show
  1. package/README.md +69 -8
  2. package/dist/cli/cleanpr.js +11 -5
  3. package/dist/cli/cleanpr.js.map +1 -1
  4. package/dist/cli/cleanpr.test.js +10 -1
  5. package/dist/cli/cleanpr.test.js.map +1 -1
  6. package/dist/cli/newpr.js +100 -28
  7. package/dist/cli/newpr.js.map +1 -1
  8. package/dist/cli/newpr.test.js +24 -6
  9. package/dist/cli/newpr.test.js.map +1 -1
  10. package/dist/cli/prs.d.ts +22 -0
  11. package/dist/cli/prs.d.ts.map +1 -0
  12. package/dist/cli/prs.js +275 -0
  13. package/dist/cli/prs.js.map +1 -0
  14. package/dist/cli/prs.test.d.ts +8 -0
  15. package/dist/cli/prs.test.d.ts.map +1 -0
  16. package/dist/cli/prs.test.js +408 -0
  17. package/dist/cli/prs.test.js.map +1 -0
  18. package/dist/cli/wt/interactive-menu.d.ts +2 -0
  19. package/dist/cli/wt/interactive-menu.d.ts.map +1 -1
  20. package/dist/cli/wt/interactive-menu.js +17 -0
  21. package/dist/cli/wt/interactive-menu.js.map +1 -1
  22. package/dist/cli/wt/interactive-menu.test.js +25 -0
  23. package/dist/cli/wt/interactive-menu.test.js.map +1 -1
  24. package/dist/cli/wt/prs.d.ts +21 -0
  25. package/dist/cli/wt/prs.d.ts.map +1 -0
  26. package/dist/cli/wt/prs.js +251 -0
  27. package/dist/cli/wt/prs.js.map +1 -0
  28. package/dist/cli/wt/prs.test.d.ts +5 -0
  29. package/dist/cli/wt/prs.test.d.ts.map +1 -0
  30. package/dist/cli/wt/prs.test.js +410 -0
  31. package/dist/cli/wt/prs.test.js.map +1 -0
  32. package/dist/cli/wt.d.ts +1 -0
  33. package/dist/cli/wt.d.ts.map +1 -1
  34. package/dist/cli/wt.js +5 -0
  35. package/dist/cli/wt.js.map +1 -1
  36. package/dist/cli/wtconfig.test.js +3 -0
  37. package/dist/cli/wtconfig.test.js.map +1 -1
  38. package/dist/cli/wtlink.d.ts +2 -1
  39. package/dist/cli/wtlink.d.ts.map +1 -1
  40. package/dist/cli/wtlink.js +41 -2
  41. package/dist/cli/wtlink.js.map +1 -1
  42. package/dist/e2e/cli.e2e.test.js +6 -2
  43. package/dist/e2e/cli.e2e.test.js.map +1 -1
  44. package/dist/e2e/helpers/cli-runner.d.ts.map +1 -1
  45. package/dist/e2e/helpers/cli-runner.js +1 -0
  46. package/dist/e2e/helpers/cli-runner.js.map +1 -1
  47. package/dist/e2e/helpers/gh-mock.d.ts.map +1 -1
  48. package/dist/e2e/helpers/gh-mock.js +55 -1
  49. package/dist/e2e/helpers/gh-mock.js.map +1 -1
  50. package/dist/e2e/helpers/pty-wrapper.d.ts +15 -0
  51. package/dist/e2e/helpers/pty-wrapper.d.ts.map +1 -1
  52. package/dist/e2e/helpers/pty-wrapper.js +65 -0
  53. package/dist/e2e/helpers/pty-wrapper.js.map +1 -1
  54. package/dist/e2e/newpr-full-flow.e2e.test.js +1 -0
  55. package/dist/e2e/newpr-full-flow.e2e.test.js.map +1 -1
  56. package/dist/e2e/prs/prs.e2e.test.d.ts +7 -0
  57. package/dist/e2e/prs/prs.e2e.test.d.ts.map +1 -0
  58. package/dist/e2e/prs/prs.e2e.test.js +606 -0
  59. package/dist/e2e/prs/prs.e2e.test.js.map +1 -0
  60. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts +8 -0
  61. package/dist/e2e/wt/interactive-menu.e2e.test.d.ts.map +1 -0
  62. package/dist/e2e/wt/interactive-menu.e2e.test.js +583 -0
  63. package/dist/e2e/wt/interactive-menu.e2e.test.js.map +1 -0
  64. package/dist/e2e/wt/wt.e2e.test.js +217 -4
  65. package/dist/e2e/wt/wt.e2e.test.js.map +1 -1
  66. package/dist/integration/prs.integration.test.d.ts +8 -0
  67. package/dist/integration/prs.integration.test.d.ts.map +1 -0
  68. package/dist/integration/prs.integration.test.js +478 -0
  69. package/dist/integration/prs.integration.test.js.map +1 -0
  70. package/dist/lib/config-validation.d.ts.map +1 -1
  71. package/dist/lib/config-validation.js +56 -0
  72. package/dist/lib/config-validation.js.map +1 -1
  73. package/dist/lib/config.d.ts +34 -0
  74. package/dist/lib/config.d.ts.map +1 -1
  75. package/dist/lib/config.js +10 -0
  76. package/dist/lib/config.js.map +1 -1
  77. package/dist/lib/git.d.ts +32 -0
  78. package/dist/lib/git.d.ts.map +1 -1
  79. package/dist/lib/git.js +95 -1
  80. package/dist/lib/git.js.map +1 -1
  81. package/dist/lib/git.test.js +118 -1
  82. package/dist/lib/git.test.js.map +1 -1
  83. package/dist/lib/github.d.ts +41 -0
  84. package/dist/lib/github.d.ts.map +1 -1
  85. package/dist/lib/github.js +109 -0
  86. package/dist/lib/github.js.map +1 -1
  87. package/dist/lib/global-check.d.ts +2 -2
  88. package/dist/lib/global-check.js +3 -3
  89. package/dist/lib/global-check.js.map +1 -1
  90. package/dist/lib/global-check.test.js +3 -6
  91. package/dist/lib/global-check.test.js.map +1 -1
  92. package/dist/lib/json-output.d.ts +1 -0
  93. package/dist/lib/json-output.d.ts.map +1 -1
  94. package/dist/lib/json-output.js +2 -0
  95. package/dist/lib/json-output.js.map +1 -1
  96. package/dist/lib/lswt/action-executors.d.ts.map +1 -1
  97. package/dist/lib/lswt/action-executors.js +2 -1
  98. package/dist/lib/lswt/action-executors.js.map +1 -1
  99. package/dist/lib/lswt/action-executors.test.js +1 -0
  100. package/dist/lib/lswt/action-executors.test.js.map +1 -1
  101. package/dist/lib/lswt/actions.d.ts +1 -0
  102. package/dist/lib/lswt/actions.d.ts.map +1 -1
  103. package/dist/lib/lswt/actions.js +38 -10
  104. package/dist/lib/lswt/actions.js.map +1 -1
  105. package/dist/lib/lswt/actions.test.js +34 -22
  106. package/dist/lib/lswt/actions.test.js.map +1 -1
  107. package/dist/lib/lswt/interactive.js +8 -8
  108. package/dist/lib/lswt/interactive.js.map +1 -1
  109. package/dist/lib/prompts.d.ts.map +1 -1
  110. package/dist/lib/prompts.js +16 -12
  111. package/dist/lib/prompts.js.map +1 -1
  112. package/dist/lib/prs/actions.d.ts +70 -0
  113. package/dist/lib/prs/actions.d.ts.map +1 -0
  114. package/dist/lib/prs/actions.js +444 -0
  115. package/dist/lib/prs/actions.js.map +1 -0
  116. package/dist/lib/prs/actions.test.d.ts +5 -0
  117. package/dist/lib/prs/actions.test.d.ts.map +1 -0
  118. package/dist/lib/prs/actions.test.js +313 -0
  119. package/dist/lib/prs/actions.test.js.map +1 -0
  120. package/dist/lib/prs/data.d.ts +48 -0
  121. package/dist/lib/prs/data.d.ts.map +1 -0
  122. package/dist/lib/prs/data.js +171 -0
  123. package/dist/lib/prs/data.js.map +1 -0
  124. package/dist/lib/prs/data.test.d.ts +5 -0
  125. package/dist/lib/prs/data.test.d.ts.map +1 -0
  126. package/dist/lib/prs/data.test.js +417 -0
  127. package/dist/lib/prs/data.test.js.map +1 -0
  128. package/dist/lib/prs/details.d.ts +57 -0
  129. package/dist/lib/prs/details.d.ts.map +1 -0
  130. package/dist/lib/prs/details.js +246 -0
  131. package/dist/lib/prs/details.js.map +1 -0
  132. package/dist/lib/prs/details.test.d.ts +5 -0
  133. package/dist/lib/prs/details.test.d.ts.map +1 -0
  134. package/dist/lib/prs/details.test.js +325 -0
  135. package/dist/lib/prs/details.test.js.map +1 -0
  136. package/dist/lib/prs/filters.d.ts +56 -0
  137. package/dist/lib/prs/filters.d.ts.map +1 -0
  138. package/dist/lib/prs/filters.js +171 -0
  139. package/dist/lib/prs/filters.js.map +1 -0
  140. package/dist/lib/prs/filters.test.d.ts +5 -0
  141. package/dist/lib/prs/filters.test.d.ts.map +1 -0
  142. package/dist/lib/prs/filters.test.js +312 -0
  143. package/dist/lib/prs/filters.test.js.map +1 -0
  144. package/dist/lib/prs/formatters.d.ts +83 -0
  145. package/dist/lib/prs/formatters.d.ts.map +1 -0
  146. package/dist/lib/prs/formatters.js +389 -0
  147. package/dist/lib/prs/formatters.js.map +1 -0
  148. package/dist/lib/prs/formatters.test.d.ts +2 -0
  149. package/dist/lib/prs/formatters.test.d.ts.map +1 -0
  150. package/dist/lib/prs/formatters.test.js +387 -0
  151. package/dist/lib/prs/formatters.test.js.map +1 -0
  152. package/dist/lib/prs/interactive.d.ts +50 -0
  153. package/dist/lib/prs/interactive.d.ts.map +1 -0
  154. package/dist/lib/prs/interactive.js +453 -0
  155. package/dist/lib/prs/interactive.js.map +1 -0
  156. package/dist/lib/prs/interactive.test.d.ts +5 -0
  157. package/dist/lib/prs/interactive.test.d.ts.map +1 -0
  158. package/dist/lib/prs/interactive.test.js +364 -0
  159. package/dist/lib/prs/interactive.test.js.map +1 -0
  160. package/dist/lib/prs/types.d.ts +152 -0
  161. package/dist/lib/prs/types.d.ts.map +1 -0
  162. package/dist/lib/prs/types.js +17 -0
  163. package/dist/lib/prs/types.js.map +1 -0
  164. package/dist/lib/wtlink/config-manifest.d.ts +101 -0
  165. package/dist/lib/wtlink/config-manifest.d.ts.map +1 -0
  166. package/dist/lib/wtlink/config-manifest.js +219 -0
  167. package/dist/lib/wtlink/config-manifest.js.map +1 -0
  168. package/dist/lib/wtlink/config-manifest.test.d.ts +2 -0
  169. package/dist/lib/wtlink/config-manifest.test.d.ts.map +1 -0
  170. package/dist/lib/wtlink/config-manifest.test.js +460 -0
  171. package/dist/lib/wtlink/config-manifest.test.js.map +1 -0
  172. package/dist/lib/wtlink/link-configs.d.ts.map +1 -1
  173. package/dist/lib/wtlink/link-configs.js +36 -11
  174. package/dist/lib/wtlink/link-configs.js.map +1 -1
  175. package/dist/lib/wtlink/main-menu.d.ts.map +1 -1
  176. package/dist/lib/wtlink/main-menu.js +58 -50
  177. package/dist/lib/wtlink/main-menu.js.map +1 -1
  178. package/dist/lib/wtlink/main-menu.test.js +42 -40
  179. package/dist/lib/wtlink/main-menu.test.js.map +1 -1
  180. package/dist/lib/wtlink/manage-manifest.d.ts +9 -0
  181. package/dist/lib/wtlink/manage-manifest.d.ts.map +1 -1
  182. package/dist/lib/wtlink/manage-manifest.js +346 -25
  183. package/dist/lib/wtlink/manage-manifest.js.map +1 -1
  184. package/dist/lib/wtlink/manage-manifest.test.js +52 -1
  185. package/dist/lib/wtlink/manage-manifest.test.js.map +1 -1
  186. package/dist/lib/wtlink/validate-manifest.d.ts.map +1 -1
  187. package/dist/lib/wtlink/validate-manifest.js +27 -6
  188. package/dist/lib/wtlink/validate-manifest.js.map +1 -1
  189. package/package.json +1 -1
  190. package/schemas/worktreerc.schema.json +26 -1
@@ -0,0 +1,460 @@
1
+ import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
2
+ import fs from 'fs';
3
+ import path from 'path';
4
+ import os from 'os';
5
+ import { loadManifestData, saveManifestData, hasLegacyManifest, getLegacyManifestPath, hasConfigManifest, migrateLegacyManifest, getEnabledFiles, isManifestEmpty, } from './config-manifest.js';
6
+ // Mock dependencies
7
+ vi.mock('../config.js', () => ({
8
+ loadConfig: vi.fn(),
9
+ saveConfig: vi.fn(),
10
+ }));
11
+ vi.mock('../logger.js', () => ({
12
+ logger: {
13
+ debug: vi.fn(),
14
+ warn: vi.fn(),
15
+ info: vi.fn(),
16
+ error: vi.fn(),
17
+ },
18
+ }));
19
+ import { loadConfig, saveConfig } from '../config.js';
20
+ import { DEFAULT_MANIFEST_FILE } from '../constants.js';
21
+ const mockedLoadConfig = vi.mocked(loadConfig);
22
+ const mockedSaveConfig = vi.mocked(saveConfig);
23
+ describe('config-manifest', () => {
24
+ let tempDir;
25
+ beforeEach(() => {
26
+ tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'config-manifest-test-'));
27
+ vi.clearAllMocks();
28
+ });
29
+ afterEach(() => {
30
+ fs.rmSync(tempDir, { recursive: true, force: true });
31
+ });
32
+ describe('loadManifestData', () => {
33
+ it('should load from .worktreerc config when wtlink section has entries', () => {
34
+ mockedLoadConfig.mockReturnValue({
35
+ wtlink: {
36
+ enabled: ['.env.local', '.vscode/settings.json'],
37
+ disabled: ['.env.production'],
38
+ },
39
+ // Other required fields from Required<WorktreeConfig>
40
+ sharedRepos: [],
41
+ baseBranch: 'main',
42
+ draftPr: false,
43
+ worktreePattern: '{repo}.pr{number}',
44
+ worktreeParent: '..',
45
+ syncPatterns: [],
46
+ branchPrefix: 'feat',
47
+ previewLabel: 'preview',
48
+ preferredEditor: 'vscode',
49
+ ai: { provider: 'none' },
50
+ hooks: {},
51
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
52
+ plugins: [],
53
+ generators: {},
54
+ integrations: {},
55
+ logging: { level: 'info', timestamps: true },
56
+ global: { warnNotGlobal: true },
57
+ });
58
+ const result = loadManifestData(tempDir);
59
+ expect(result).toEqual({
60
+ enabled: ['.env.local', '.vscode/settings.json'],
61
+ disabled: ['.env.production'],
62
+ source: 'config',
63
+ });
64
+ });
65
+ it('should fall back to legacy .wtlinkrc file when config has no wtlink entries', () => {
66
+ mockedLoadConfig.mockReturnValue({
67
+ wtlink: { enabled: [], disabled: [] },
68
+ sharedRepos: [],
69
+ baseBranch: 'main',
70
+ draftPr: false,
71
+ worktreePattern: '{repo}.pr{number}',
72
+ worktreeParent: '..',
73
+ syncPatterns: [],
74
+ branchPrefix: 'feat',
75
+ previewLabel: 'preview',
76
+ preferredEditor: 'vscode',
77
+ ai: { provider: 'none' },
78
+ hooks: {},
79
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
80
+ plugins: [],
81
+ generators: {},
82
+ integrations: {},
83
+ logging: { level: 'info', timestamps: true },
84
+ global: { warnNotGlobal: true },
85
+ });
86
+ // Create legacy manifest file
87
+ const legacyPath = path.join(tempDir, DEFAULT_MANIFEST_FILE);
88
+ fs.writeFileSync(legacyPath, `.env.local
89
+ .vscode/settings.json
90
+ # .env.production
91
+ `);
92
+ const result = loadManifestData(tempDir);
93
+ expect(result).toEqual({
94
+ enabled: ['.env.local', '.vscode/settings.json'],
95
+ disabled: ['.env.production'],
96
+ source: 'legacy-file',
97
+ });
98
+ });
99
+ it('should return empty manifest when neither config nor legacy file exists', () => {
100
+ mockedLoadConfig.mockReturnValue({
101
+ wtlink: { enabled: [], disabled: [] },
102
+ sharedRepos: [],
103
+ baseBranch: 'main',
104
+ draftPr: false,
105
+ worktreePattern: '{repo}.pr{number}',
106
+ worktreeParent: '..',
107
+ syncPatterns: [],
108
+ branchPrefix: 'feat',
109
+ previewLabel: 'preview',
110
+ preferredEditor: 'vscode',
111
+ ai: { provider: 'none' },
112
+ hooks: {},
113
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
114
+ plugins: [],
115
+ generators: {},
116
+ integrations: {},
117
+ logging: { level: 'info', timestamps: true },
118
+ global: { warnNotGlobal: true },
119
+ });
120
+ const result = loadManifestData(tempDir);
121
+ expect(result).toEqual({
122
+ enabled: [],
123
+ disabled: [],
124
+ source: 'empty',
125
+ });
126
+ });
127
+ it('should prefer config over legacy file when both exist', () => {
128
+ mockedLoadConfig.mockReturnValue({
129
+ wtlink: {
130
+ enabled: ['from-config.json'],
131
+ disabled: [],
132
+ },
133
+ sharedRepos: [],
134
+ baseBranch: 'main',
135
+ draftPr: false,
136
+ worktreePattern: '{repo}.pr{number}',
137
+ worktreeParent: '..',
138
+ syncPatterns: [],
139
+ branchPrefix: 'feat',
140
+ previewLabel: 'preview',
141
+ preferredEditor: 'vscode',
142
+ ai: { provider: 'none' },
143
+ hooks: {},
144
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
145
+ plugins: [],
146
+ generators: {},
147
+ integrations: {},
148
+ logging: { level: 'info', timestamps: true },
149
+ global: { warnNotGlobal: true },
150
+ });
151
+ // Create legacy manifest file (should be ignored)
152
+ const legacyPath = path.join(tempDir, DEFAULT_MANIFEST_FILE);
153
+ fs.writeFileSync(legacyPath, 'from-legacy.json\n');
154
+ const result = loadManifestData(tempDir);
155
+ expect(result.source).toBe('config');
156
+ expect(result.enabled).toEqual(['from-config.json']);
157
+ });
158
+ });
159
+ describe('saveManifestData', () => {
160
+ it('should save manifest data to config via saveConfig', () => {
161
+ saveManifestData(tempDir, ['.env.local'], ['.env.production']);
162
+ expect(mockedSaveConfig).toHaveBeenCalledWith(tempDir, {
163
+ wtlink: {
164
+ enabled: ['.env.local'],
165
+ disabled: ['.env.production'],
166
+ },
167
+ }, { validate: false });
168
+ });
169
+ it('should save empty arrays when no files provided', () => {
170
+ saveManifestData(tempDir, [], []);
171
+ expect(mockedSaveConfig).toHaveBeenCalledWith(tempDir, {
172
+ wtlink: {
173
+ enabled: [],
174
+ disabled: [],
175
+ },
176
+ }, { validate: false });
177
+ });
178
+ });
179
+ describe('hasLegacyManifest', () => {
180
+ it('should return true when legacy file exists', () => {
181
+ const legacyPath = path.join(tempDir, DEFAULT_MANIFEST_FILE);
182
+ fs.writeFileSync(legacyPath, '.env.local\n');
183
+ expect(hasLegacyManifest(tempDir)).toBe(true);
184
+ });
185
+ it('should return false when legacy file does not exist', () => {
186
+ expect(hasLegacyManifest(tempDir)).toBe(false);
187
+ });
188
+ });
189
+ describe('getLegacyManifestPath', () => {
190
+ it('should return correct path to legacy manifest', () => {
191
+ const result = getLegacyManifestPath(tempDir);
192
+ expect(result).toBe(path.join(tempDir, DEFAULT_MANIFEST_FILE));
193
+ });
194
+ });
195
+ describe('hasConfigManifest', () => {
196
+ it('should return true when config has enabled entries', () => {
197
+ mockedLoadConfig.mockReturnValue({
198
+ wtlink: { enabled: ['.env'], disabled: [] },
199
+ sharedRepos: [],
200
+ baseBranch: 'main',
201
+ draftPr: false,
202
+ worktreePattern: '{repo}.pr{number}',
203
+ worktreeParent: '..',
204
+ syncPatterns: [],
205
+ branchPrefix: 'feat',
206
+ previewLabel: 'preview',
207
+ preferredEditor: 'vscode',
208
+ ai: { provider: 'none' },
209
+ hooks: {},
210
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
211
+ plugins: [],
212
+ generators: {},
213
+ integrations: {},
214
+ logging: { level: 'info', timestamps: true },
215
+ global: { warnNotGlobal: true },
216
+ });
217
+ expect(hasConfigManifest(tempDir)).toBe(true);
218
+ });
219
+ it('should return true when config has disabled entries', () => {
220
+ mockedLoadConfig.mockReturnValue({
221
+ wtlink: { enabled: [], disabled: ['.env'] },
222
+ sharedRepos: [],
223
+ baseBranch: 'main',
224
+ draftPr: false,
225
+ worktreePattern: '{repo}.pr{number}',
226
+ worktreeParent: '..',
227
+ syncPatterns: [],
228
+ branchPrefix: 'feat',
229
+ previewLabel: 'preview',
230
+ preferredEditor: 'vscode',
231
+ ai: { provider: 'none' },
232
+ hooks: {},
233
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
234
+ plugins: [],
235
+ generators: {},
236
+ integrations: {},
237
+ logging: { level: 'info', timestamps: true },
238
+ global: { warnNotGlobal: true },
239
+ });
240
+ expect(hasConfigManifest(tempDir)).toBe(true);
241
+ });
242
+ it('should return false when config has no entries', () => {
243
+ mockedLoadConfig.mockReturnValue({
244
+ wtlink: { enabled: [], disabled: [] },
245
+ sharedRepos: [],
246
+ baseBranch: 'main',
247
+ draftPr: false,
248
+ worktreePattern: '{repo}.pr{number}',
249
+ worktreeParent: '..',
250
+ syncPatterns: [],
251
+ branchPrefix: 'feat',
252
+ previewLabel: 'preview',
253
+ preferredEditor: 'vscode',
254
+ ai: { provider: 'none' },
255
+ hooks: {},
256
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
257
+ plugins: [],
258
+ generators: {},
259
+ integrations: {},
260
+ logging: { level: 'info', timestamps: true },
261
+ global: { warnNotGlobal: true },
262
+ });
263
+ expect(hasConfigManifest(tempDir)).toBe(false);
264
+ });
265
+ });
266
+ describe('migrateLegacyManifest', () => {
267
+ beforeEach(() => {
268
+ // Reset hasConfigManifest check
269
+ mockedLoadConfig.mockReturnValue({
270
+ wtlink: { enabled: [], disabled: [] },
271
+ sharedRepos: [],
272
+ baseBranch: 'main',
273
+ draftPr: false,
274
+ worktreePattern: '{repo}.pr{number}',
275
+ worktreeParent: '..',
276
+ syncPatterns: [],
277
+ branchPrefix: 'feat',
278
+ previewLabel: 'preview',
279
+ preferredEditor: 'vscode',
280
+ ai: { provider: 'none' },
281
+ hooks: {},
282
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
283
+ plugins: [],
284
+ generators: {},
285
+ integrations: {},
286
+ logging: { level: 'info', timestamps: true },
287
+ global: { warnNotGlobal: true },
288
+ });
289
+ });
290
+ it('should return not migrated when no legacy file exists', () => {
291
+ const result = migrateLegacyManifest(tempDir);
292
+ expect(result.migrated).toBe(false);
293
+ expect(result.message).toContain('No legacy');
294
+ });
295
+ it('should return not migrated when config already has manifest data', () => {
296
+ // Create legacy file
297
+ const legacyPath = path.join(tempDir, DEFAULT_MANIFEST_FILE);
298
+ fs.writeFileSync(legacyPath, '.env.local\n');
299
+ // Mock that config already has entries
300
+ mockedLoadConfig.mockReturnValue({
301
+ wtlink: { enabled: ['existing.json'], disabled: [] },
302
+ sharedRepos: [],
303
+ baseBranch: 'main',
304
+ draftPr: false,
305
+ worktreePattern: '{repo}.pr{number}',
306
+ worktreeParent: '..',
307
+ syncPatterns: [],
308
+ branchPrefix: 'feat',
309
+ previewLabel: 'preview',
310
+ preferredEditor: 'vscode',
311
+ ai: { provider: 'none' },
312
+ hooks: {},
313
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
314
+ plugins: [],
315
+ generators: {},
316
+ integrations: {},
317
+ logging: { level: 'info', timestamps: true },
318
+ global: { warnNotGlobal: true },
319
+ });
320
+ const result = migrateLegacyManifest(tempDir);
321
+ expect(result.migrated).toBe(false);
322
+ expect(result.message).toContain('already has wtlink section');
323
+ });
324
+ it('should perform dry run without making changes', () => {
325
+ const legacyPath = path.join(tempDir, DEFAULT_MANIFEST_FILE);
326
+ fs.writeFileSync(legacyPath, `.env.local
327
+ # .env.disabled
328
+ `);
329
+ const result = migrateLegacyManifest(tempDir, { dryRun: true });
330
+ expect(result.migrated).toBe(false);
331
+ expect(result.message).toContain('[DRY RUN]');
332
+ expect(result.enabledCount).toBe(1);
333
+ expect(result.disabledCount).toBe(1);
334
+ expect(mockedSaveConfig).not.toHaveBeenCalled();
335
+ });
336
+ it('should migrate legacy file and preserve it by default', () => {
337
+ const legacyPath = path.join(tempDir, DEFAULT_MANIFEST_FILE);
338
+ fs.writeFileSync(legacyPath, `.env.local
339
+ .vscode/settings.json
340
+ # .env.disabled
341
+ `);
342
+ const result = migrateLegacyManifest(tempDir);
343
+ expect(result.migrated).toBe(true);
344
+ expect(result.enabledCount).toBe(2);
345
+ expect(result.disabledCount).toBe(1);
346
+ expect(result.message).toContain('preserved');
347
+ expect(mockedSaveConfig).toHaveBeenCalled();
348
+ expect(fs.existsSync(legacyPath)).toBe(true); // Legacy file preserved
349
+ });
350
+ it('should migrate and delete legacy file when deleteLegacy is true', () => {
351
+ const legacyPath = path.join(tempDir, DEFAULT_MANIFEST_FILE);
352
+ fs.writeFileSync(legacyPath, '.env.local\n');
353
+ const result = migrateLegacyManifest(tempDir, { deleteLegacy: true });
354
+ expect(result.migrated).toBe(true);
355
+ expect(result.message).toContain('deleted');
356
+ expect(fs.existsSync(legacyPath)).toBe(false);
357
+ });
358
+ });
359
+ describe('getEnabledFiles', () => {
360
+ it('should return only enabled files from manifest', () => {
361
+ mockedLoadConfig.mockReturnValue({
362
+ wtlink: {
363
+ enabled: ['file1.json', 'file2.json'],
364
+ disabled: ['disabled.json'],
365
+ },
366
+ sharedRepos: [],
367
+ baseBranch: 'main',
368
+ draftPr: false,
369
+ worktreePattern: '{repo}.pr{number}',
370
+ worktreeParent: '..',
371
+ syncPatterns: [],
372
+ branchPrefix: 'feat',
373
+ previewLabel: 'preview',
374
+ preferredEditor: 'vscode',
375
+ ai: { provider: 'none' },
376
+ hooks: {},
377
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
378
+ plugins: [],
379
+ generators: {},
380
+ integrations: {},
381
+ logging: { level: 'info', timestamps: true },
382
+ global: { warnNotGlobal: true },
383
+ });
384
+ const result = getEnabledFiles(tempDir);
385
+ expect(result).toEqual(['file1.json', 'file2.json']);
386
+ });
387
+ });
388
+ describe('isManifestEmpty', () => {
389
+ it('should return true when manifest has no entries', () => {
390
+ mockedLoadConfig.mockReturnValue({
391
+ wtlink: { enabled: [], disabled: [] },
392
+ sharedRepos: [],
393
+ baseBranch: 'main',
394
+ draftPr: false,
395
+ worktreePattern: '{repo}.pr{number}',
396
+ worktreeParent: '..',
397
+ syncPatterns: [],
398
+ branchPrefix: 'feat',
399
+ previewLabel: 'preview',
400
+ preferredEditor: 'vscode',
401
+ ai: { provider: 'none' },
402
+ hooks: {},
403
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
404
+ plugins: [],
405
+ generators: {},
406
+ integrations: {},
407
+ logging: { level: 'info', timestamps: true },
408
+ global: { warnNotGlobal: true },
409
+ });
410
+ expect(isManifestEmpty(tempDir)).toBe(true);
411
+ });
412
+ it('should return false when manifest has enabled entries', () => {
413
+ mockedLoadConfig.mockReturnValue({
414
+ wtlink: { enabled: ['.env'], disabled: [] },
415
+ sharedRepos: [],
416
+ baseBranch: 'main',
417
+ draftPr: false,
418
+ worktreePattern: '{repo}.pr{number}',
419
+ worktreeParent: '..',
420
+ syncPatterns: [],
421
+ branchPrefix: 'feat',
422
+ previewLabel: 'preview',
423
+ preferredEditor: 'vscode',
424
+ ai: { provider: 'none' },
425
+ hooks: {},
426
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
427
+ plugins: [],
428
+ generators: {},
429
+ integrations: {},
430
+ logging: { level: 'info', timestamps: true },
431
+ global: { warnNotGlobal: true },
432
+ });
433
+ expect(isManifestEmpty(tempDir)).toBe(false);
434
+ });
435
+ it('should return false when manifest has disabled entries', () => {
436
+ mockedLoadConfig.mockReturnValue({
437
+ wtlink: { enabled: [], disabled: ['.env'] },
438
+ sharedRepos: [],
439
+ baseBranch: 'main',
440
+ draftPr: false,
441
+ worktreePattern: '{repo}.pr{number}',
442
+ worktreeParent: '..',
443
+ syncPatterns: [],
444
+ branchPrefix: 'feat',
445
+ previewLabel: 'preview',
446
+ preferredEditor: 'vscode',
447
+ ai: { provider: 'none' },
448
+ hooks: {},
449
+ hookDefaults: { timeout: 30000, maxTimeout: 60000 },
450
+ plugins: [],
451
+ generators: {},
452
+ integrations: {},
453
+ logging: { level: 'info', timestamps: true },
454
+ global: { warnNotGlobal: true },
455
+ });
456
+ expect(isManifestEmpty(tempDir)).toBe(false);
457
+ });
458
+ });
459
+ });
460
+ //# sourceMappingURL=config-manifest.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config-manifest.test.js","sourceRoot":"","sources":["../../../src/lib/wtlink/config-manifest.test.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"link-configs.d.ts","sourceRoot":"","sources":["../../../src/lib/wtlink/link-configs.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,gBAAgB,GAAG,UAAU,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CA0CxF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAkC9D;AA6CD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAarE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAG3D;AAqED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CA0B7E;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,cAAc,CA2BhB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CA8BlF;AA+ID,wBAAsB,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAyNvD"}
1
+ {"version":3,"file":"link-configs.d.ts","sourceRoot":"","sources":["../../../src/lib/wtlink/link-configs.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,QAAQ;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,MAAM,GAAG,UAAU,CAAC;IAC1B,GAAG,EAAE,OAAO,CAAC;CACd;AAED,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,gBAAgB,GAAG,UAAU,CAAC;AACpE,MAAM,MAAM,kBAAkB,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEjE,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,cAAc,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,UAAU,EAAE,CAAC;IACnB,aAAa,EAAE,UAAU,EAAE,CAAC;IAC5B,SAAS,EAAE,UAAU,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG;IAAE,MAAM,EAAE,MAAM,EAAE,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CA0CxF;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,aAAa,EAAE,CAkC9D;AA6CD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,YAAY,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAarE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,OAAO,CAG3D;AAqED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CA0B7E;AAED,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EAAE,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,GACd,cAAc,CA2BhB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,YAAY,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,IAAI,CA8BlF;AA+ID,wBAAsB,GAAG,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC,CAuPvD"}
@@ -3,7 +3,8 @@ import path from 'path';
3
3
  import inquirer from 'inquirer';
4
4
  import * as colors from '../colors.js';
5
5
  import * as git from '../git.js';
6
- import { COMMON_BASE_BRANCHES } from '../constants.js';
6
+ import { COMMON_BASE_BRANCHES, DEFAULT_MANIFEST_FILE } from '../constants.js';
7
+ import { loadManifestData, saveManifestData } from './config-manifest.js';
7
8
  /**
8
9
  * Parse manifest content into active and commented file entries
9
10
  */
@@ -363,8 +364,9 @@ export async function run(argv) {
363
364
  }
364
365
  const gitRoot = git.getRepoRoot(); // Current worktree root
365
366
  const mainWorktreeRoot = git.getMainWorktreeRoot(); // Main worktree root (for manifest location)
366
- const manifestFile = argv.manifestFile;
367
- const manifestPath = path.join(mainWorktreeRoot, manifestFile);
367
+ // Determine if using custom manifest file or config-based approach
368
+ const usingCustomManifest = argv.manifestFile !== DEFAULT_MANIFEST_FILE;
369
+ const manifestPath = path.join(mainWorktreeRoot, argv.manifestFile);
368
370
  const { sourceDir, destDir } = resolveWorktreePaths(argv, gitRoot);
369
371
  if (!fs.existsSync(sourceDir) || !fs.statSync(sourceDir).isDirectory()) {
370
372
  throw new Error(`Source directory does not exist or is not a directory: ${sourceDir}`);
@@ -378,14 +380,28 @@ export async function run(argv) {
378
380
  console.log(colors.yellow('\nOperation cancelled.'));
379
381
  return;
380
382
  }
381
- if (!fs.existsSync(manifestPath)) {
382
- throw new Error(`Manifest file not found at ${manifestPath}`);
383
+ // Load manifest data: use custom file if specified, otherwise use config-manifest adapter
384
+ let filesToLink;
385
+ let manifestData = null;
386
+ if (usingCustomManifest) {
387
+ // Legacy behavior for custom manifest files
388
+ if (!fs.existsSync(manifestPath)) {
389
+ throw new Error(`Manifest file not found at ${manifestPath}`);
390
+ }
391
+ filesToLink = fs
392
+ .readFileSync(manifestPath, 'utf-8')
393
+ .split('\n')
394
+ .map((line) => line.trim())
395
+ .filter((line) => line && !line.startsWith('#'));
396
+ }
397
+ else {
398
+ // Use config-manifest adapter (checks .worktreerc first, falls back to legacy .wtlinkrc)
399
+ manifestData = loadManifestData(mainWorktreeRoot);
400
+ filesToLink = manifestData.enabled;
401
+ if (manifestData.source === 'empty') {
402
+ throw new Error('No manifest found. Run `wtlink manage` to configure files to sync, or create a .worktreerc with a wtlink section.');
403
+ }
383
404
  }
384
- const filesToLink = fs
385
- .readFileSync(manifestPath, 'utf-8')
386
- .split('\n')
387
- .map((line) => line.trim())
388
- .filter((line) => line && !line.startsWith('#'));
389
405
  if (filesToLink.length === 0) {
390
406
  console.log(colors.yellow('Manifest is empty. Nothing to link.'));
391
407
  return;
@@ -470,7 +486,16 @@ export async function run(argv) {
470
486
  }
471
487
  // Update manifest if files were removed
472
488
  if (filesToRemoveFromManifest.length > 0) {
473
- updateManifest(manifestPath, filesToRemoveFromManifest);
489
+ if (usingCustomManifest) {
490
+ // Legacy behavior for custom manifest files
491
+ updateManifest(manifestPath, filesToRemoveFromManifest);
492
+ }
493
+ else if (manifestData) {
494
+ // Use config-manifest adapter to save updated manifest
495
+ const updatedEnabled = manifestData.enabled.filter((f) => !filesToRemoveFromManifest.includes(f));
496
+ const updatedDisabled = manifestData.disabled.filter((f) => !filesToRemoveFromManifest.includes(f));
497
+ saveManifestData(mainWorktreeRoot, updatedEnabled, updatedDisabled);
498
+ }
474
499
  console.log(colors.red(`Updated manifest: removed ${filesToRemoveFromManifest.length} files\n`));
475
500
  }
476
501
  let linkedCount = 0;