@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.
- package/dist/commands/arch.d.ts +7 -0
- package/dist/commands/arch.d.ts.map +1 -0
- package/dist/commands/arch.js +169 -0
- package/dist/commands/arch.js.map +1 -0
- package/dist/commands/backup.d.ts +3 -0
- package/dist/commands/backup.d.ts.map +1 -0
- package/dist/commands/backup.js +27 -0
- package/dist/commands/backup.js.map +1 -0
- package/dist/commands/build.d.ts +24 -0
- package/dist/commands/build.d.ts.map +1 -0
- package/dist/commands/build.js +146 -0
- package/dist/commands/build.js.map +1 -0
- package/dist/commands/check.d.ts +3 -0
- package/dist/commands/check.d.ts.map +1 -0
- package/dist/commands/check.js +250 -0
- package/dist/commands/check.js.map +1 -0
- package/dist/commands/commandInstaller.d.ts +28 -0
- package/dist/commands/commandInstaller.d.ts.map +1 -0
- package/dist/commands/commandInstaller.js +136 -0
- package/dist/commands/commandInstaller.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +116 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/future.d.ts +3 -0
- package/dist/commands/future.d.ts.map +1 -0
- package/dist/commands/future.js +96 -0
- package/dist/commands/future.js.map +1 -0
- package/dist/commands/guides.d.ts +9 -0
- package/dist/commands/guides.d.ts.map +1 -0
- package/dist/commands/guides.js +156 -0
- package/dist/commands/guides.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +124 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/list.d.ts +3 -0
- package/dist/commands/list.d.ts.map +1 -0
- package/dist/commands/list.js +97 -0
- package/dist/commands/list.js.map +1 -0
- package/dist/commands/next.d.ts +3 -0
- package/dist/commands/next.d.ts.map +1 -0
- package/dist/commands/next.js +52 -0
- package/dist/commands/next.js.map +1 -0
- package/dist/commands/plan.d.ts +7 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +102 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/project.d.ts +25 -0
- package/dist/commands/project.d.ts.map +1 -0
- package/dist/commands/project.js +550 -0
- package/dist/commands/project.js.map +1 -0
- package/dist/commands/prompt.d.ts +3 -0
- package/dist/commands/prompt.d.ts.map +1 -0
- package/dist/commands/prompt.js +112 -0
- package/dist/commands/prompt.js.map +1 -0
- package/dist/commands/setup-ide.d.ts +15 -0
- package/dist/commands/setup-ide.d.ts.map +1 -0
- package/dist/commands/setup-ide.js +250 -0
- package/dist/commands/setup-ide.js.map +1 -0
- package/dist/commands/slice.d.ts +7 -0
- package/dist/commands/slice.d.ts.map +1 -0
- package/dist/commands/slice.js +151 -0
- package/dist/commands/slice.js.map +1 -0
- package/dist/commands/status.d.ts +3 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +210 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/task.d.ts +13 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +207 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/commands/update.d.ts +27 -0
- package/dist/commands/update.d.ts.map +1 -0
- package/dist/commands/update.js +172 -0
- package/dist/commands/update.js.map +1 -0
- package/dist/commands/workflow.d.ts +3 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +204 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/commands/worktree.d.ts +3 -0
- package/dist/commands/worktree.d.ts.map +1 -0
- package/dist/commands/worktree.js +371 -0
- package/dist/commands/worktree.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +167 -0
- package/dist/index.js.map +1 -0
- package/dist/options.d.ts +16 -0
- package/dist/options.d.ts.map +1 -0
- package/dist/options.js +29 -0
- package/dist/options.js.map +1 -0
- package/dist/output/entryStatusDisplay.d.ts +12 -0
- package/dist/output/entryStatusDisplay.d.ts.map +1 -0
- package/dist/output/entryStatusDisplay.js +24 -0
- package/dist/output/entryStatusDisplay.js.map +1 -0
- package/dist/output/formatter.d.ts +6 -0
- package/dist/output/formatter.d.ts.map +1 -0
- package/dist/output/formatter.js +9 -0
- package/dist/output/formatter.js.map +1 -0
- package/dist/output/styles.d.ts +15 -0
- package/dist/output/styles.d.ts.map +1 -0
- package/dist/output/styles.js +16 -0
- package/dist/output/styles.js.map +1 -0
- package/dist/output/tables.d.ts +6 -0
- package/dist/output/tables.d.ts.map +1 -0
- package/dist/output/tables.js +45 -0
- package/dist/output/tables.js.map +1 -0
- package/dist/utils/archIndex.d.ts +7 -0
- package/dist/utils/archIndex.d.ts.map +1 -0
- package/dist/utils/archIndex.js +14 -0
- package/dist/utils/archIndex.js.map +1 -0
- package/dist/utils/breaking-changes.d.ts +14 -0
- package/dist/utils/breaking-changes.d.ts.map +1 -0
- package/dist/utils/breaking-changes.js +11 -0
- package/dist/utils/breaking-changes.js.map +1 -0
- package/dist/utils/commandCatalog.d.ts +25 -0
- package/dist/utils/commandCatalog.d.ts.map +1 -0
- package/dist/utils/commandCatalog.js +32 -0
- package/dist/utils/commandCatalog.js.map +1 -0
- package/dist/utils/confirm.d.ts +3 -0
- package/dist/utils/confirm.d.ts.map +1 -0
- package/dist/utils/confirm.js +12 -0
- package/dist/utils/confirm.js.map +1 -0
- package/dist/utils/errors.d.ts +22 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +63 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/phaseShorthand.d.ts +23 -0
- package/dist/utils/phaseShorthand.d.ts.map +1 -0
- package/dist/utils/phaseShorthand.js +68 -0
- package/dist/utils/phaseShorthand.js.map +1 -0
- package/dist/utils/project.d.ts +60 -0
- package/dist/utils/project.d.ts.map +1 -0
- package/dist/utils/project.js +140 -0
- package/dist/utils/project.js.map +1 -0
- package/dist/utils/worktree-overlay.d.ts +31 -0
- package/dist/utils/worktree-overlay.d.ts.map +1 -0
- package/dist/utils/worktree-overlay.js +63 -0
- package/dist/utils/worktree-overlay.js.map +1 -0
- 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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"}
|
package/dist/index.d.ts
ADDED
|
@@ -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"}
|
package/dist/options.js
ADDED
|
@@ -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"}
|