@context-forge/cli 0.8.3 → 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,550 +0,0 @@
1
- import * as os from 'node:os';
2
- import { join } from 'node:path';
3
- import { readFile } from 'node:fs/promises';
4
- import { readdirSync } from 'node:fs';
5
- import { FileProjectStore, resolveFileByIndex, resolveArtifactPath, deriveArtifactStem, parseSlicePlan, WorktreeService, computeAutoSetFields, normalizeArtifactValue } from '@context-forge/core/node';
6
- import { resolveFieldName, resolvePhaseValue, validateFieldValue, PROJECT_FIELDS, FIELD_GROUPS, applyWorktreeOverlay, WORKTREE_SCOPED_FIELDS, PROJECT_TO_WORKTREE_FIELD, formatDateProject, } from '@context-forge/core';
7
- import { resolveProjectId, resolveProjectWorktree, findProjectByCwd } from '../utils/project.js';
8
- import { withJsonOption, withProjectOption, withYesOption, withProjectLevelOption } from '../options.js';
9
- import { resolveProject } from '@context-forge/core';
10
- import { resolveOperationPath, getWorktreeIndexRange, getWorktreeRangeOverride, isInIndexRange } from '../utils/worktree-overlay.js';
11
- import { handleError, UserError } from '../utils/errors.js';
12
- import { askConfirmation } from '../utils/confirm.js';
13
- import { printJson } from '../output/formatter.js';
14
- import { renderTable } from '../output/tables.js';
15
- import { label, value as valueStyle, success, dim, warn } from '../output/styles.js';
16
- /** Matches `N. [ ] **(NNN) Initiative Name** — ...` in initiative plan files */
17
- const INITIATIVE_ENTRY_RE = /^\d+\.\s+\[[ xX]\]\s+\*\*\((\d+)\)\s+(.+?)\*\*/;
18
- /**
19
- * Find and parse the initiative plan file (e.g., 001-initiative-plan.*.md)
20
- * in project-guides/. Returns entries with index and name.
21
- */
22
- async function parseInitiativePlanEntries(basePath) {
23
- const guidesDir = join(basePath, 'project-documents/user/project-guides');
24
- let files;
25
- try {
26
- files = readdirSync(guidesDir);
27
- }
28
- catch {
29
- return [];
30
- }
31
- const planFile = files.find((f) => f.includes('initiative-plan') && f.endsWith('.md'));
32
- if (!planFile)
33
- return [];
34
- const content = await readFile(join(guidesDir, planFile), 'utf-8');
35
- const entries = [];
36
- for (const line of content.split('\n')) {
37
- const m = INITIATIVE_ENTRY_RE.exec(line.trim());
38
- if (m) {
39
- entries.push({ index: parseInt(m[1], 10), name: m[2].trim() });
40
- }
41
- }
42
- return entries;
43
- }
44
- /**
45
- * When a numeric index doesn't match an existing file, try to derive the stem
46
- * from the appropriate plan document.
47
- *
48
- * - fileSlice / fileTasks: looks up the slice plan
49
- * - fileArch / fileSlicePlan: looks up the initiative plan
50
- */
51
- async function deriveFromPlan(project, field, index, operationPath) {
52
- const basePath = operationPath ?? project.projectPath;
53
- if (!basePath)
54
- return null;
55
- const numericIndex = parseInt(index, 10);
56
- // fileSlice / fileTasks: derive from slice plan
57
- if (field === 'fileSlice' || field === 'fileTasks') {
58
- if (!project.fileSlicePlan)
59
- return null;
60
- const planRelPath = resolveArtifactPath('fileSlicePlan', project.fileSlicePlan);
61
- if (!planRelPath)
62
- return null;
63
- const plan = await parseSlicePlan(join(basePath, planRelPath));
64
- const entry = plan.entries.find((e) => e.index === numericIndex);
65
- if (!entry)
66
- return null;
67
- return deriveArtifactStem(field, index, entry.name);
68
- }
69
- // fileArch / fileSlicePlan: derive from initiative plan
70
- if (field === 'fileArch' || field === 'fileSlicePlan') {
71
- const entries = await parseInitiativePlanEntries(basePath);
72
- const entry = entries.find((e) => e.index === numericIndex);
73
- if (!entry)
74
- return null;
75
- return deriveArtifactStem(field, index, entry.name);
76
- }
77
- return null;
78
- }
79
- /** Shorten an absolute path by replacing the home directory with ~. */
80
- function shortenPath(p) {
81
- const home = os.homedir();
82
- if (p === home)
83
- return '~';
84
- if (p.startsWith(home + '/'))
85
- return '~' + p.slice(home.length);
86
- return p;
87
- }
88
- function isWorktreeField(field) {
89
- return WORKTREE_SCOPED_FIELDS.has(field);
90
- }
91
- /** Display the project schema grouped by category. */
92
- function displaySchema() {
93
- const groupLabels = {
94
- identity: 'Identity',
95
- artifacts: 'Artifacts',
96
- workflow: 'Workflow',
97
- metadata: 'Metadata',
98
- custom: 'Custom',
99
- };
100
- const rows = [];
101
- const rowPrefixes = [];
102
- const enumFields = [];
103
- for (const group of FIELD_GROUPS) {
104
- const groupFields = PROJECT_FIELDS.filter((f) => f.group === group);
105
- // Group separator row
106
- rows.push([label(groupLabels[group]), '', '']);
107
- rowPrefixes.push(' ');
108
- for (const f of groupFields) {
109
- const alias = f.aliases.length > 0 ? f.aliases.join(', ') : '';
110
- const flags = [];
111
- if (f.required)
112
- flags.push('required');
113
- if (f.readonly)
114
- flags.push('readonly');
115
- const desc = flags.length > 0 ? `${f.description} ${dim(`(${flags.join(', ')})`)}` : f.description;
116
- rows.push([f.field, alias, desc]);
117
- rowPrefixes.push(' ');
118
- if (f.enumValues) {
119
- enumFields.push({ name: f.aliases[0] ?? f.field, values: f.enumValues });
120
- }
121
- }
122
- }
123
- console.log(label('\nProject Schema') + dim(' (all fields are strings)'));
124
- console.log('══════════════');
125
- console.log(renderTable(['Field', 'Alias', 'Description'], rows, rowPrefixes));
126
- if (enumFields.length > 0) {
127
- console.log(dim('\n Allowed values:'));
128
- for (const { name, values } of enumFields) {
129
- console.log(dim(` ${name}: ${values.join(' | ')}`));
130
- }
131
- }
132
- }
133
- /** Generate help text showing settable fields grouped by category. */
134
- export function buildSettableFieldsHelp() {
135
- const groupLabels = {
136
- identity: 'Identity',
137
- artifacts: 'Artifacts',
138
- workflow: 'Workflow',
139
- metadata: 'Metadata',
140
- custom: 'Custom',
141
- };
142
- const lines = ['', 'Settable fields:'];
143
- for (const group of FIELD_GROUPS) {
144
- const groupFields = PROJECT_FIELDS.filter((f) => f.group === group && !f.readonly);
145
- if (groupFields.length === 0)
146
- continue;
147
- lines.push(` ${groupLabels[group]}`);
148
- for (const f of groupFields) {
149
- const aliasStr = f.aliases.length > 0 ? ` (${f.aliases.join(', ')})` : '';
150
- lines.push(` ${(f.field + aliasStr).padEnd(30)} ${f.description}`);
151
- }
152
- }
153
- lines.push('', "Run 'cf project --schema' for full details including allowed values.");
154
- return lines.join('\n');
155
- }
156
- /** Shared action handler for `cf set` and `cf project set`. */
157
- export async function projectSetAction(field, val, opts) {
158
- const resolvedField = resolveFieldName(field);
159
- if (!resolvedField) {
160
- throw new UserError(`Unknown field: '${field}'.`, 'FIELD_NOT_FOUND', `Run 'cf project --schema' to see available fields.`);
161
- }
162
- const fieldDef = PROJECT_FIELDS.find((f) => f.field === resolvedField);
163
- if (fieldDef?.readonly) {
164
- throw new UserError(`Field '${resolvedField}' is read-only and cannot be set.`, 'READ_ONLY');
165
- }
166
- let resolvedValue = val;
167
- if (resolvedField === 'developmentPhase' || resolvedField === 'instruction') {
168
- const phaseVal = resolvePhaseValue(val);
169
- if (!phaseVal) {
170
- const allowed = fieldDef?.enumValues?.join(', ') ?? '';
171
- throw new UserError(`Invalid value "${val}" for field "${resolvedField}".`, 'INVALID_VALUE', `Allowed values: ${allowed}`);
172
- }
173
- resolvedValue = phaseVal;
174
- }
175
- // Shorthand: `cf set date now` or `cf set date` → today's date in YYYYMMDD
176
- if (resolvedField === 'dateProject' && (!resolvedValue || resolvedValue === 'now')) {
177
- resolvedValue = formatDateProject();
178
- }
179
- const validation = validateFieldValue(resolvedField, resolvedValue);
180
- if (!validation.valid) {
181
- throw new UserError(validation.error, 'INVALID_VALUE');
182
- }
183
- const store = new FileProjectStore();
184
- const resolved = await resolveProjectWorktree({ project: opts.project }, store);
185
- const id = resolved.id;
186
- const worktreeId = resolved.worktreeId;
187
- const existing = await store.getById(id);
188
- if (!existing) {
189
- throw new UserError(`Project not found: '${id}'.`, 'PROJECT_NOT_FOUND', `Run cf project list to see available projects.`);
190
- }
191
- // Index-based file resolution: cf set slice 171 → scans for matching file
192
- // Falls back to slice plan entry name if file doesn't exist on disk
193
- const opPath = resolveOperationPath(existing, worktreeId);
194
- // Warn on non-numeric artifact values that don't match expected patterns
195
- // Valid patterns: numeric index (handled below), or NNN-type.name stem
196
- if (fieldDef?.group === 'artifacts' && !/^\d+$/.test(resolvedValue) && !/^\d+-\w+\./.test(resolvedValue)) {
197
- process.stderr.write(`Warning: '${resolvedValue}' doesn't look like a valid artifact value.\n` +
198
- ` Expected a numeric index (e.g. 200) or artifact stem (e.g. 200-slice.my-feature).\n` +
199
- ` Setting anyway — use cf unset ${fieldDef.aliases[0] ?? resolvedField} to revert.\n`);
200
- }
201
- // Normalize artifact values: strip directory prefix and .md suffix so that
202
- // full paths (e.g. "project-documents/user/architecture/100-arch.foo.md")
203
- // and stems with extensions ("100-arch.foo.md") are reduced to bare stems
204
- // ("100-arch.foo") before storage. This prevents resolveArtifactPath from
205
- // doubling the directory when the value is used later.
206
- if (fieldDef?.group === 'artifacts') {
207
- const stripped = normalizeArtifactValue(resolvedValue);
208
- if (stripped !== resolvedValue) {
209
- process.stderr.write(` Normalized '${resolvedValue}' → '${stripped}'\n`);
210
- resolvedValue = stripped;
211
- }
212
- }
213
- if (fieldDef?.group === 'artifacts' && /^\d+$/.test(resolvedValue) && opPath) {
214
- // Use worktree-resolved project for slice plan lookup (project-level fields
215
- // may be cleared after migration, but the worktree context has the values)
216
- const overlaid = await resolveProject(store, id, worktreeId) ?? existing;
217
- try {
218
- const fileResolved = resolveFileByIndex(opPath, resolvedField, resolvedValue);
219
- if (fileResolved !== null) {
220
- resolvedValue = fileResolved;
221
- }
222
- }
223
- catch {
224
- // File doesn't exist — try deriving from slice plan
225
- const derived = await deriveFromPlan(overlaid, resolvedField, resolvedValue, opPath);
226
- if (derived) {
227
- resolvedValue = derived;
228
- }
229
- else {
230
- const searchedPlan = (resolvedField === 'fileSlice' || resolvedField === 'fileTasks')
231
- ? overlaid.fileSlicePlan
232
- : 'initiative plan';
233
- const hint = searchedPlan
234
- ? `Searched '${searchedPlan}' — no entry for index ${resolvedValue}. If this index belongs to a different initiative, switch with cf set arch <initiative-index> first.`
235
- : `No slice plan is set. Set one with: cf set arch <initiative-index>`;
236
- throw new UserError(`No file matching index '${resolvedValue}' for field '${resolvedField}'.`, 'ARTIFACT_NOT_FOUND', hint);
237
- }
238
- }
239
- // Warn if index is outside worktree's range (suppressed when worktree has rangeOverride)
240
- const indexRange = getWorktreeIndexRange(existing, worktreeId);
241
- const numericIndex = parseInt(resolvedValue, 10) || parseInt(/^(\d+)/.exec(resolvedValue)?.[1] ?? '', 10);
242
- const worktreeHasOverride = getWorktreeRangeOverride(existing, worktreeId);
243
- if (indexRange && !isNaN(numericIndex) && !isInIndexRange(numericIndex, indexRange) && !worktreeHasOverride) {
244
- process.stderr.write(warn(`Warning: index ${numericIndex} is outside this worktree's range [${indexRange[0]}-${indexRange[1]}]\n`));
245
- }
246
- }
247
- // Determine worktree context name for display
248
- const worktreeName = worktreeId
249
- ? (existing.worktrees ?? []).find((wt) => wt.id === worktreeId)?.name
250
- : undefined;
251
- // Idempotency check: skip write if value is already set
252
- const currentValue = (() => {
253
- if (worktreeId && isWorktreeField(resolvedField) && !opts.projectLevel) {
254
- const wt = (existing.worktrees ?? []).find((w) => w.id === worktreeId);
255
- if (wt) {
256
- const wtField = PROJECT_TO_WORKTREE_FIELD[resolvedField] ?? resolvedField;
257
- return wt[wtField];
258
- }
259
- return undefined;
260
- }
261
- if (resolvedField.startsWith('customData.')) {
262
- const subField = resolvedField.split('.')[1];
263
- return existing.customData?.[subField];
264
- }
265
- return existing[resolvedField];
266
- })();
267
- if (currentValue === resolvedValue) {
268
- const displayName = fieldDef?.aliases[0] ?? resolvedField;
269
- const scope = worktreeName ? ` on worktree context "${worktreeName}"` : '';
270
- process.stderr.write(`${displayName} already set to ${resolvedValue}${scope}\n`);
271
- return;
272
- }
273
- // Route worktree-scoped fields to WorktreeService when worktree is resolved
274
- if (worktreeId && isWorktreeField(resolvedField) && !opts.projectLevel) {
275
- const svc = new WorktreeService(store);
276
- const wtField = PROJECT_TO_WORKTREE_FIELD[resolvedField] ?? resolvedField;
277
- // Compute auto-set derived fields
278
- const autoSet = computeAutoSetFields(resolvedField, resolvedValue, opPath);
279
- // Build worktree update: primary field + derived fields (mapped to worktree names)
280
- const wtUpdate = { [wtField]: resolvedValue };
281
- for (const [derivedField, derivedValue] of Object.entries(autoSet.derivedUpdates)) {
282
- const derivedWtField = PROJECT_TO_WORKTREE_FIELD[derivedField] ?? derivedField;
283
- wtUpdate[derivedWtField] = derivedValue;
284
- }
285
- await svc.updateWorktree(id, worktreeId, wtUpdate);
286
- // Log auto-set descriptions to stderr (status output, not data)
287
- for (const desc of autoSet.descriptions) {
288
- process.stderr.write(success(`Updated ${desc} on worktree context "${worktreeName}"`) + '\n');
289
- }
290
- const displayName = fieldDef?.aliases[0] ?? resolvedField;
291
- process.stderr.write(success(`Updated ${displayName} = ${resolvedValue} on worktree context "${worktreeName}"`) + '\n');
292
- return;
293
- }
294
- // Project-level update (no worktree, or --project-level, or non-worktree field)
295
- // Compute auto-set derived fields
296
- const autoSet = computeAutoSetFields(resolvedField, resolvedValue, opPath);
297
- const allUpdates = { [resolvedField]: resolvedValue, ...autoSet.derivedUpdates };
298
- if (resolvedField.startsWith('customData.')) {
299
- const subField = resolvedField.split('.')[1];
300
- const merged = { ...existing.customData, [subField]: resolvedValue };
301
- await store.update(id, { customData: merged });
302
- // Apply any derived updates separately (unlikely for customData, but consistent)
303
- if (Object.keys(autoSet.derivedUpdates).length > 0) {
304
- await store.update(id, autoSet.derivedUpdates);
305
- }
306
- }
307
- else {
308
- await store.update(id, allUpdates);
309
- }
310
- // Log auto-set descriptions to stderr (status output, not data)
311
- for (const desc of autoSet.descriptions) {
312
- process.stderr.write(success(`Updated ${desc}`) + '\n');
313
- }
314
- const displayName = fieldDef?.aliases[0] ?? resolvedField;
315
- process.stderr.write(success(`Updated ${displayName} = ${resolvedValue} on project ${existing.name}`) + '\n');
316
- }
317
- /** Shared action handler for `cf unset` and `cf project unset`. */
318
- export async function projectUnsetAction(field, opts) {
319
- const resolvedField = resolveFieldName(field);
320
- if (!resolvedField) {
321
- throw new UserError(`Unknown field: '${field}'.`, 'FIELD_NOT_FOUND', `Run 'cf project --schema' to see available fields.`);
322
- }
323
- const fieldDef = PROJECT_FIELDS.find((f) => f.field === resolvedField);
324
- if (fieldDef?.required) {
325
- throw new UserError(`Cannot unset required field '${resolvedField}'.`, 'INVALID_ARGUMENT');
326
- }
327
- if (fieldDef?.readonly) {
328
- throw new UserError(`Cannot unset read-only field '${resolvedField}'.`, 'READ_ONLY');
329
- }
330
- const store = new FileProjectStore();
331
- const resolved = await resolveProjectWorktree({ project: opts.project }, store);
332
- const id = resolved.id;
333
- const worktreeId = resolved.worktreeId;
334
- const existing = await store.getById(id);
335
- if (!existing) {
336
- throw new UserError(`Project not found: '${id}'.`, 'PROJECT_NOT_FOUND', `Run cf project list to see available projects.`);
337
- }
338
- const worktreeName = worktreeId
339
- ? (existing.worktrees ?? []).find((wt) => wt.id === worktreeId)?.name
340
- : undefined;
341
- const displayName = fieldDef?.aliases[0] ?? resolvedField;
342
- if (worktreeId && isWorktreeField(resolvedField) && !opts.projectLevel) {
343
- const svc = new WorktreeService(store);
344
- const wtField = PROJECT_TO_WORKTREE_FIELD[resolvedField] ?? resolvedField;
345
- await svc.updateWorktree(id, worktreeId, { [wtField]: undefined });
346
- process.stderr.write(success(`Unset ${displayName} on worktree context "${worktreeName}"`) + '\n');
347
- }
348
- else {
349
- await store.update(id, { [resolvedField]: undefined });
350
- process.stderr.write(success(`Unset ${displayName} on project ${existing.name}`) + '\n');
351
- }
352
- }
353
- function buildProjectGetView(project, worktree) {
354
- const overlaid = worktree
355
- ? applyWorktreeOverlay(project, worktree.id)
356
- : project;
357
- const overlaidRecord = overlaid;
358
- const sourceCustom = overlaid.customData;
359
- const values = {};
360
- const customData = {};
361
- for (const f of PROJECT_FIELDS) {
362
- if (f.field.startsWith('customData.')) {
363
- const subField = f.field.split('.')[1];
364
- customData[subField] = sourceCustom?.[subField];
365
- }
366
- else {
367
- values[f.field] = overlaidRecord[f.field];
368
- }
369
- }
370
- return worktree ? { values, customData, worktree } : { values, customData };
371
- }
372
- /** Flatten the schema-filtered view into a single top-level object for JSON output. */
373
- function flattenProjectGetView(view) {
374
- const flat = { ...view.values, customData: view.customData };
375
- if (view.worktree)
376
- flat.worktree = view.worktree;
377
- return flat;
378
- }
379
- /** Shared action handler for `cf get` and `cf project get`. */
380
- export async function projectGetAction(opts) {
381
- const store = new FileProjectStore();
382
- const resolved = await resolveProjectWorktree({ project: opts.project }, store);
383
- const project = await store.getById(resolved.id);
384
- if (!project) {
385
- throw new UserError(`Project not found: '${resolved.id}'.`, 'PROJECT_NOT_FOUND', `Run cf project list to see available projects.`);
386
- }
387
- const worktreeId = resolved.worktreeId;
388
- const worktree = worktreeId && !opts.projectLevel
389
- ? (project.worktrees ?? []).find((wt) => wt.id === worktreeId)
390
- : undefined;
391
- const view = buildProjectGetView(project, worktree);
392
- if (opts.json) {
393
- printJson(flattenProjectGetView(view));
394
- return;
395
- }
396
- const groupLabels = {
397
- identity: 'Identity',
398
- artifacts: 'Artifacts',
399
- workflow: 'Workflow',
400
- metadata: 'Metadata',
401
- custom: 'Custom',
402
- };
403
- if (view.worktree) {
404
- console.log(`\n${label('Worktree')}`);
405
- console.log(` ${label('Name:'.padEnd(16))}${valueStyle(view.worktree.name)}`);
406
- console.log(` ${label('Range:'.padEnd(16))}${valueStyle(`${view.worktree.indexRange[0]}-${view.worktree.indexRange[1]}`)}`);
407
- if (view.worktree.worktreePath) {
408
- console.log(` ${label('Path:'.padEnd(16))}${valueStyle(view.worktree.worktreePath)}`);
409
- }
410
- }
411
- for (const group of FIELD_GROUPS) {
412
- const groupFields = PROJECT_FIELDS.filter((f) => f.group === group);
413
- console.log(`\n${label(groupLabels[group])}`);
414
- for (const f of groupFields) {
415
- let v;
416
- if (f.field.startsWith('customData.')) {
417
- v = view.customData[f.field.split('.')[1]];
418
- }
419
- else {
420
- v = view.values[f.field];
421
- }
422
- const hasValue = v !== undefined && v !== null && v !== '';
423
- const display = hasValue ? valueStyle(String(v)) : dim('—');
424
- console.log(` ${label(`${f.label}:`.padEnd(16))}${display}`);
425
- }
426
- }
427
- }
428
- /** Shared action handler for listing all projects. */
429
- export async function projectListAction(opts) {
430
- const store = new FileProjectStore();
431
- const projects = await store.getAll();
432
- const cwdMatch = await findProjectByCwd(store);
433
- const activeId = cwdMatch?.project.id ?? null;
434
- if (opts.json) {
435
- printJson(projects.map((p) => ({
436
- id: p.id,
437
- name: p.name,
438
- projectPath: p.projectPath,
439
- fileSlice: p.fileSlice,
440
- isActive: p.id === activeId,
441
- })));
442
- return;
443
- }
444
- const rows = projects.map((p) => {
445
- const active = p.id === activeId;
446
- const name = p.name;
447
- const path = shortenPath(p.projectPath ?? '');
448
- const slice = p.fileSlice ?? '';
449
- return active
450
- ? [success(name), success(path), success(slice)]
451
- : [name, path, slice];
452
- });
453
- const prefixes = projects.map((p) => p.id === activeId ? success('* ') : ' ');
454
- console.log(renderTable(['Name', 'Path', 'Slice'], rows, prefixes));
455
- }
456
- export function registerProjectCommand(program) {
457
- const cmd = program
458
- .command('project')
459
- .description('Manage Context Forge projects')
460
- .option('--schema', 'Display project field schema')
461
- .action((opts) => {
462
- if (opts.schema) {
463
- displaySchema();
464
- }
465
- else {
466
- console.log(`Usage: ${label('cf project')} [options] [command] — run ${dim('cf project --help')} for details`);
467
- }
468
- });
469
- const listCmd = cmd.command('list').description('List all projects');
470
- withJsonOption(listCmd);
471
- listCmd.action(async (opts) => {
472
- try {
473
- await projectListAction(opts);
474
- }
475
- catch (err) {
476
- handleError(err);
477
- }
478
- });
479
- const getCmd = cmd.command('get').description('Get details for the active project');
480
- withJsonOption(getCmd);
481
- withProjectOption(getCmd);
482
- withProjectLevelOption(getCmd);
483
- getCmd.action(async (opts) => {
484
- try {
485
- await projectGetAction(opts);
486
- }
487
- catch (err) {
488
- handleError(err);
489
- }
490
- });
491
- const setCmd = cmd.command('set [field] [value]').description('Update a field on the active project');
492
- withProjectOption(setCmd);
493
- withProjectLevelOption(setCmd);
494
- setCmd.addHelpText('after', buildSettableFieldsHelp)
495
- .action(async (field, val, opts) => {
496
- // Allow `cf project set date` (no value) as shorthand for `cf project set date now`
497
- const resolvedVal = (!val && field && /^date/i.test(field)) ? 'now' : val;
498
- if (!field || !resolvedVal) {
499
- console.log(`Usage: cf project set [options] <field> <value> — run cf project set --help for details`);
500
- return;
501
- }
502
- try {
503
- await projectSetAction(field, resolvedVal, opts);
504
- }
505
- catch (err) {
506
- handleError(err);
507
- }
508
- });
509
- const unsetCmd = cmd.command('unset [field]').description('Unset (clear) a field on the active project');
510
- withProjectOption(unsetCmd);
511
- withProjectLevelOption(unsetCmd);
512
- unsetCmd.action(async (field, opts) => {
513
- if (!field) {
514
- console.log(`Usage: cf project unset [options] <field> — run cf project unset --help for details`);
515
- return;
516
- }
517
- try {
518
- await projectUnsetAction(field, opts);
519
- }
520
- catch (err) {
521
- handleError(err);
522
- }
523
- });
524
- const rmCmd = cmd.command('rm [nameOrId]').description('Remove a project from Context Forge (files on disk are not deleted)');
525
- withProjectOption(rmCmd);
526
- withYesOption(rmCmd);
527
- rmCmd.action(async (nameOrId, opts) => {
528
- try {
529
- const store = new FileProjectStore();
530
- const { id } = await resolveProjectId(nameOrId ?? opts.project, store);
531
- const project = await store.getById(id);
532
- if (!project) {
533
- throw new UserError(`Project not found: '${id}'.`, 'PROJECT_NOT_FOUND', `Run cf project list to see available projects.`);
534
- }
535
- if (!opts.yes) {
536
- const answer = await askConfirmation(`Remove project '${project.name}' at ${project.projectPath ?? 'unknown'} from Context Forge? (files on disk will not be deleted) [y/N] `);
537
- if (!answer) {
538
- console.log('Cancelled.');
539
- return;
540
- }
541
- }
542
- await store.delete(id);
543
- console.log(success(`Project '${project.name}' removed.`));
544
- }
545
- catch (err) {
546
- handleError(err);
547
- }
548
- });
549
- }
550
- //# sourceMappingURL=project.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
@@ -1,3 +0,0 @@
1
- import { Command } from 'commander';
2
- export declare function registerPromptCommand(program: Command): void;
3
- //# sourceMappingURL=prompt.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiCpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkG5D"}