@context-forge/cli 0.8.5 → 0.8.6
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 +160 -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 +211 -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 +69 -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 +93 -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 +51 -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 +6 -0
- package/dist/commands/slice.d.ts.map +1 -0
- package/dist/commands/slice.js +100 -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 +209 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/task.d.ts +12 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +185 -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/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/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 @@
|
|
|
1
|
+
{"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.d.ts","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuEpC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4I/D"}
|
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
import { FileProjectStore, detectDocuments, checkFileExists } from '@context-forge/core/node';
|
|
2
|
+
import { resolveProject } from '@context-forge/core';
|
|
3
|
+
import { projectSetAction } from './project.js';
|
|
4
|
+
import { buildAndPrint } from './build.js';
|
|
5
|
+
import { resolveProjectWorktree } from '../utils/project.js';
|
|
6
|
+
import { resolveOperationPath } from '../utils/worktree-overlay.js';
|
|
7
|
+
import { handleError, UserError } from '../utils/errors.js';
|
|
8
|
+
import { warn } from '../output/styles.js';
|
|
9
|
+
/** Validate that a compound command argument is a numeric index. */
|
|
10
|
+
function requireNumericIndex(value, commandName) {
|
|
11
|
+
if (!/^\d+$/.test(value)) {
|
|
12
|
+
throw new UserError(`'cf ${commandName}' requires a numeric index, got '${value}'.`, 'INVALID_ARGUMENT', `Use: cf ${commandName} <index> (e.g. cf ${commandName} 200)\n` +
|
|
13
|
+
` To list: cf list ${commandName === 'implement' ? 'slices' : commandName === 'tasks' ? 'tasks' : commandName + 's'}`);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
/** Warn to stderr if an artifact already exists for the given index. */
|
|
17
|
+
async function warnIfArtifactExists(projectPath, index, field, label) {
|
|
18
|
+
try {
|
|
19
|
+
const docs = await detectDocuments(projectPath, index);
|
|
20
|
+
const value = docs[field];
|
|
21
|
+
const exists = Array.isArray(value) ? value.length > 0 : value !== null;
|
|
22
|
+
if (exists) {
|
|
23
|
+
process.stderr.write(warn(`${label} already exists for index ${index}. Building prompt anyway.\n`));
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
// Detection failure is not fatal
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Warn to stderr if the concept document already exists. */
|
|
31
|
+
async function warnIfConceptExists(opts) {
|
|
32
|
+
try {
|
|
33
|
+
const store = new FileProjectStore();
|
|
34
|
+
const { id, worktreeId } = await resolveProjectWorktree({ project: opts.project }, store);
|
|
35
|
+
const project = await resolveProject(store, id, worktreeId);
|
|
36
|
+
if (!project?.projectPath || !project.fileConcept)
|
|
37
|
+
return;
|
|
38
|
+
const opPath = resolveOperationPath(project, worktreeId) ?? project.projectPath;
|
|
39
|
+
const exists = await checkFileExists(opPath, project.fileConcept);
|
|
40
|
+
if (exists) {
|
|
41
|
+
process.stderr.write(warn('Concept document already exists. Building concept prompt anyway.\n'));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
// Detection failure is not fatal
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/** Resolve the operation path for artifact detection. */
|
|
49
|
+
async function getOperationPath(opts) {
|
|
50
|
+
try {
|
|
51
|
+
const store = new FileProjectStore();
|
|
52
|
+
const { id, worktreeId } = await resolveProjectWorktree({ project: opts.project }, store);
|
|
53
|
+
const project = await resolveProject(store, id, worktreeId);
|
|
54
|
+
if (!project?.projectPath)
|
|
55
|
+
return undefined;
|
|
56
|
+
return resolveOperationPath(project, worktreeId) ?? project.projectPath;
|
|
57
|
+
}
|
|
58
|
+
catch {
|
|
59
|
+
return undefined;
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
export function registerWorkflowCommands(program) {
|
|
63
|
+
// cf concept
|
|
64
|
+
program
|
|
65
|
+
.command('concept')
|
|
66
|
+
.description('Set phase to Concept and build prompt')
|
|
67
|
+
.option('--project <name|id>', 'Project name or ID')
|
|
68
|
+
.option('--project-level', 'Force project-level field updates')
|
|
69
|
+
.option('--json', 'Output context as JSON to stdout')
|
|
70
|
+
.action(async (opts) => {
|
|
71
|
+
try {
|
|
72
|
+
await warnIfConceptExists(opts);
|
|
73
|
+
await projectSetAction('developmentPhase', 'Phase 0: Concept', opts);
|
|
74
|
+
await buildAndPrint({ ...opts, commandHint: 'concept' });
|
|
75
|
+
}
|
|
76
|
+
catch (err) {
|
|
77
|
+
handleError(err);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
// cf initiatives
|
|
81
|
+
program
|
|
82
|
+
.command('initiatives')
|
|
83
|
+
.description('Set phase to Initiative Plan and build prompt')
|
|
84
|
+
.option('--project <name|id>', 'Project name or ID')
|
|
85
|
+
.option('--project-level', 'Force project-level field updates')
|
|
86
|
+
.option('--json', 'Output context as JSON to stdout')
|
|
87
|
+
.action(async (opts) => {
|
|
88
|
+
try {
|
|
89
|
+
await projectSetAction('developmentPhase', 'Phase 1: Initiative Plan', opts);
|
|
90
|
+
await buildAndPrint({ ...opts, commandHint: 'initiatives' });
|
|
91
|
+
}
|
|
92
|
+
catch (err) {
|
|
93
|
+
handleError(err);
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
// cf arch <index>
|
|
97
|
+
program
|
|
98
|
+
.command('arch <index>')
|
|
99
|
+
.description('Set architecture initiative and build prompt')
|
|
100
|
+
.option('--project <name|id>', 'Project name or ID')
|
|
101
|
+
.option('--project-level', 'Force project-level field updates')
|
|
102
|
+
.option('--json', 'Output context as JSON to stdout')
|
|
103
|
+
.action(async (index, opts) => {
|
|
104
|
+
try {
|
|
105
|
+
requireNumericIndex(index, 'arch');
|
|
106
|
+
await projectSetAction('fileArch', index, opts);
|
|
107
|
+
await projectSetAction('developmentPhase', 'Phase 2: Architecture', opts);
|
|
108
|
+
const opPath = await getOperationPath(opts);
|
|
109
|
+
if (opPath) {
|
|
110
|
+
await warnIfArtifactExists(opPath, parseInt(index, 10), 'architecture', 'Architecture document');
|
|
111
|
+
}
|
|
112
|
+
await buildAndPrint({ ...opts, commandHint: `arch ${index}` });
|
|
113
|
+
}
|
|
114
|
+
catch (err) {
|
|
115
|
+
handleError(err);
|
|
116
|
+
}
|
|
117
|
+
});
|
|
118
|
+
// cf plan <index>
|
|
119
|
+
program
|
|
120
|
+
.command('plan <index>')
|
|
121
|
+
.description('Set slice plan and build prompt')
|
|
122
|
+
.option('--project <name|id>', 'Project name or ID')
|
|
123
|
+
.option('--project-level', 'Force project-level field updates')
|
|
124
|
+
.option('--json', 'Output context as JSON to stdout')
|
|
125
|
+
.action(async (index, opts) => {
|
|
126
|
+
try {
|
|
127
|
+
requireNumericIndex(index, 'plan');
|
|
128
|
+
await projectSetAction('fileSlicePlan', index, opts);
|
|
129
|
+
await projectSetAction('developmentPhase', 'Phase 3: Slice Planning', opts);
|
|
130
|
+
const opPath = await getOperationPath(opts);
|
|
131
|
+
if (opPath) {
|
|
132
|
+
await warnIfArtifactExists(opPath, parseInt(index, 10), 'slicePlan', 'Slice plan');
|
|
133
|
+
}
|
|
134
|
+
await buildAndPrint({ ...opts, commandHint: `plan ${index}` });
|
|
135
|
+
}
|
|
136
|
+
catch (err) {
|
|
137
|
+
handleError(err);
|
|
138
|
+
}
|
|
139
|
+
});
|
|
140
|
+
// cf slice <index>
|
|
141
|
+
program
|
|
142
|
+
.command('slice <index>')
|
|
143
|
+
.description('Set active slice and build prompt')
|
|
144
|
+
.option('--project <name|id>', 'Project name or ID')
|
|
145
|
+
.option('--project-level', 'Force project-level field updates')
|
|
146
|
+
.option('--json', 'Output context as JSON to stdout')
|
|
147
|
+
.action(async (index, opts) => {
|
|
148
|
+
try {
|
|
149
|
+
requireNumericIndex(index, 'slice');
|
|
150
|
+
await projectSetAction('fileSlice', index, opts);
|
|
151
|
+
await projectSetAction('developmentPhase', 'Phase 4: Slice Design', opts);
|
|
152
|
+
const opPath = await getOperationPath(opts);
|
|
153
|
+
if (opPath) {
|
|
154
|
+
await warnIfArtifactExists(opPath, parseInt(index, 10), 'sliceDesign', 'Slice design');
|
|
155
|
+
}
|
|
156
|
+
await buildAndPrint({ ...opts, commandHint: `slice ${index}` });
|
|
157
|
+
}
|
|
158
|
+
catch (err) {
|
|
159
|
+
handleError(err);
|
|
160
|
+
}
|
|
161
|
+
});
|
|
162
|
+
// cf tasks <index>
|
|
163
|
+
program
|
|
164
|
+
.command('tasks <index>')
|
|
165
|
+
.description('Set active task file and build prompt')
|
|
166
|
+
.option('--project <name|id>', 'Project name or ID')
|
|
167
|
+
.option('--project-level', 'Force project-level field updates')
|
|
168
|
+
.option('--json', 'Output context as JSON to stdout')
|
|
169
|
+
.action(async (index, opts) => {
|
|
170
|
+
try {
|
|
171
|
+
requireNumericIndex(index, 'tasks');
|
|
172
|
+
await projectSetAction('fileTasks', index, opts);
|
|
173
|
+
await projectSetAction('developmentPhase', 'Phase 5: Task Breakdown', opts);
|
|
174
|
+
const opPath = await getOperationPath(opts);
|
|
175
|
+
if (opPath) {
|
|
176
|
+
await warnIfArtifactExists(opPath, parseInt(index, 10), 'taskFile', 'Task file');
|
|
177
|
+
}
|
|
178
|
+
await buildAndPrint({ ...opts, commandHint: `tasks ${index}` });
|
|
179
|
+
}
|
|
180
|
+
catch (err) {
|
|
181
|
+
handleError(err);
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
// cf implement <index>
|
|
185
|
+
program
|
|
186
|
+
.command('implement <index>')
|
|
187
|
+
.description('Set active slice for implementation and build prompt')
|
|
188
|
+
.option('--project <name|id>', 'Project name or ID')
|
|
189
|
+
.option('--project-level', 'Force project-level field updates')
|
|
190
|
+
.option('--json', 'Output context as JSON to stdout')
|
|
191
|
+
.action(async (index, opts) => {
|
|
192
|
+
try {
|
|
193
|
+
requireNumericIndex(index, 'implement');
|
|
194
|
+
await projectSetAction('fileSlice', index, opts);
|
|
195
|
+
await projectSetAction('developmentPhase', 'Phase 6: Implementation', opts);
|
|
196
|
+
// No artifact warning for implement — implementation is always continuation
|
|
197
|
+
await buildAndPrint({ ...opts, commandHint: `implement ${index}` });
|
|
198
|
+
}
|
|
199
|
+
catch (err) {
|
|
200
|
+
handleError(err);
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=workflow.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"worktree.d.ts","sourceRoot":"","sources":["../../src/commands/worktree.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsCpC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAia9D"}
|
|
@@ -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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"}
|