@context-forge/cli 0.8.5 → 0.9.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 (141) hide show
  1. package/dist/commands/arch.d.ts +7 -0
  2. package/dist/commands/arch.d.ts.map +1 -0
  3. package/dist/commands/arch.js +169 -0
  4. package/dist/commands/arch.js.map +1 -0
  5. package/dist/commands/backup.d.ts +3 -0
  6. package/dist/commands/backup.d.ts.map +1 -0
  7. package/dist/commands/backup.js +27 -0
  8. package/dist/commands/backup.js.map +1 -0
  9. package/dist/commands/build.d.ts +24 -0
  10. package/dist/commands/build.d.ts.map +1 -0
  11. package/dist/commands/build.js +146 -0
  12. package/dist/commands/build.js.map +1 -0
  13. package/dist/commands/check.d.ts +3 -0
  14. package/dist/commands/check.d.ts.map +1 -0
  15. package/dist/commands/check.js +250 -0
  16. package/dist/commands/check.js.map +1 -0
  17. package/dist/commands/commandInstaller.d.ts +28 -0
  18. package/dist/commands/commandInstaller.d.ts.map +1 -0
  19. package/dist/commands/commandInstaller.js +136 -0
  20. package/dist/commands/commandInstaller.js.map +1 -0
  21. package/dist/commands/config.d.ts +3 -0
  22. package/dist/commands/config.d.ts.map +1 -0
  23. package/dist/commands/config.js +116 -0
  24. package/dist/commands/config.js.map +1 -0
  25. package/dist/commands/future.d.ts +3 -0
  26. package/dist/commands/future.d.ts.map +1 -0
  27. package/dist/commands/future.js +96 -0
  28. package/dist/commands/future.js.map +1 -0
  29. package/dist/commands/guides.d.ts +9 -0
  30. package/dist/commands/guides.d.ts.map +1 -0
  31. package/dist/commands/guides.js +156 -0
  32. package/dist/commands/guides.js.map +1 -0
  33. package/dist/commands/init.d.ts +3 -0
  34. package/dist/commands/init.d.ts.map +1 -0
  35. package/dist/commands/init.js +124 -0
  36. package/dist/commands/init.js.map +1 -0
  37. package/dist/commands/list.d.ts +3 -0
  38. package/dist/commands/list.d.ts.map +1 -0
  39. package/dist/commands/list.js +97 -0
  40. package/dist/commands/list.js.map +1 -0
  41. package/dist/commands/next.d.ts +3 -0
  42. package/dist/commands/next.d.ts.map +1 -0
  43. package/dist/commands/next.js +52 -0
  44. package/dist/commands/next.js.map +1 -0
  45. package/dist/commands/plan.d.ts +7 -0
  46. package/dist/commands/plan.d.ts.map +1 -0
  47. package/dist/commands/plan.js +102 -0
  48. package/dist/commands/plan.js.map +1 -0
  49. package/dist/commands/project.d.ts +25 -0
  50. package/dist/commands/project.d.ts.map +1 -0
  51. package/dist/commands/project.js +550 -0
  52. package/dist/commands/project.js.map +1 -0
  53. package/dist/commands/prompt.d.ts +3 -0
  54. package/dist/commands/prompt.d.ts.map +1 -0
  55. package/dist/commands/prompt.js +112 -0
  56. package/dist/commands/prompt.js.map +1 -0
  57. package/dist/commands/setup-ide.d.ts +15 -0
  58. package/dist/commands/setup-ide.d.ts.map +1 -0
  59. package/dist/commands/setup-ide.js +250 -0
  60. package/dist/commands/setup-ide.js.map +1 -0
  61. package/dist/commands/slice.d.ts +7 -0
  62. package/dist/commands/slice.d.ts.map +1 -0
  63. package/dist/commands/slice.js +151 -0
  64. package/dist/commands/slice.js.map +1 -0
  65. package/dist/commands/status.d.ts +3 -0
  66. package/dist/commands/status.d.ts.map +1 -0
  67. package/dist/commands/status.js +210 -0
  68. package/dist/commands/status.js.map +1 -0
  69. package/dist/commands/task.d.ts +13 -0
  70. package/dist/commands/task.d.ts.map +1 -0
  71. package/dist/commands/task.js +207 -0
  72. package/dist/commands/task.js.map +1 -0
  73. package/dist/commands/update.d.ts +27 -0
  74. package/dist/commands/update.d.ts.map +1 -0
  75. package/dist/commands/update.js +172 -0
  76. package/dist/commands/update.js.map +1 -0
  77. package/dist/commands/workflow.d.ts +3 -0
  78. package/dist/commands/workflow.d.ts.map +1 -0
  79. package/dist/commands/workflow.js +204 -0
  80. package/dist/commands/workflow.js.map +1 -0
  81. package/dist/commands/worktree.d.ts +3 -0
  82. package/dist/commands/worktree.d.ts.map +1 -0
  83. package/dist/commands/worktree.js +371 -0
  84. package/dist/commands/worktree.js.map +1 -0
  85. package/dist/index.d.ts +3 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +167 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/options.d.ts +16 -0
  90. package/dist/options.d.ts.map +1 -0
  91. package/dist/options.js +29 -0
  92. package/dist/options.js.map +1 -0
  93. package/dist/output/entryStatusDisplay.d.ts +12 -0
  94. package/dist/output/entryStatusDisplay.d.ts.map +1 -0
  95. package/dist/output/entryStatusDisplay.js +24 -0
  96. package/dist/output/entryStatusDisplay.js.map +1 -0
  97. package/dist/output/formatter.d.ts +6 -0
  98. package/dist/output/formatter.d.ts.map +1 -0
  99. package/dist/output/formatter.js +9 -0
  100. package/dist/output/formatter.js.map +1 -0
  101. package/dist/output/styles.d.ts +15 -0
  102. package/dist/output/styles.d.ts.map +1 -0
  103. package/dist/output/styles.js +16 -0
  104. package/dist/output/styles.js.map +1 -0
  105. package/dist/output/tables.d.ts +6 -0
  106. package/dist/output/tables.d.ts.map +1 -0
  107. package/dist/output/tables.js +45 -0
  108. package/dist/output/tables.js.map +1 -0
  109. package/dist/utils/archIndex.d.ts +7 -0
  110. package/dist/utils/archIndex.d.ts.map +1 -0
  111. package/dist/utils/archIndex.js +14 -0
  112. package/dist/utils/archIndex.js.map +1 -0
  113. package/dist/utils/breaking-changes.d.ts +14 -0
  114. package/dist/utils/breaking-changes.d.ts.map +1 -0
  115. package/dist/utils/breaking-changes.js +11 -0
  116. package/dist/utils/breaking-changes.js.map +1 -0
  117. package/dist/utils/commandCatalog.d.ts +25 -0
  118. package/dist/utils/commandCatalog.d.ts.map +1 -0
  119. package/dist/utils/commandCatalog.js +32 -0
  120. package/dist/utils/commandCatalog.js.map +1 -0
  121. package/dist/utils/confirm.d.ts +3 -0
  122. package/dist/utils/confirm.d.ts.map +1 -0
  123. package/dist/utils/confirm.js +12 -0
  124. package/dist/utils/confirm.js.map +1 -0
  125. package/dist/utils/errors.d.ts +22 -0
  126. package/dist/utils/errors.d.ts.map +1 -0
  127. package/dist/utils/errors.js +63 -0
  128. package/dist/utils/errors.js.map +1 -0
  129. package/dist/utils/phaseShorthand.d.ts +23 -0
  130. package/dist/utils/phaseShorthand.d.ts.map +1 -0
  131. package/dist/utils/phaseShorthand.js +68 -0
  132. package/dist/utils/phaseShorthand.js.map +1 -0
  133. package/dist/utils/project.d.ts +60 -0
  134. package/dist/utils/project.d.ts.map +1 -0
  135. package/dist/utils/project.js +140 -0
  136. package/dist/utils/project.js.map +1 -0
  137. package/dist/utils/worktree-overlay.d.ts +31 -0
  138. package/dist/utils/worktree-overlay.d.ts.map +1 -0
  139. package/dist/utils/worktree-overlay.js +63 -0
  140. package/dist/utils/worktree-overlay.js.map +1 -0
  141. package/package.json +2 -2
@@ -0,0 +1,371 @@
1
+ import * as os from 'node:os';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { execFileSync } from 'node:child_process';
5
+ import { FileProjectStore, WorktreeService, GitWorktreeDiscovery, resolveFileByIndex, } from '@context-forge/core/node';
6
+ import { resolveProjectWorktree, findWorktreeByNameOrId } from '../utils/project.js';
7
+ import { withProjectOption, withYesOption, withJsonOption } from '../options.js';
8
+ import { handleError, UserError } from '../utils/errors.js';
9
+ import { askConfirmation } from '../utils/confirm.js';
10
+ import { printJson } from '../output/formatter.js';
11
+ import { renderTable } from '../output/tables.js';
12
+ import { success, dim, warn } from '../output/styles.js';
13
+ /** Shorten an absolute path by replacing the home directory with ~. */
14
+ function shortenPath(p) {
15
+ const home = os.homedir();
16
+ if (p === home)
17
+ return '~';
18
+ if (p.startsWith(home + '/'))
19
+ return '~' + p.slice(home.length);
20
+ return p;
21
+ }
22
+ /** Parse and validate a range string like "100-199" into [start, end]. */
23
+ function parseRange(rangeStr) {
24
+ if (!/^\d+-\d+$/.test(rangeStr)) {
25
+ throw new UserError(`Invalid range format. Use start-end, e.g. 100-199`);
26
+ }
27
+ const [startStr, endStr] = rangeStr.split('-');
28
+ const start = parseInt(startStr, 10);
29
+ const end = parseInt(endStr, 10);
30
+ if (start > end) {
31
+ throw new UserError(`Range start must be <= end, got ${start}-${end}`);
32
+ }
33
+ return [start, end];
34
+ }
35
+ export function registerWorktreeCommand(program) {
36
+ const worktree = program
37
+ .command('worktree')
38
+ .description('Manage worktree contexts for a project');
39
+ // ── cf worktree init ────────────────────────────────────────────────────────
40
+ const initCmd = worktree
41
+ .command('init')
42
+ .description('Register a new worktree context for the active project')
43
+ .requiredOption('--name <name>', 'Name for this worktree context')
44
+ .requiredOption('--range <start-end>', 'Slice index range, e.g. 100-199')
45
+ .option('--path <path>', 'Absolute path to the git worktree directory (default: CWD)')
46
+ .option('-o, --override', 'Allow overlapping index ranges (skip range chopping)');
47
+ withProjectOption(initCmd);
48
+ initCmd.action(async (opts) => {
49
+ try {
50
+ const indexRange = parseRange(opts.range);
51
+ const store = new FileProjectStore();
52
+ const resolved = await resolveProjectWorktree({ project: opts.project }, store);
53
+ const projectId = resolved.id;
54
+ const project = await store.getById(projectId);
55
+ if (!project) {
56
+ throw new UserError(`Project not found: '${projectId}'.`);
57
+ }
58
+ const worktreePath = opts.path ?? process.cwd();
59
+ // Validate path via git (warn if unavailable, hard-error if path not in list)
60
+ if (project.projectPath) {
61
+ const gitWorktrees = await new GitWorktreeDiscovery().listWorktrees(project.projectPath);
62
+ if (gitWorktrees.length === 0) {
63
+ console.error(warn(`Warning: could not verify path is a git worktree (git unavailable or not a git repo). Proceeding anyway.`));
64
+ }
65
+ else {
66
+ const known = gitWorktrees.map((wt) => wt.path);
67
+ const normalizedPath = worktreePath.endsWith('/') ? worktreePath.slice(0, -1) : worktreePath;
68
+ if (!known.includes(normalizedPath)) {
69
+ throw new UserError(`Path '${worktreePath}' is not a registered git worktree.\n` +
70
+ ` Run 'git worktree list' to see available worktrees.\n` +
71
+ ` Use 'git worktree add <path>' to create a new one first.`);
72
+ }
73
+ }
74
+ }
75
+ // Initialize submodules in the worktree (git worktree add doesn't do this)
76
+ try {
77
+ execFileSync('git', ['submodule', 'update', '--init'], {
78
+ cwd: worktreePath,
79
+ stdio: 'pipe',
80
+ });
81
+ console.log(dim(' Submodules initialized'));
82
+ }
83
+ catch {
84
+ // No submodules or git not available — not an error
85
+ }
86
+ // Auto-discover archDoc and slicePlan from range base
87
+ const base = String(indexRange[0]);
88
+ let archDoc;
89
+ let slicePlan;
90
+ if (project.projectPath) {
91
+ try {
92
+ const resolved = resolveFileByIndex(project.projectPath, 'fileArch', base);
93
+ if (resolved)
94
+ archDoc = resolved;
95
+ }
96
+ catch {
97
+ // No arch file for this range base — skip
98
+ }
99
+ try {
100
+ const resolved = resolveFileByIndex(project.projectPath, 'fileSlicePlan', base);
101
+ if (resolved)
102
+ slicePlan = resolved;
103
+ }
104
+ catch {
105
+ // No slice plan for this range base — skip
106
+ }
107
+ }
108
+ const svc = new WorktreeService(store);
109
+ const { worktree: created, migrated, overlaps, chopWarning } = await svc.addWorktree(projectId, {
110
+ name: opts.name,
111
+ indexRange,
112
+ worktreePath,
113
+ archDoc,
114
+ slicePlan,
115
+ override: opts.override,
116
+ });
117
+ if (migrated) {
118
+ console.log(dim(`Note: Existing workflow fields were migrated to a 'default' worktree context (range 100-799).`));
119
+ }
120
+ if (chopWarning) {
121
+ console.log(warn(`Warning: ${chopWarning}`));
122
+ }
123
+ if (overlaps.length > 0) {
124
+ for (const o of overlaps) {
125
+ console.log(warn(`Warning: Range ${indexRange[0]}-${indexRange[1]} overlaps with worktree '${o.existingWorktreeName}' (${o.existingRange[0]}-${o.existingRange[1]}) at ${o.overlapStart}-${o.overlapEnd}.`));
126
+ }
127
+ }
128
+ console.log(success(`Worktree context '${created.name}' created (${indexRange[0]}-${indexRange[1]}) on project '${project.name}'.`));
129
+ if (archDoc)
130
+ console.log(dim(` arch: ${archDoc}`));
131
+ if (slicePlan)
132
+ console.log(dim(` plan: ${slicePlan}`));
133
+ }
134
+ catch (err) {
135
+ handleError(err);
136
+ }
137
+ });
138
+ // ── cf worktree list ────────────────────────────────────────────────────────
139
+ const listCmd = worktree.command('list').description('List worktree contexts for the active project');
140
+ withProjectOption(listCmd);
141
+ withJsonOption(listCmd);
142
+ listCmd.action(async (opts) => {
143
+ try {
144
+ const store = new FileProjectStore();
145
+ const resolved = await resolveProjectWorktree({ project: opts.project }, store);
146
+ const projectId = resolved.id;
147
+ const activeWorktreeId = resolved.worktreeId;
148
+ const project = await store.getById(projectId);
149
+ if (!project) {
150
+ throw new UserError(`Project not found: '${projectId}'.`);
151
+ }
152
+ const worktrees = project.worktrees ?? [];
153
+ // Validate worktree paths against git worktree list
154
+ let pathStatuses = [];
155
+ if (worktrees.length > 0 && project.projectPath) {
156
+ try {
157
+ const gitWorktrees = await new GitWorktreeDiscovery().listWorktrees(project.projectPath);
158
+ const svc = new WorktreeService(store);
159
+ pathStatuses = await svc.validateWorktreePaths(projectId, gitWorktrees);
160
+ }
161
+ catch {
162
+ // Git discovery failure — proceed without status indicators
163
+ }
164
+ }
165
+ const statusMap = new Map(pathStatuses.map((s) => [s.worktreeId, s.status]));
166
+ if (opts.json) {
167
+ printJson({ worktrees, activeWorktreeId, pathStatuses: pathStatuses.length > 0 ? pathStatuses : undefined });
168
+ return;
169
+ }
170
+ if (worktrees.length === 0) {
171
+ console.log(` No worktree contexts registered for project '${project.name}'. Run cf worktree init to create one.`);
172
+ return;
173
+ }
174
+ const rows = [];
175
+ const prefixes = [];
176
+ for (const wt of worktrees) {
177
+ const isActive = wt.id === activeWorktreeId;
178
+ let rangeStr = `[${wt.indexRange[0]}-${wt.indexRange[1]}]`;
179
+ if (wt.rangeOverride === true) {
180
+ rangeStr = `${rangeStr} ${warn('[override]')}`;
181
+ }
182
+ let pathStr = wt.worktreePath ? shortenPath(wt.worktreePath) : dim('—');
183
+ // Append stale path indicator
184
+ const pathStatus = statusMap.get(wt.id);
185
+ if (pathStatus === 'missing') {
186
+ pathStr += ' ' + warn('(removed)');
187
+ }
188
+ else if (pathStatus === 'not-a-worktree') {
189
+ pathStr += ' ' + warn('(not a git worktree)');
190
+ }
191
+ const archStr = wt.archDoc ?? dim('—');
192
+ const planStr = wt.slicePlan ?? dim('—');
193
+ if (isActive) {
194
+ rows.push([success(wt.name), success(rangeStr), success(pathStr), success(archStr), success(planStr)]);
195
+ prefixes.push(success('* '));
196
+ }
197
+ else {
198
+ rows.push([wt.name, rangeStr, pathStr, archStr, planStr]);
199
+ prefixes.push(' ');
200
+ }
201
+ }
202
+ console.log(renderTable(['Name', 'Range', 'Path', 'Arch', 'Plan'], rows, prefixes));
203
+ }
204
+ catch (err) {
205
+ handleError(err);
206
+ }
207
+ });
208
+ // ── cf worktree update ─────────────────────────────────────────────────────
209
+ const updateCmd = worktree
210
+ .command('update [nameOrId]')
211
+ .description('Update a worktree context (rename, change range or path)')
212
+ .option('--name <name>', 'New display name')
213
+ .option('--range <start-end>', 'New slice index range, e.g. 150-249')
214
+ .option('--path <path>', 'New worktree directory path')
215
+ .option('-o, --override', 'Allow overlapping index ranges (skip range chopping)');
216
+ withProjectOption(updateCmd);
217
+ updateCmd.action(async (nameOrId, opts) => {
218
+ try {
219
+ if (!opts.name && !opts.range && !opts.path && !opts.override) {
220
+ throw new UserError(`At least one update option is required: --name, --range, or --path`);
221
+ }
222
+ const store = new FileProjectStore();
223
+ const resolved = await resolveProjectWorktree({ project: opts.project }, store);
224
+ const projectId = resolved.id;
225
+ const project = await store.getById(projectId);
226
+ if (!project) {
227
+ throw new UserError(`Project not found: '${projectId}'.`);
228
+ }
229
+ // Resolve target worktree
230
+ let targetId;
231
+ if (nameOrId) {
232
+ const found = await findWorktreeByNameOrId(projectId, nameOrId, store);
233
+ if (!found) {
234
+ throw new UserError(`Worktree '${nameOrId}' not found on project '${project.name}'.\n` +
235
+ ` Run 'cf worktree list' to see available worktrees.`);
236
+ }
237
+ targetId = found.id;
238
+ }
239
+ else if (resolved.worktreeId) {
240
+ targetId = resolved.worktreeId;
241
+ }
242
+ else {
243
+ throw new UserError(`No worktree specified and none resolved from CWD.\n` +
244
+ ` Run 'cf worktree list' to see available worktrees, then:\n` +
245
+ ` cf worktree update <name|id> --name <new-name>`);
246
+ }
247
+ // Build updates object
248
+ const updates = {};
249
+ if (opts.name) {
250
+ updates.name = opts.name;
251
+ }
252
+ let indexRange;
253
+ if (opts.range) {
254
+ indexRange = parseRange(opts.range);
255
+ updates.indexRange = indexRange;
256
+ }
257
+ if (opts.override) {
258
+ updates.rangeOverride = true;
259
+ }
260
+ if (opts.path) {
261
+ // Validate path against git worktree list (same as init)
262
+ if (project.projectPath) {
263
+ const gitWorktrees = await new GitWorktreeDiscovery().listWorktrees(project.projectPath);
264
+ if (gitWorktrees.length === 0) {
265
+ console.error(warn(`Warning: could not verify path is a git worktree (git unavailable or not a git repo). Proceeding anyway.`));
266
+ }
267
+ else {
268
+ const known = gitWorktrees.map((wt) => wt.path);
269
+ const normalizedPath = opts.path.endsWith('/') ? opts.path.slice(0, -1) : opts.path;
270
+ if (!known.includes(normalizedPath)) {
271
+ throw new UserError(`Path '${opts.path}' is not a registered git worktree.\n` +
272
+ ` Run 'git worktree list' to see available worktrees.\n` +
273
+ ` Use 'git worktree add <path>' to create a new one first.`);
274
+ }
275
+ }
276
+ }
277
+ updates.worktreePath = opts.path;
278
+ }
279
+ const svc = new WorktreeService(store);
280
+ const updated = await svc.updateWorktree(projectId, targetId, updates);
281
+ if (updated.chopWarning) {
282
+ console.log(warn(`Warning: ${updated.chopWarning}`));
283
+ }
284
+ // Check for overlaps when range changed
285
+ if (indexRange) {
286
+ const overlaps = await svc.findOverlaps(projectId, indexRange, targetId);
287
+ for (const o of overlaps) {
288
+ console.log(warn(`Warning: Range ${indexRange[0]}-${indexRange[1]} overlaps with worktree '${o.existingWorktreeName}' (${o.existingRange[0]}-${o.existingRange[1]}) at ${o.overlapStart}-${o.overlapEnd}.`));
289
+ }
290
+ }
291
+ console.log(success(`Worktree context '${updated.name}' updated.`));
292
+ }
293
+ catch (err) {
294
+ handleError(err);
295
+ }
296
+ });
297
+ // ── cf worktree rm ──────────────────────────────────────────────────────────
298
+ const rmCmd = worktree.command('rm [nameOrId]').description('Remove a worktree context from the active project');
299
+ withProjectOption(rmCmd);
300
+ withYesOption(rmCmd);
301
+ rmCmd.action(async (nameOrId, opts) => {
302
+ try {
303
+ const store = new FileProjectStore();
304
+ const resolved = await resolveProjectWorktree({ project: opts.project }, store);
305
+ const projectId = resolved.id;
306
+ const project = await store.getById(projectId);
307
+ if (!project) {
308
+ throw new UserError(`Project not found: '${projectId}'.`);
309
+ }
310
+ // Resolve target worktree
311
+ let targetId;
312
+ if (nameOrId) {
313
+ const found = await findWorktreeByNameOrId(projectId, nameOrId, store);
314
+ if (!found) {
315
+ throw new UserError(`Worktree '${nameOrId}' not found on project '${project.name}'.\n` +
316
+ ` Run 'cf worktree list' to see available worktrees.`);
317
+ }
318
+ targetId = found.id;
319
+ }
320
+ else if (resolved.worktreeId) {
321
+ targetId = resolved.worktreeId;
322
+ }
323
+ else {
324
+ throw new UserError(`No worktree specified and none resolved from CWD.\n` +
325
+ ` Run 'cf worktree list' to see available worktrees, then:\n` +
326
+ ` cf worktree rm <name|id>`);
327
+ }
328
+ const worktrees = project.worktrees ?? [];
329
+ const target = worktrees.find((wt) => wt.id === targetId);
330
+ if (!target) {
331
+ throw new UserError(`Worktree not found on project '${project.name}'.\n` +
332
+ ` Run 'cf worktree list' to see available worktrees.`);
333
+ }
334
+ if (!opts.yes) {
335
+ console.log(` Name: ${target.name}`);
336
+ console.log(` Range: ${target.indexRange[0]}-${target.indexRange[1]}`);
337
+ console.log(` Path: ${target.worktreePath ?? dim('—')}`);
338
+ console.log(` Project: ${project.name}`);
339
+ console.log(dim(` Note: This removes the worktree context record only. Files on disk are not deleted.`));
340
+ const confirmed = await askConfirmation(`Remove worktree '${target.name}'? [y/N] `);
341
+ if (!confirmed) {
342
+ console.log('Cancelled.');
343
+ return;
344
+ }
345
+ }
346
+ const svc = new WorktreeService(store);
347
+ const { migrated } = await svc.removeWorktree(projectId, targetId);
348
+ if (migrated) {
349
+ console.log(dim(`Note: Workflow fields were restored to project level (last worktree removed).`));
350
+ }
351
+ console.log(success(`Worktree context '${target.name}' removed from project '${project.name}'.`));
352
+ // Hint about git worktree removal when the worktree has a filesystem path
353
+ if (target.worktreePath) {
354
+ const guidesPresent = existsSync(join(target.worktreePath, 'project-documents', 'ai-project-guide'));
355
+ if (guidesPresent) {
356
+ console.log(dim(`\n To remove the git worktree, first uninstall guides:\n` +
357
+ ` cd ${target.worktreePath} && cf guides uninstall\n` +
358
+ ` git worktree remove --force ${target.worktreePath}`));
359
+ }
360
+ else {
361
+ console.log(dim(`\n To remove the git worktree:\n` +
362
+ ` git worktree remove --force ${target.worktreePath}`));
363
+ }
364
+ }
365
+ }
366
+ catch (err) {
367
+ handleError(err);
368
+ }
369
+ });
370
+ }
371
+ //# sourceMappingURL=worktree.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/commands/worktree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,167 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ import chalk from 'chalk';
4
+ import { Command } from 'commander';
5
+ import { registerBuildCommand } from './commands/build.js';
6
+ import { registerCheckCommand } from './commands/check.js';
7
+ import { registerFutureCommand } from './commands/future.js';
8
+ import { registerNextCommand } from './commands/next.js';
9
+ import { registerProjectCommand, projectSetAction, projectGetAction, projectUnsetAction, buildSettableFieldsHelp } from './commands/project.js';
10
+ import { registerPromptCommand } from './commands/prompt.js';
11
+ import { registerStatusCommand } from './commands/status.js';
12
+ import { registerListCommand } from './commands/list.js';
13
+ import { registerWorktreeCommand } from './commands/worktree.js';
14
+ import { registerBackupCommand } from './commands/backup.js';
15
+ import { registerConfigCommand } from './commands/config.js';
16
+ import { registerGuidesCommand } from './commands/guides.js';
17
+ import { registerInitCommand } from './commands/init.js';
18
+ import { registerInstallCommandsCommand, registerUninstallCommandsCommand } from './commands/commandInstaller.js';
19
+ import { registerSetupIdeCommand } from './commands/setup-ide.js';
20
+ import { registerUpdateCommand } from './commands/update.js';
21
+ import { handleError, setJsonMode } from './utils/errors.js';
22
+ import { buildCommandCatalog } from './utils/commandCatalog.js';
23
+ import { BREAKING_CHANGES } from './utils/breaking-changes.js';
24
+ import { withJsonOption, withProjectOption, withProjectLevelOption } from './options.js';
25
+ const require = createRequire(import.meta.url);
26
+ const { version } = require('../package.json');
27
+ const program = new Command();
28
+ program
29
+ .name('cf')
30
+ .version(version, '-v, --version', 'Output the version number')
31
+ .description('Context Forge CLI — terminal access to context assembly, project management, and workflow navigation')
32
+ .configureHelp({
33
+ styleTitle: (str) => chalk.bold(str),
34
+ styleCommandText: (str) => chalk.yellow(str),
35
+ styleSubcommandText: (str) => chalk.yellow(str),
36
+ styleOptionText: (str) => chalk.cyan(str),
37
+ styleArgumentText: (str) => chalk.magenta(str),
38
+ styleDescriptionText: (str) => str,
39
+ subcommandTerm: (cmd) => cmd.name(),
40
+ })
41
+ .addHelpText('after', `\n${chalk.bold('Common options')} (available on most commands):\n ${chalk.cyan('--project <name|id>')} Project name or ID (overrides CWD-based project detection)\n ${chalk.cyan('--json')} Output as JSON (not applicable to build/prompt get)`);
42
+ // Workflow commands
43
+ registerBuildCommand(program);
44
+ registerCheckCommand(program);
45
+ registerFutureCommand(program);
46
+ registerNextCommand(program);
47
+ registerProjectCommand(program);
48
+ registerPromptCommand(program);
49
+ registerStatusCommand(program);
50
+ // Top-level shortcuts for project get/set/unset
51
+ const getCmd = program
52
+ .command('get')
53
+ .description('Show details for the active project (shortcut for cf project get)');
54
+ withJsonOption(getCmd);
55
+ withProjectOption(getCmd);
56
+ withProjectLevelOption(getCmd);
57
+ getCmd.action(async (opts) => {
58
+ try {
59
+ await projectGetAction(opts);
60
+ }
61
+ catch (err) {
62
+ handleError(err);
63
+ }
64
+ });
65
+ const setCmd = program
66
+ .command('set [field] [value]')
67
+ .description('Set a field on the active project (shortcut for cf project set)');
68
+ withProjectOption(setCmd);
69
+ withProjectLevelOption(setCmd);
70
+ setCmd.addHelpText('after', buildSettableFieldsHelp)
71
+ .action(async (field, val, opts) => {
72
+ // Allow `cf set date` (no value) as shorthand for `cf set date now`
73
+ const resolvedVal = (!val && field && /^date/i.test(field)) ? 'now' : val;
74
+ if (!field || !resolvedVal) {
75
+ console.log(`Usage: cf set [options] <field> <value> — run cf set --help for details`);
76
+ return;
77
+ }
78
+ try {
79
+ await projectSetAction(field, resolvedVal, opts);
80
+ }
81
+ catch (err) {
82
+ handleError(err);
83
+ }
84
+ });
85
+ const unsetCmd = program
86
+ .command('unset [field]')
87
+ .description('Unset (clear) a field on the active project (shortcut for cf project unset)');
88
+ withProjectOption(unsetCmd);
89
+ withProjectLevelOption(unsetCmd);
90
+ unsetCmd.action(async (field, opts) => {
91
+ if (!field) {
92
+ console.log(`Usage: cf unset [options] <field> — run cf unset --help for details`);
93
+ return;
94
+ }
95
+ try {
96
+ await projectUnsetAction(field, opts);
97
+ }
98
+ catch (err) {
99
+ handleError(err);
100
+ }
101
+ });
102
+ // Compound workflow commands
103
+ // Artifact listing
104
+ registerListCommand(program);
105
+ // Worktree management
106
+ registerWorktreeCommand(program);
107
+ // Setup and administration
108
+ registerBackupCommand(program);
109
+ registerConfigCommand(program);
110
+ registerGuidesCommand(program);
111
+ registerInitCommand(program);
112
+ registerInstallCommandsCommand(program);
113
+ registerUninstallCommandsCommand(program);
114
+ registerSetupIdeCommand(program);
115
+ registerUpdateCommand(program);
116
+ // Version introspection
117
+ const versionCmd = program
118
+ .command('version')
119
+ .description('Show version information (use --json for machine-readable output)');
120
+ withJsonOption(versionCmd);
121
+ versionCmd.action(async (opts) => {
122
+ if (opts.json) {
123
+ let guideVersion = null;
124
+ try {
125
+ const { GuideDetector } = await import('@context-forge/core/node');
126
+ const detector = new GuideDetector();
127
+ const info = await detector.detect(process.cwd());
128
+ guideVersion = info.version;
129
+ }
130
+ catch {
131
+ // Guide detection is best-effort
132
+ }
133
+ const output = {
134
+ name: '@context-forge/cli',
135
+ version,
136
+ guideVersion,
137
+ breaking: BREAKING_CHANGES,
138
+ };
139
+ process.stdout.write(JSON.stringify(output, null, 2) + '\n');
140
+ }
141
+ else {
142
+ process.stdout.write(`@context-forge/cli v${version}\n`);
143
+ }
144
+ });
145
+ // Machine-readable help
146
+ const helpCmd = program
147
+ .command('help')
148
+ .description('Display help information (use --json for machine-readable catalog)');
149
+ withJsonOption(helpCmd);
150
+ helpCmd.action((opts) => {
151
+ if (opts.json) {
152
+ const catalog = buildCommandCatalog(program, version);
153
+ process.stdout.write(JSON.stringify(catalog, null, 2) + '\n');
154
+ }
155
+ else {
156
+ program.outputHelp();
157
+ }
158
+ });
159
+ // Catch unhandled errors at top level
160
+ process.on('uncaughtException', handleError);
161
+ process.on('unhandledRejection', handleError);
162
+ // Detect --json in argv to enable structured error output before parsing
163
+ if (process.argv.includes('--json') || process.env.CF_JSON === '1') {
164
+ setJsonMode();
165
+ }
166
+ program.parse();
167
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { Command } from 'commander';
2
+ /** -j, --json — Output as JSON */
3
+ export declare function withJsonOption(cmd: Command): Command;
4
+ /** -p, --project <id> — Project ID or name (overrides default) */
5
+ export declare function withProjectOption(cmd: Command): Command;
6
+ /** -y, --yes — Skip confirmation prompt */
7
+ export declare function withYesOption(cmd: Command): Command;
8
+ /** -f, --fix — Apply non-destructive corrections (when available) */
9
+ export declare function withFixOption(cmd: Command): Command;
10
+ /** -a, --all — Show items from all worktrees */
11
+ export declare function withAllOption(cmd: Command): Command;
12
+ /** -r, --raw — Output raw content without formatting */
13
+ export declare function withRawOption(cmd: Command): Command;
14
+ /** --project-level — Force operation at project level (skip worktree routing) */
15
+ export declare function withProjectLevelOption(cmd: Command): Command;
16
+ //# sourceMappingURL=options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.d.ts","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEzC,kCAAkC;AAClC,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEpD;AAED,kEAAkE;AAClE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEvD;AAED,2CAA2C;AAC3C,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED,qEAAqE;AACrE,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED,gDAAgD;AAChD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED,wDAAwD;AACxD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAEnD;AAED,iFAAiF;AACjF,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAE5D"}
@@ -0,0 +1,29 @@
1
+ /** -j, --json — Output as JSON */
2
+ export function withJsonOption(cmd) {
3
+ return cmd.option('-j, --json', 'Output as JSON');
4
+ }
5
+ /** -p, --project <id> — Project ID or name (overrides default) */
6
+ export function withProjectOption(cmd) {
7
+ return cmd.option('-p, --project <id>', 'Project ID or name (overrides default)');
8
+ }
9
+ /** -y, --yes — Skip confirmation prompt */
10
+ export function withYesOption(cmd) {
11
+ return cmd.option('-y, --yes', 'Skip confirmation prompt');
12
+ }
13
+ /** -f, --fix — Apply non-destructive corrections (when available) */
14
+ export function withFixOption(cmd) {
15
+ return cmd.option('-f, --fix', 'Apply non-destructive corrections (when available)');
16
+ }
17
+ /** -a, --all — Show items from all worktrees */
18
+ export function withAllOption(cmd) {
19
+ return cmd.option('-a, --all', 'Show items from all worktrees');
20
+ }
21
+ /** -r, --raw — Output raw content without formatting */
22
+ export function withRawOption(cmd) {
23
+ return cmd.option('-r, --raw', 'Output raw content without formatting');
24
+ }
25
+ /** --project-level — Force operation at project level (skip worktree routing) */
26
+ export function withProjectLevelOption(cmd) {
27
+ return cmd.option('--project-level', 'Force operation at project level (skip worktree routing)');
28
+ }
29
+ //# sourceMappingURL=options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"options.js","sourceRoot":"","sources":["../src/options.ts"],"names":[],"mappings":"AAEA,kCAAkC;AAClC,MAAM,UAAU,cAAc,CAAC,GAAY;IACzC,OAAO,GAAG,CAAC,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;AACpD,CAAC;AAED,kEAAkE;AAClE,MAAM,UAAU,iBAAiB,CAAC,GAAY;IAC5C,OAAO,GAAG,CAAC,MAAM,CAAC,oBAAoB,EAAE,wCAAwC,CAAC,CAAC;AACpF,CAAC;AAED,2CAA2C;AAC3C,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,0BAA0B,CAAC,CAAC;AAC7D,CAAC;AAED,qEAAqE;AACrE,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,oDAAoD,CAAC,CAAC;AACvF,CAAC;AAED,gDAAgD;AAChD,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,+BAA+B,CAAC,CAAC;AAClE,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,aAAa,CAAC,GAAY;IACxC,OAAO,GAAG,CAAC,MAAM,CAAC,WAAW,EAAE,uCAAuC,CAAC,CAAC;AAC1E,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,sBAAsB,CAAC,GAAY;IACjD,OAAO,GAAG,CAAC,MAAM,CAAC,iBAAiB,EAAE,0DAA0D,CAAC,CAAC;AACnG,CAAC"}