@context-forge/cli 0.8.4 → 0.8.5

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 (133) hide show
  1. package/package.json +2 -2
  2. package/dist/commands/arch.d.ts +0 -7
  3. package/dist/commands/arch.d.ts.map +0 -1
  4. package/dist/commands/arch.js +0 -160
  5. package/dist/commands/arch.js.map +0 -1
  6. package/dist/commands/backup.d.ts +0 -3
  7. package/dist/commands/backup.d.ts.map +0 -1
  8. package/dist/commands/backup.js +0 -27
  9. package/dist/commands/backup.js.map +0 -1
  10. package/dist/commands/build.d.ts +0 -24
  11. package/dist/commands/build.d.ts.map +0 -1
  12. package/dist/commands/build.js +0 -146
  13. package/dist/commands/build.js.map +0 -1
  14. package/dist/commands/check.d.ts +0 -3
  15. package/dist/commands/check.d.ts.map +0 -1
  16. package/dist/commands/check.js +0 -211
  17. package/dist/commands/check.js.map +0 -1
  18. package/dist/commands/commandInstaller.d.ts +0 -28
  19. package/dist/commands/commandInstaller.d.ts.map +0 -1
  20. package/dist/commands/commandInstaller.js +0 -136
  21. package/dist/commands/commandInstaller.js.map +0 -1
  22. package/dist/commands/config.d.ts +0 -3
  23. package/dist/commands/config.d.ts.map +0 -1
  24. package/dist/commands/config.js +0 -69
  25. package/dist/commands/config.js.map +0 -1
  26. package/dist/commands/future.d.ts +0 -3
  27. package/dist/commands/future.d.ts.map +0 -1
  28. package/dist/commands/future.js +0 -96
  29. package/dist/commands/future.js.map +0 -1
  30. package/dist/commands/guides.d.ts +0 -9
  31. package/dist/commands/guides.d.ts.map +0 -1
  32. package/dist/commands/guides.js +0 -156
  33. package/dist/commands/guides.js.map +0 -1
  34. package/dist/commands/init.d.ts +0 -3
  35. package/dist/commands/init.d.ts.map +0 -1
  36. package/dist/commands/init.js +0 -124
  37. package/dist/commands/init.js.map +0 -1
  38. package/dist/commands/list.d.ts +0 -3
  39. package/dist/commands/list.d.ts.map +0 -1
  40. package/dist/commands/list.js +0 -93
  41. package/dist/commands/list.js.map +0 -1
  42. package/dist/commands/next.d.ts +0 -3
  43. package/dist/commands/next.d.ts.map +0 -1
  44. package/dist/commands/next.js +0 -51
  45. package/dist/commands/next.js.map +0 -1
  46. package/dist/commands/plan.d.ts +0 -7
  47. package/dist/commands/plan.d.ts.map +0 -1
  48. package/dist/commands/plan.js +0 -102
  49. package/dist/commands/plan.js.map +0 -1
  50. package/dist/commands/project.d.ts +0 -25
  51. package/dist/commands/project.d.ts.map +0 -1
  52. package/dist/commands/project.js +0 -550
  53. package/dist/commands/project.js.map +0 -1
  54. package/dist/commands/prompt.d.ts +0 -3
  55. package/dist/commands/prompt.d.ts.map +0 -1
  56. package/dist/commands/prompt.js +0 -112
  57. package/dist/commands/prompt.js.map +0 -1
  58. package/dist/commands/setup-ide.d.ts +0 -15
  59. package/dist/commands/setup-ide.d.ts.map +0 -1
  60. package/dist/commands/setup-ide.js +0 -250
  61. package/dist/commands/setup-ide.js.map +0 -1
  62. package/dist/commands/slice.d.ts +0 -6
  63. package/dist/commands/slice.d.ts.map +0 -1
  64. package/dist/commands/slice.js +0 -100
  65. package/dist/commands/slice.js.map +0 -1
  66. package/dist/commands/status.d.ts +0 -3
  67. package/dist/commands/status.d.ts.map +0 -1
  68. package/dist/commands/status.js +0 -209
  69. package/dist/commands/status.js.map +0 -1
  70. package/dist/commands/task.d.ts +0 -12
  71. package/dist/commands/task.d.ts.map +0 -1
  72. package/dist/commands/task.js +0 -185
  73. package/dist/commands/task.js.map +0 -1
  74. package/dist/commands/update.d.ts +0 -27
  75. package/dist/commands/update.d.ts.map +0 -1
  76. package/dist/commands/update.js +0 -172
  77. package/dist/commands/update.js.map +0 -1
  78. package/dist/commands/workflow.d.ts +0 -3
  79. package/dist/commands/workflow.d.ts.map +0 -1
  80. package/dist/commands/workflow.js +0 -204
  81. package/dist/commands/workflow.js.map +0 -1
  82. package/dist/commands/worktree.d.ts +0 -3
  83. package/dist/commands/worktree.d.ts.map +0 -1
  84. package/dist/commands/worktree.js +0 -371
  85. package/dist/commands/worktree.js.map +0 -1
  86. package/dist/index.d.ts +0 -3
  87. package/dist/index.d.ts.map +0 -1
  88. package/dist/index.js +0 -167
  89. package/dist/index.js.map +0 -1
  90. package/dist/options.d.ts +0 -16
  91. package/dist/options.d.ts.map +0 -1
  92. package/dist/options.js +0 -29
  93. package/dist/options.js.map +0 -1
  94. package/dist/output/formatter.d.ts +0 -6
  95. package/dist/output/formatter.d.ts.map +0 -1
  96. package/dist/output/formatter.js +0 -9
  97. package/dist/output/formatter.js.map +0 -1
  98. package/dist/output/styles.d.ts +0 -15
  99. package/dist/output/styles.d.ts.map +0 -1
  100. package/dist/output/styles.js +0 -16
  101. package/dist/output/styles.js.map +0 -1
  102. package/dist/output/tables.d.ts +0 -6
  103. package/dist/output/tables.d.ts.map +0 -1
  104. package/dist/output/tables.js +0 -45
  105. package/dist/output/tables.js.map +0 -1
  106. package/dist/utils/breaking-changes.d.ts +0 -14
  107. package/dist/utils/breaking-changes.d.ts.map +0 -1
  108. package/dist/utils/breaking-changes.js +0 -11
  109. package/dist/utils/breaking-changes.js.map +0 -1
  110. package/dist/utils/commandCatalog.d.ts +0 -25
  111. package/dist/utils/commandCatalog.d.ts.map +0 -1
  112. package/dist/utils/commandCatalog.js +0 -32
  113. package/dist/utils/commandCatalog.js.map +0 -1
  114. package/dist/utils/confirm.d.ts +0 -3
  115. package/dist/utils/confirm.d.ts.map +0 -1
  116. package/dist/utils/confirm.js +0 -12
  117. package/dist/utils/confirm.js.map +0 -1
  118. package/dist/utils/errors.d.ts +0 -22
  119. package/dist/utils/errors.d.ts.map +0 -1
  120. package/dist/utils/errors.js +0 -63
  121. package/dist/utils/errors.js.map +0 -1
  122. package/dist/utils/phaseShorthand.d.ts +0 -23
  123. package/dist/utils/phaseShorthand.d.ts.map +0 -1
  124. package/dist/utils/phaseShorthand.js +0 -68
  125. package/dist/utils/phaseShorthand.js.map +0 -1
  126. package/dist/utils/project.d.ts +0 -60
  127. package/dist/utils/project.d.ts.map +0 -1
  128. package/dist/utils/project.js +0 -140
  129. package/dist/utils/project.js.map +0 -1
  130. package/dist/utils/worktree-overlay.d.ts +0 -31
  131. package/dist/utils/worktree-overlay.d.ts.map +0 -1
  132. package/dist/utils/worktree-overlay.js +0 -63
  133. package/dist/utils/worktree-overlay.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerWorkflowCommands(program: Command): void;
3
- //# sourceMappingURL=workflow.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,204 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerWorktreeCommand(program: Command): void;
3
- //# sourceMappingURL=worktree.d.ts.map
@@ -1 +0,0 @@
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"}
@@ -1,371 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"worktree.js","sourceRoot":"","sources":["../../src/commands/worktree.ts"],"names":[],"mappings":"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"}