@context-forge/cli 0.2.2

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 (71) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +116 -0
  3. package/dist/commands/build.d.ts +3 -0
  4. package/dist/commands/build.d.ts.map +1 -0
  5. package/dist/commands/build.js +51 -0
  6. package/dist/commands/build.js.map +1 -0
  7. package/dist/commands/check.d.ts +3 -0
  8. package/dist/commands/check.d.ts.map +1 -0
  9. package/dist/commands/check.js +13 -0
  10. package/dist/commands/check.js.map +1 -0
  11. package/dist/commands/config.d.ts +3 -0
  12. package/dist/commands/config.d.ts.map +1 -0
  13. package/dist/commands/config.js +82 -0
  14. package/dist/commands/config.js.map +1 -0
  15. package/dist/commands/future.d.ts +3 -0
  16. package/dist/commands/future.d.ts.map +1 -0
  17. package/dist/commands/future.js +49 -0
  18. package/dist/commands/future.js.map +1 -0
  19. package/dist/commands/guides.d.ts +3 -0
  20. package/dist/commands/guides.d.ts.map +1 -0
  21. package/dist/commands/guides.js +116 -0
  22. package/dist/commands/guides.js.map +1 -0
  23. package/dist/commands/init.d.ts +3 -0
  24. package/dist/commands/init.d.ts.map +1 -0
  25. package/dist/commands/init.js +36 -0
  26. package/dist/commands/init.js.map +1 -0
  27. package/dist/commands/next.d.ts +3 -0
  28. package/dist/commands/next.d.ts.map +1 -0
  29. package/dist/commands/next.js +80 -0
  30. package/dist/commands/next.js.map +1 -0
  31. package/dist/commands/project.d.ts +3 -0
  32. package/dist/commands/project.d.ts.map +1 -0
  33. package/dist/commands/project.js +239 -0
  34. package/dist/commands/project.js.map +1 -0
  35. package/dist/commands/prompt.d.ts +3 -0
  36. package/dist/commands/prompt.d.ts.map +1 -0
  37. package/dist/commands/prompt.js +111 -0
  38. package/dist/commands/prompt.js.map +1 -0
  39. package/dist/commands/status.d.ts +3 -0
  40. package/dist/commands/status.d.ts.map +1 -0
  41. package/dist/commands/status.js +79 -0
  42. package/dist/commands/status.js.map +1 -0
  43. package/dist/index.d.ts +3 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +47 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/output/formatter.d.ts +6 -0
  48. package/dist/output/formatter.d.ts.map +1 -0
  49. package/dist/output/formatter.js +9 -0
  50. package/dist/output/formatter.js.map +1 -0
  51. package/dist/output/styles.d.ts +15 -0
  52. package/dist/output/styles.d.ts.map +1 -0
  53. package/dist/output/styles.js +16 -0
  54. package/dist/output/styles.js.map +1 -0
  55. package/dist/output/tables.d.ts +6 -0
  56. package/dist/output/tables.d.ts.map +1 -0
  57. package/dist/output/tables.js +42 -0
  58. package/dist/output/tables.js.map +1 -0
  59. package/dist/utils/errors.d.ts +13 -0
  60. package/dist/utils/errors.d.ts.map +1 -0
  61. package/dist/utils/errors.js +27 -0
  62. package/dist/utils/errors.js.map +1 -0
  63. package/dist/utils/phaseShorthand.d.ts +23 -0
  64. package/dist/utils/phaseShorthand.d.ts.map +1 -0
  65. package/dist/utils/phaseShorthand.js +68 -0
  66. package/dist/utils/phaseShorthand.js.map +1 -0
  67. package/dist/utils/project.d.ts +28 -0
  68. package/dist/utils/project.d.ts.map +1 -0
  69. package/dist/utils/project.js +81 -0
  70. package/dist/utils/project.js.map +1 -0
  71. package/package.json +48 -0
@@ -0,0 +1,80 @@
1
+ import { FileProjectStore, ArtifactIntrospector } from '@context-forge/core/node';
2
+ import { resolveProjectId } from '../utils/project.js';
3
+ import { handleError, UserError } from '../utils/errors.js';
4
+ import { printJson } from '../output/formatter.js';
5
+ import { label, value as valueStyle, dim } from '../output/styles.js';
6
+ /**
7
+ * Derive a basic "next action" recommendation from project data and introspection.
8
+ *
9
+ * NOTE: This is a provisional implementation. Full workflow navigation
10
+ * (WorkflowNavigator.getNext()) depends on slice 165, which is not yet complete.
11
+ * This version uses ArtifactIntrospector to provide basic guidance.
12
+ */
13
+ function deriveRecommendation(project, introspection) {
14
+ const phase = project.developmentPhase ?? 'Not set';
15
+ const slice = project.fileSlice;
16
+ if (introspection?.currentTasks) {
17
+ const { completedTasks, totalTasks, inferredStatus } = introspection.currentTasks;
18
+ if (inferredStatus === 'complete') {
19
+ return {
20
+ recommendation: 'Advance to next phase or slice',
21
+ slice,
22
+ phase,
23
+ rationale: `All ${totalTasks} tasks complete in current task file.`,
24
+ };
25
+ }
26
+ const remaining = totalTasks - completedTasks;
27
+ return {
28
+ recommendation: 'Continue current tasks',
29
+ slice,
30
+ phase,
31
+ rationale: `${remaining} of ${totalTasks} tasks remaining in ${project.fileTasks}.`,
32
+ };
33
+ }
34
+ return {
35
+ recommendation: 'Review project configuration',
36
+ slice,
37
+ phase,
38
+ rationale: 'No task file data available. Verify fileTasks and projectPath are set.',
39
+ };
40
+ }
41
+ export function registerNextCommand(program) {
42
+ program
43
+ .command('next')
44
+ .description('Show recommended next action for the active project')
45
+ .option('--json', 'Output as JSON')
46
+ .option('--project <id>', 'Project ID (overrides default)')
47
+ .action(async (opts) => {
48
+ try {
49
+ const store = new FileProjectStore();
50
+ const { id } = await resolveProjectId(opts.project, store);
51
+ const project = await store.getById(id);
52
+ if (!project) {
53
+ throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
54
+ }
55
+ let introspection;
56
+ if (project.projectPath) {
57
+ try {
58
+ const introspector = new ArtifactIntrospector();
59
+ introspection = await introspector.summarize(project);
60
+ }
61
+ catch {
62
+ // Graceful degradation
63
+ }
64
+ }
65
+ const result = deriveRecommendation(project, introspection);
66
+ if (opts.json) {
67
+ printJson(result);
68
+ return;
69
+ }
70
+ console.log(label('Next: ') + valueStyle(result.recommendation));
71
+ console.log(label('Slice: ') + valueStyle(result.slice));
72
+ console.log(label('Phase: ') + valueStyle(result.phase));
73
+ console.log(label('Rationale: ') + dim(result.rationale));
74
+ }
75
+ catch (err) {
76
+ handleError(err);
77
+ }
78
+ });
79
+ }
80
+ //# sourceMappingURL=next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerProjectCommand(program: Command): void;
3
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA4M7D"}
@@ -0,0 +1,239 @@
1
+ import * as os from 'node:os';
2
+ import * as readline from 'node:readline';
3
+ import { FileProjectStore, ConfigManager } from '@context-forge/core/node';
4
+ import { resolveFieldName, resolvePhaseValue, validateFieldValue, PROJECT_FIELDS, FIELD_GROUPS, } from '@context-forge/core';
5
+ import { resolveProjectId, findByNameOrId } from '../utils/project.js';
6
+ import { handleError, UserError } from '../utils/errors.js';
7
+ import { printJson } from '../output/formatter.js';
8
+ import { renderTable } from '../output/tables.js';
9
+ import { label, value as valueStyle, success, dim } from '../output/styles.js';
10
+ /** Shorten an absolute path by replacing the home directory with ~. */
11
+ function shortenPath(p) {
12
+ const home = os.homedir();
13
+ if (p === home)
14
+ return '~';
15
+ if (p.startsWith(home + '/'))
16
+ return '~' + p.slice(home.length);
17
+ return p;
18
+ }
19
+ /** Display the project schema grouped by category. */
20
+ function displaySchema() {
21
+ const groupLabels = {
22
+ identity: 'Identity',
23
+ artifacts: 'Artifacts',
24
+ workflow: 'Workflow',
25
+ metadata: 'Metadata',
26
+ };
27
+ console.log(label('\nProject Schema'));
28
+ console.log('══════════════');
29
+ for (const group of FIELD_GROUPS) {
30
+ const groupFields = PROJECT_FIELDS.filter((f) => f.group === group);
31
+ console.log(`\n${label(groupLabels[group])}`);
32
+ for (const f of groupFields) {
33
+ const flags = [];
34
+ if (f.required)
35
+ flags.push('required');
36
+ if (f.readonly)
37
+ flags.push('readonly');
38
+ const flagStr = flags.length > 0 ? ` (${flags.join(', ')})` : '';
39
+ console.log(` ${f.field.padEnd(18)}${f.type.padEnd(10)}${flagStr} ${f.description}`);
40
+ if (f.aliases.length > 0) {
41
+ console.log(`${''.padEnd(20)}Aliases: ${f.aliases.join(', ')}`);
42
+ }
43
+ if (f.enumValues) {
44
+ console.log(`${''.padEnd(20)}Values: ${f.enumValues.join(', ')}`);
45
+ }
46
+ }
47
+ }
48
+ }
49
+ export function registerProjectCommand(program) {
50
+ const cmd = program
51
+ .command('project')
52
+ .description('Manage Context Forge projects')
53
+ .option('--schema', 'Display project field schema')
54
+ .action((opts) => {
55
+ if (opts.schema) {
56
+ displaySchema();
57
+ }
58
+ else {
59
+ console.log(`Usage: ${label('cf project')} [options] [command] — run ${dim('cf project --help')} for details`);
60
+ }
61
+ });
62
+ cmd
63
+ .command('list')
64
+ .description('List all projects')
65
+ .option('--json', 'Output as JSON')
66
+ .action(async (opts) => {
67
+ try {
68
+ const store = new FileProjectStore();
69
+ const projects = await store.getAll();
70
+ // Read default_project config to determine which project is the default
71
+ const cm = new ConfigManager();
72
+ const defaultRef = (await cm.get('default_project')).value;
73
+ let defaultProject = null;
74
+ if (defaultRef) {
75
+ defaultProject = await findByNameOrId(defaultRef, store);
76
+ }
77
+ if (opts.json) {
78
+ printJson(projects.map((p) => ({
79
+ id: p.id,
80
+ name: p.name,
81
+ projectPath: p.projectPath,
82
+ fileSlice: p.fileSlice,
83
+ isDefault: defaultProject?.id === p.id,
84
+ })));
85
+ return;
86
+ }
87
+ const rows = projects.map((p) => [
88
+ p.name,
89
+ shortenPath(p.projectPath ?? ''),
90
+ p.fileSlice,
91
+ defaultProject?.id === p.id ? '●' : '',
92
+ ]);
93
+ console.log(renderTable(['Name', 'Path', 'Slice', 'Default'], rows));
94
+ }
95
+ catch (err) {
96
+ handleError(err);
97
+ }
98
+ });
99
+ cmd
100
+ .command('get')
101
+ .description('Get details for the active project')
102
+ .option('--json', 'Output as JSON')
103
+ .option('--project <id>', 'Project ID (overrides default)')
104
+ .action(async (opts) => {
105
+ try {
106
+ const store = new FileProjectStore();
107
+ const { id } = await resolveProjectId(opts.project, store);
108
+ const project = await store.getById(id);
109
+ if (!project) {
110
+ throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
111
+ }
112
+ if (opts.json) {
113
+ printJson(project);
114
+ return;
115
+ }
116
+ // Grouped display — iterate by group, skip empty groups
117
+ const groupLabels = {
118
+ identity: 'Identity',
119
+ artifacts: 'Artifacts',
120
+ workflow: 'Workflow',
121
+ metadata: 'Metadata',
122
+ };
123
+ const projectRecord = project;
124
+ for (const group of FIELD_GROUPS) {
125
+ const groupFields = PROJECT_FIELDS.filter((f) => f.group === group);
126
+ const populated = groupFields.filter((f) => {
127
+ const val = projectRecord[f.field];
128
+ return val !== undefined && val !== null && val !== '';
129
+ });
130
+ if (populated.length === 0)
131
+ continue;
132
+ console.log(`\n${label(groupLabels[group])}`);
133
+ for (const f of populated) {
134
+ const val = String(projectRecord[f.field]);
135
+ console.log(` ${label(`${f.label}:`.padEnd(16))}${valueStyle(val)}`);
136
+ }
137
+ }
138
+ // Display customData sub-fields if populated
139
+ const custom = project.customData;
140
+ if (custom) {
141
+ const customEntries = [
142
+ ['Recent Events', custom.recentEvents ?? ''],
143
+ ['Notes', custom.additionalNotes ?? ''],
144
+ ['Tools', custom.availableTools ?? ''],
145
+ ];
146
+ const populated = customEntries.filter(([, v]) => v);
147
+ if (populated.length > 0) {
148
+ console.log(`\n${label('Custom Data')}`);
149
+ for (const [k, v] of populated) {
150
+ console.log(` ${label(`${k}:`.padEnd(16))}${valueStyle(v)}`);
151
+ }
152
+ }
153
+ }
154
+ }
155
+ catch (err) {
156
+ handleError(err);
157
+ }
158
+ });
159
+ cmd
160
+ .command('set <field> <value>')
161
+ .description('Update a field on the active project')
162
+ .option('--project <id>', 'Project ID (overrides default)')
163
+ .action(async (field, val, opts) => {
164
+ try {
165
+ const resolvedField = resolveFieldName(field);
166
+ if (!resolvedField) {
167
+ throw new UserError(`Unknown field: '${field}'. Run 'cf project --schema' to see available fields.`);
168
+ }
169
+ const fieldDef = PROJECT_FIELDS.find((f) => f.field === resolvedField);
170
+ if (fieldDef?.readonly) {
171
+ throw new UserError(`Field '${resolvedField}' is read-only and cannot be set.`);
172
+ }
173
+ // Resolve phase/instruction values (number, short name, or full string)
174
+ let resolvedValue = val;
175
+ if (resolvedField === 'developmentPhase' || resolvedField === 'instruction') {
176
+ const phaseVal = resolvePhaseValue(val);
177
+ if (!phaseVal) {
178
+ const allowed = fieldDef?.enumValues?.join(', ') ?? '';
179
+ throw new UserError(`Invalid value "${val}" for field "${resolvedField}". Allowed values: ${allowed}`);
180
+ }
181
+ resolvedValue = phaseVal;
182
+ }
183
+ // Validate against enum constraints
184
+ const validation = validateFieldValue(resolvedField, resolvedValue);
185
+ if (!validation.valid) {
186
+ throw new UserError(validation.error);
187
+ }
188
+ const store = new FileProjectStore();
189
+ const { id } = await resolveProjectId(opts.project, store);
190
+ const existing = await store.getById(id);
191
+ if (!existing) {
192
+ throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
193
+ }
194
+ await store.update(id, { [resolvedField]: resolvedValue });
195
+ console.log(success(`Updated ${resolvedField} = ${resolvedValue} on project ${existing.name}`));
196
+ }
197
+ catch (err) {
198
+ handleError(err);
199
+ }
200
+ });
201
+ cmd
202
+ .command('rm [nameOrId]')
203
+ .description('Remove a project from Context Forge (files on disk are not deleted)')
204
+ .option('--project <id>', 'Project ID (overrides default)')
205
+ .option('--yes', 'Skip confirmation prompt')
206
+ .action(async (nameOrId, opts) => {
207
+ try {
208
+ const store = new FileProjectStore();
209
+ const { id } = await resolveProjectId(nameOrId ?? opts.project, store);
210
+ const project = await store.getById(id);
211
+ if (!project) {
212
+ throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
213
+ }
214
+ if (!opts.yes) {
215
+ const answer = await askConfirmation(`Remove project '${project.name}' at ${project.projectPath ?? 'unknown'} from Context Forge? (files on disk will not be deleted) [y/N] `);
216
+ if (!answer) {
217
+ console.log('Cancelled.');
218
+ return;
219
+ }
220
+ }
221
+ await store.delete(id);
222
+ console.log(success(`Project '${project.name}' removed.`));
223
+ }
224
+ catch (err) {
225
+ handleError(err);
226
+ }
227
+ });
228
+ }
229
+ /** Prompt user for y/N confirmation via stdin. Returns true if confirmed. */
230
+ function askConfirmation(prompt) {
231
+ const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
232
+ return new Promise((resolve) => {
233
+ rl.question(prompt, (answer) => {
234
+ rl.close();
235
+ resolve(answer.trim().toLowerCase() === 'y');
236
+ });
237
+ });
238
+ }
239
+ //# sourceMappingURL=project.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerPromptCommand(program: Command): void;
3
+ //# sourceMappingURL=prompt.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA+BpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmG5D"}
@@ -0,0 +1,111 @@
1
+ import * as path from 'node:path';
2
+ import { FileProjectStore, SystemPromptParser } from '@context-forge/core/node';
3
+ import { PROMPT_FILE_RELATIVE_PATH } from '@context-forge/core';
4
+ import { resolveProjectId } from '../utils/project.js';
5
+ import { handleError, UserError } from '../utils/errors.js';
6
+ import { printJson, printRaw } from '../output/formatter.js';
7
+ import { renderTable } from '../output/tables.js';
8
+ import { getPhaseShorthands, resolvePhaseInput } from '../utils/phaseShorthand.js';
9
+ /**
10
+ * Substitute project variables into template content.
11
+ * Unresolvable variables are preserved as-is.
12
+ */
13
+ function substituteVariables(content, project) {
14
+ const vars = {
15
+ 'project': project.name,
16
+ 'slice': project.fileSlice,
17
+ 'task-file': project.fileTasks,
18
+ 'fileArch': project.fileArch,
19
+ 'fileHLD': project.fileHLD,
20
+ 'fileSpec': project.fileSpec,
21
+ 'development-phase': project.developmentPhase,
22
+ };
23
+ return content.replace(/\{(\w[\w-]*)}/g, (_match, varName) => {
24
+ const value = vars[varName];
25
+ return value !== undefined ? value : `{${varName}}`;
26
+ });
27
+ }
28
+ export function registerPromptCommand(program) {
29
+ const cmd = program
30
+ .command('prompt')
31
+ .description('Access prompt templates with variable substitution');
32
+ cmd
33
+ .command('list')
34
+ .description('List available prompt templates')
35
+ .option('--json', 'Output as JSON')
36
+ .option('--project <id>', 'Project ID (overrides default)')
37
+ .action(async (opts) => {
38
+ try {
39
+ const store = new FileProjectStore();
40
+ const { id } = await resolveProjectId(opts.project, store);
41
+ const project = await store.getById(id);
42
+ if (!project) {
43
+ throw new UserError(`Project not found: '${id}'.`);
44
+ }
45
+ if (!project.projectPath) {
46
+ throw new UserError(`Project '${project.name}' has no projectPath configured.\n` +
47
+ ' cf project set projectPath /path/to/project');
48
+ }
49
+ const promptFilePath = path.join(project.projectPath, PROMPT_FILE_RELATIVE_PATH);
50
+ const parser = new SystemPromptParser(promptFilePath);
51
+ const prompts = await parser.getAllPrompts();
52
+ // Build shorthand map for display
53
+ const shorthands = await getPhaseShorthands(project.projectPath);
54
+ const shorthandReverse = new Map();
55
+ for (const [key, name] of shorthands) {
56
+ shorthandReverse.set(name.toLowerCase(), key);
57
+ }
58
+ const templates = prompts.map((p) => {
59
+ const shorthand = shorthandReverse.get(p.name.replace(/\s*\(Phase \d+(?:\.\d+)?\)\s*/, '').toLowerCase()) ?? '';
60
+ return {
61
+ name: p.name,
62
+ key: p.key,
63
+ shorthand,
64
+ parameterCount: p.parameters.length,
65
+ };
66
+ });
67
+ if (opts.json) {
68
+ printJson(templates);
69
+ return;
70
+ }
71
+ const rows = templates.map((t) => [t.name, t.key, t.shorthand]);
72
+ console.log(renderTable(['Name', 'Key', 'Shorthand'], rows));
73
+ }
74
+ catch (err) {
75
+ handleError(err);
76
+ }
77
+ });
78
+ cmd
79
+ .command('get <phase>')
80
+ .description('Get a prompt template with project variables substituted')
81
+ .option('--project <id>', 'Project ID (overrides default)')
82
+ .option('--raw', 'Output raw template without variable substitution')
83
+ .action(async (phase, opts) => {
84
+ try {
85
+ const store = new FileProjectStore();
86
+ const { id } = await resolveProjectId(opts.project, store);
87
+ const project = await store.getById(id);
88
+ if (!project) {
89
+ throw new UserError(`Project not found: '${id}'.`);
90
+ }
91
+ if (!project.projectPath) {
92
+ throw new UserError(`Project '${project.name}' has no projectPath configured.\n` +
93
+ ' cf project set projectPath /path/to/project');
94
+ }
95
+ // Resolve shorthand or name to instruction key
96
+ const resolvedPhase = await resolvePhaseInput(phase, project.projectPath);
97
+ const promptFilePath = path.join(project.projectPath, PROMPT_FILE_RELATIVE_PATH);
98
+ const parser = new SystemPromptParser(promptFilePath);
99
+ const prompt = await parser.getPromptForInstruction(resolvedPhase);
100
+ if (!prompt) {
101
+ throw new UserError(`No prompt found for '${phase}'. Run cf prompt list to see available templates.`);
102
+ }
103
+ const output = opts.raw ? prompt.content : substituteVariables(prompt.content, project);
104
+ printRaw(output);
105
+ }
106
+ catch (err) {
107
+ handleError(err);
108
+ }
109
+ });
110
+ }
111
+ //# sourceMappingURL=prompt.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../../src/commands/prompt.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerStatusCommand(program: Command): void;
3
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8E5D"}
@@ -0,0 +1,79 @@
1
+ import { FileProjectStore, ArtifactIntrospector } from '@context-forge/core/node';
2
+ import { resolveProjectId } from '../utils/project.js';
3
+ import { handleError, UserError } from '../utils/errors.js';
4
+ import { printJson } from '../output/formatter.js';
5
+ import { label, value as valueStyle, dim } from '../output/styles.js';
6
+ export function registerStatusCommand(program) {
7
+ program
8
+ .command('status')
9
+ .description('Show workflow status for the active project')
10
+ .option('--json', 'Output as JSON')
11
+ .option('--project <id>', 'Project ID (overrides default)')
12
+ .action(async (opts) => {
13
+ try {
14
+ const store = new FileProjectStore();
15
+ const { id, source } = await resolveProjectId(opts.project, store);
16
+ const project = await store.getById(id);
17
+ if (!project) {
18
+ throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
19
+ }
20
+ // Gather introspection data when projectPath is available
21
+ let introspection;
22
+ if (project.projectPath) {
23
+ try {
24
+ const introspector = new ArtifactIntrospector();
25
+ introspection = await introspector.summarize(project);
26
+ }
27
+ catch {
28
+ // Graceful degradation — show project data without introspection
29
+ }
30
+ }
31
+ const sourceLabels = {
32
+ flag: '(--project flag)',
33
+ cwd: '(from CWD)',
34
+ default: '(default)',
35
+ none: '',
36
+ };
37
+ const statusData = {
38
+ project: project.name,
39
+ resolutionSource: source,
40
+ phase: project.developmentPhase ?? 'Not set',
41
+ slice: project.fileSlice,
42
+ tasks: project.fileTasks,
43
+ workType: project.workType ?? 'Not set',
44
+ slicePlan: introspection?.slicePlan ?? null,
45
+ currentTasks: introspection?.currentTasks ?? null,
46
+ artifacts: introspection?.artifacts ?? null,
47
+ };
48
+ if (opts.json) {
49
+ printJson(statusData);
50
+ return;
51
+ }
52
+ const sourceLabel = sourceLabels[source];
53
+ const projectLine = sourceLabel
54
+ ? `${valueStyle(statusData.project)} ${dim(sourceLabel)}`
55
+ : valueStyle(statusData.project);
56
+ console.log(label('Project: ') + projectLine);
57
+ console.log(label('Phase: ') + valueStyle(statusData.phase));
58
+ console.log(label('Slice: ') + valueStyle(statusData.slice));
59
+ console.log(label('Tasks: ') + valueStyle(statusData.tasks));
60
+ if (statusData.currentTasks) {
61
+ const { completedTasks, totalTasks, inferredStatus } = statusData.currentTasks;
62
+ console.log(label('Progress: ') + valueStyle(`${completedTasks}/${totalTasks} tasks (${inferredStatus})`));
63
+ }
64
+ if (statusData.slicePlan) {
65
+ const { completedSlices, totalSlices, summary } = statusData.slicePlan;
66
+ console.log('');
67
+ console.log(label('Slice Plan'));
68
+ console.log(dim(` ${completedSlices}/${totalSlices} slices complete`));
69
+ if (summary) {
70
+ console.log(dim(` ${summary}`));
71
+ }
72
+ }
73
+ }
74
+ catch (err) {
75
+ handleError(err);
76
+ }
77
+ });
78
+ }
79
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
package/dist/index.js ADDED
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+ import { createRequire } from 'node:module';
3
+ import chalk from 'chalk';
4
+ import { Command } from 'commander';
5
+ import { registerConfigCommand } from './commands/config.js';
6
+ import { registerProjectCommand } from './commands/project.js';
7
+ import { registerStatusCommand } from './commands/status.js';
8
+ import { registerNextCommand } from './commands/next.js';
9
+ import { registerBuildCommand } from './commands/build.js';
10
+ import { registerFutureCommand } from './commands/future.js';
11
+ import { registerCheckCommand } from './commands/check.js';
12
+ import { registerPromptCommand } from './commands/prompt.js';
13
+ import { registerInitCommand } from './commands/init.js';
14
+ import { registerGuidesCommand } from './commands/guides.js';
15
+ import { handleError } from './utils/errors.js';
16
+ const require = createRequire(import.meta.url);
17
+ const { version } = require('../package.json');
18
+ const program = new Command();
19
+ program
20
+ .name('cf')
21
+ .version(version)
22
+ .description('Context Forge CLI — terminal access to context assembly, project management, and workflow navigation')
23
+ .configureHelp({
24
+ styleTitle: (str) => chalk.bold(str),
25
+ styleCommandText: (str) => chalk.yellow(str),
26
+ styleSubcommandText: (str) => chalk.yellow(str),
27
+ styleOptionText: (str) => chalk.cyan(str),
28
+ styleArgumentText: (str) => chalk.magenta(str),
29
+ styleDescriptionText: (str) => str,
30
+ subcommandTerm: (cmd) => cmd.name(),
31
+ })
32
+ .addHelpText('after', `\n${chalk.bold('Common options')} (available on most commands):\n ${chalk.cyan('--project <name|id>')} Project name or ID (overrides default_project config)\n ${chalk.cyan('--json')} Output as JSON (not applicable to build/prompt get)`);
33
+ registerConfigCommand(program);
34
+ registerProjectCommand(program);
35
+ registerStatusCommand(program);
36
+ registerNextCommand(program);
37
+ registerBuildCommand(program);
38
+ registerFutureCommand(program);
39
+ registerCheckCommand(program);
40
+ registerPromptCommand(program);
41
+ registerInitCommand(program);
42
+ registerGuidesCommand(program);
43
+ // Catch unhandled errors at top level
44
+ process.on('uncaughtException', handleError);
45
+ process.on('unhandledRejection', handleError);
46
+ program.parse();
47
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,iBAAiB,CAAwB,CAAC;AAEtE,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,IAAI,CAAC;KACV,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,sGAAsG,CAAC;KACnH,aAAa,CAAC;IACb,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACpC,gBAAgB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAC5C,mBAAmB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC;IAC/C,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;IACzC,iBAAiB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC;IAC9C,oBAAoB,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG;IAClC,cAAc,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,EAAE;CACpC,CAAC;KACD,WAAW,CAAC,OAAO,EAAE,KAAK,KAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC,qCAAqC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,8DAA8D,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,oEAAoE,CAAC,CAAC;AAEvR,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAC/B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,qBAAqB,CAAC,OAAO,CAAC,CAAC;AAE/B,sCAAsC;AACtC,OAAO,CAAC,EAAE,CAAC,mBAAmB,EAAE,WAAW,CAAC,CAAC;AAC7C,OAAO,CAAC,EAAE,CAAC,oBAAoB,EAAE,WAAW,CAAC,CAAC;AAE9C,OAAO,CAAC,KAAK,EAAE,CAAC"}