@context-forge/cli 0.3.3 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -49,6 +49,14 @@ cf set slice 175
49
49
  # Confirm updates (if you like)
50
50
  cf status
51
51
 
52
+ # Browse project artifacts
53
+ cf arch list # Architecture initiatives
54
+ cf slice list # Slices in the active plan
55
+ cf task list # Task files with progress
56
+
57
+ # What should I do next?
58
+ cf next
59
+
52
60
  # Detailed information
53
61
  cf project get
54
62
 
@@ -85,6 +93,11 @@ Each command runs `cf` under the hood — same CWD-based project resolution, sam
85
93
  | `cf build` | `cf build [--project <id>] [--phase] [--slice] [--instruction] [--tasks] [--additional]` | Generate context prompt to stdout |
86
94
  | `cf set` | `cf set <field> <value>` | Set a project field (shortcut for `cf project set`) |
87
95
  | `cf get` | `cf get [--json]` | Show all project fields (shortcut for `cf project get`) |
96
+ | `cf arch` | `cf arch list [--json]` | List architecture initiatives with progress |
97
+ | `cf plan` | `cf plan list [--json]` | List slice plan files with progress |
98
+ | `cf slice` | `cf slice list [--json]` | List slices from the active plan with status |
99
+ | `cf task` | `cf task list [--json]` | List task files from the plan with progress |
100
+ | `cf task items` | `cf task items [--json]` | Show individual tasks from the active task file |
88
101
  | `cf config` | `cf config list\|get\|set` | Manage configuration |
89
102
  | `cf project` | `cf project list\|get\|set\|rm` | Manage projects |
90
103
  | `cf future` | `cf future [--project <id>] [--status <filter>] [--json]` | Show consolidated future work |
@@ -134,6 +147,41 @@ cf set phase 6
134
147
 
135
148
  Setting `instruction` directly does not change `developmentPhase`.
136
149
 
150
+ ## Smart Index Resolution
151
+
152
+ Setting artifact fields by numeric index resolves to the matching file on disk:
153
+
154
+ ```bash
155
+ cf set slice 175
156
+ # Updated slice = 175-slice.context-output-consolidation on project my-project
157
+ # Updated tasks = 175-tasks.context-output-consolidation (auto-set from slice)
158
+ ```
159
+
160
+ When no file exists yet, the CLI derives the stem from the slice plan entry:
161
+
162
+ ```bash
163
+ cf set slice 166
164
+ # (no 166-slice.*.md on disk — derives from plan entry "Consistency Checker")
165
+ # Updated slice = 166-slice.consistency-checker on project my-project
166
+ # Updated tasks = 166-tasks.consistency-checker (auto-set from slice)
167
+ ```
168
+
169
+ Setting `fileSlice` always auto-sets `fileTasks` to match.
170
+
171
+ ## Discovery Commands
172
+
173
+ Browse project artifacts at every level:
174
+
175
+ ```bash
176
+ cf arch list # Architecture initiatives with slice counts
177
+ cf plan list # Slice plan files with completion progress
178
+ cf slice list # Slices from the active plan with status markers
179
+ cf task list # Task files from the plan with completion counts
180
+ cf task items # Individual task items from the active task file
181
+ ```
182
+
183
+ All accept `--json` and `--project <name|id>`.
184
+
137
185
  ## Architecture
138
186
 
139
187
  The CLI wraps `@context-forge/core` directly (no MCP layer), following the same pattern as the Electron package. All core services are imported from `@context-forge/core/node`.
@@ -149,6 +197,14 @@ pnpm --filter @context-forge/cli typecheck # Type check
149
197
 
150
198
  ## Changelog
151
199
 
200
+ ### v0.4.0
201
+
202
+ - **Discovery commands** — `cf arch list`, `cf plan list`, `cf slice list`, `cf task list`, `cf task items` for browsing project artifacts at every level
203
+ - **Smart index resolution** — `cf set slice 166` derives the filename from the slice plan when no file exists on disk
204
+ - **Auto-set fileTasks** — setting `fileSlice` always auto-sets `fileTasks`, even when the task file doesn't exist yet
205
+ - **Enhanced `cf status`** — now shows Date, Arch, and Plan fields
206
+ - **Workflow navigation** — `cf status` and `cf next` powered by `WorkflowNavigator` with slice status derivation and priority-ordered next-action recommendations
207
+
152
208
  ### v0.3.0
153
209
 
154
210
  - **Template variable completion** — artifact fields (`fileArch`, `fileSlicePlan`, `fileHLD`, `fileSpec`) and aliases (`arch`, `plan`, `hld`, `spec`) available in prompt templates, with index extraction (`archIndex`, `planIndex`)
@@ -4,6 +4,6 @@ argument-hint: [--phase <phase>] [--slice <slice>]
4
4
  allowed-tools: Bash(cf:*)
5
5
  ---
6
6
 
7
- Present the following context prompt exactly as shown, with no additional commentary or interpretation:
7
+ Use the following as your working context and immediately begin the work it describes. Confirm receipt with a one-line summary: "Context loaded: {project} | {phase} | {slice}" — then proceed.
8
8
 
9
9
  !`cf build $ARGUMENTS`
@@ -3,6 +3,6 @@ description: Show all fields for the active Context Forge project
3
3
  allowed-tools: Bash(cf:*)
4
4
  ---
5
5
 
6
- Present the following project details exactly as shown, with no additional commentary or interpretation:
6
+ Display this output without commentary:
7
7
 
8
8
  !`cf get`
@@ -3,6 +3,6 @@ description: Show recommended next action for the current Context Forge project
3
3
  allowed-tools: Bash(cf:*)
4
4
  ---
5
5
 
6
- Present the following recommendation exactly as shown, with no additional commentary or interpretation:
6
+ Display this output without commentary:
7
7
 
8
8
  !`cf next`
@@ -4,6 +4,6 @@ argument-hint: [list | get | set <field> <value> | rm | --schema]
4
4
  allowed-tools: Bash(cf:*)
5
5
  ---
6
6
 
7
- Present the following output exactly as shown, with no additional commentary or interpretation:
7
+ Display this output without commentary:
8
8
 
9
9
  !`cf project $ARGUMENTS`
@@ -4,6 +4,8 @@ argument-hint: [phase-name | list]
4
4
  allowed-tools: Bash(cf:*)
5
5
  ---
6
6
 
7
- Present the following output exactly as shown, with no additional commentary or interpretation:
7
+ If the result is a prompt template (from `cf prompt get`), use it as your working context and immediately begin the work it describes. Confirm receipt with a one-line summary: "Received prompt: {phase name}" — then proceed.
8
+
9
+ If the result is a list of available prompts (from `cf prompt list`), present it to the user without commentary.
8
10
 
9
11
  !`cf prompt get $ARGUMENTS 2>/dev/null || cf prompt list`
@@ -4,6 +4,6 @@ argument-hint: <field> <value>
4
4
  allowed-tools: Bash(cf:*)
5
5
  ---
6
6
 
7
- Present the following output exactly as shown, with no additional commentary or interpretation:
7
+ Display this output without commentary:
8
8
 
9
9
  !`cf set $ARGUMENTS`
@@ -3,6 +3,6 @@ description: Show Context Forge project status (phase, slice, task progress)
3
3
  allowed-tools: Bash(cf:*)
4
4
  ---
5
5
 
6
- Present the following project status exactly as shown, with no additional commentary or interpretation:
6
+ Display this output without commentary:
7
7
 
8
8
  !`cf status`
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerArchCommand(program: Command): void;
3
+ //# sourceMappingURL=arch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arch.d.ts","sourceRoot":"","sources":["../../src/commands/arch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiG1D"}
@@ -0,0 +1,81 @@
1
+ import { FileProjectStore, buildModel } from '@context-forge/core/node';
2
+ import { extractSliceIndex } from '@context-forge/core/node';
3
+ import { resolveProjectId } from '../utils/project.js';
4
+ import { handleError, UserError } from '../utils/errors.js';
5
+ import { printJson } from '../output/formatter.js';
6
+ import { renderTable } from '../output/tables.js';
7
+ import { label, success, dim } from '../output/styles.js';
8
+ export function registerArchCommand(program) {
9
+ const cmd = program
10
+ .command('arch')
11
+ .description('Manage architecture');
12
+ cmd
13
+ .command('list')
14
+ .description('List architecture initiatives from the project')
15
+ .option('--json', 'Output as JSON')
16
+ .option('--project <name|id>', 'Project name or ID (overrides default)')
17
+ .action(async (opts) => {
18
+ try {
19
+ const store = new FileProjectStore();
20
+ const { id } = await resolveProjectId(opts.project, store);
21
+ const project = await store.getById(id);
22
+ if (!project) {
23
+ throw new UserError(`Project not found: '${id}'.`);
24
+ }
25
+ if (!project.projectPath) {
26
+ throw new UserError('No projectPath configured. Set one with: cf set projectPath /path/to/project');
27
+ }
28
+ const model = await buildModel(project.projectPath);
29
+ const initiativeKeys = Object.keys(model.initiatives).sort((a, b) => parseInt(a, 10) - parseInt(b, 10));
30
+ if (initiativeKeys.length === 0) {
31
+ console.log(dim('No initiatives found in project.'));
32
+ return;
33
+ }
34
+ const activeIndex = extractSliceIndex(project.fileSlice);
35
+ const entries = initiativeKeys.map((key) => {
36
+ const init = model.initiatives[key];
37
+ const baseIndex = parseInt(key, 10);
38
+ const archName = init.arch?.name ?? '—';
39
+ const planName = init.slicePlan?.name ?? '—';
40
+ const completedSlices = init.slices.filter((s) => s.status === 'complete').length;
41
+ const totalSlices = init.slices.length;
42
+ const progress = totalSlices > 0
43
+ ? `${completedSlices}/${totalSlices}`
44
+ : '—';
45
+ // Determine if this initiative contains the active slice
46
+ const isActive = activeIndex !== null && init.slices.some((s) => parseInt(s.index, 10) === activeIndex);
47
+ return {
48
+ index: key,
49
+ baseIndex,
50
+ name: init.name,
51
+ archDoc: archName,
52
+ slicePlan: planName,
53
+ progress,
54
+ completedSlices,
55
+ totalSlices,
56
+ isActive,
57
+ };
58
+ });
59
+ if (opts.json) {
60
+ printJson(entries);
61
+ return;
62
+ }
63
+ console.log(label('\nArchitecture Initiatives'));
64
+ const rows = entries.map((e) => {
65
+ const indicator = e.isActive ? success(' ← active') : '';
66
+ return [
67
+ e.index,
68
+ e.name,
69
+ dim(e.archDoc),
70
+ dim(e.slicePlan),
71
+ e.progress + indicator,
72
+ ];
73
+ });
74
+ console.log(renderTable(['Index', 'Initiative', 'Arch Doc', 'Slice Plan', 'Progress'], rows));
75
+ }
76
+ catch (err) {
77
+ handleError(err);
78
+ }
79
+ });
80
+ }
81
+ //# sourceMappingURL=arch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arch.js","sourceRoot":"","sources":["../../src/commands/arch.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiDpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAyC1D"}
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuC1D"}
@@ -1,43 +1,8 @@
1
- import { FileProjectStore, ArtifactIntrospector } from '@context-forge/core/node';
1
+ import { FileProjectStore, WorkflowNavigator } from '@context-forge/core/node';
2
2
  import { resolveProjectId } from '../utils/project.js';
3
3
  import { handleError, UserError } from '../utils/errors.js';
4
4
  import { printJson } from '../output/formatter.js';
5
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
6
  export function registerNextCommand(program) {
42
7
  program
43
8
  .command('next')
@@ -52,25 +17,23 @@ export function registerNextCommand(program) {
52
17
  if (!project) {
53
18
  throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
54
19
  }
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);
20
+ const nav = new WorkflowNavigator();
21
+ const result = await nav.getNext(project);
66
22
  if (opts.json) {
67
23
  printJson(result);
68
24
  return;
69
25
  }
70
26
  console.log(label('Next: ') + valueStyle(result.recommendation));
71
- console.log(label('Slice: ') + valueStyle(result.slice));
72
- console.log(label('Phase: ') + valueStyle(result.phase));
27
+ if (result.slice) {
28
+ console.log(label('Slice: ') + valueStyle(result.slice));
29
+ }
30
+ if (result.phase) {
31
+ console.log(label('Phase: ') + valueStyle(result.phase));
32
+ }
73
33
  console.log(label('Rationale: ') + dim(result.rationale));
34
+ if (result.suggestedCommand) {
35
+ console.log(label('Run: ') + valueStyle(result.suggestedCommand));
36
+ }
74
37
  }
75
38
  catch (err) {
76
39
  handleError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAC/E,OAAO,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAEtE,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,qDAAqD,CAAC;SAClE,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,IAA0C,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,EAAE,EAAE,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YAC3D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,mDAAmD,CAAC,CAAC;YACpG,CAAC;YAED,MAAM,GAAG,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAE1C,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,SAAS,CAAC,MAAM,CAAC,CAAC;gBAClB,OAAO;YACT,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC;YACtE,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/D,CAAC;YACD,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1D,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBAC5B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,aAAa,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC,CAAC;YAC1E,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerPlanCommand(program: Command): void;
3
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsF1D"}
@@ -0,0 +1,81 @@
1
+ import { join } from 'node:path';
2
+ import { readdir } from 'node:fs/promises';
3
+ import { FileProjectStore, parseSlicePlan, } from '@context-forge/core/node';
4
+ import { resolveProjectId } from '../utils/project.js';
5
+ import { handleError, UserError } from '../utils/errors.js';
6
+ import { printJson } from '../output/formatter.js';
7
+ import { renderTable } from '../output/tables.js';
8
+ import { label, success, dim } from '../output/styles.js';
9
+ export function registerPlanCommand(program) {
10
+ const cmd = program
11
+ .command('plan')
12
+ .description('Manage slice plans');
13
+ cmd
14
+ .command('list')
15
+ .description('List slice plan files from the architecture directory')
16
+ .option('--json', 'Output as JSON')
17
+ .option('--project <name|id>', 'Project name or ID (overrides default)')
18
+ .action(async (opts) => {
19
+ try {
20
+ const store = new FileProjectStore();
21
+ const { id } = await resolveProjectId(opts.project, store);
22
+ const project = await store.getById(id);
23
+ if (!project) {
24
+ throw new UserError(`Project not found: '${id}'.`);
25
+ }
26
+ if (!project.projectPath) {
27
+ throw new UserError('No projectPath configured. Set one with: cf set projectPath /path/to/project');
28
+ }
29
+ const archDir = join(project.projectPath, 'project-documents/user/architecture');
30
+ let files;
31
+ try {
32
+ files = await readdir(archDir);
33
+ }
34
+ catch {
35
+ throw new UserError('Architecture directory not found: project-documents/user/architecture/');
36
+ }
37
+ const planFiles = files
38
+ .filter((f) => /^\d+-slices\..*\.md$/.test(f))
39
+ .sort();
40
+ if (planFiles.length === 0) {
41
+ console.log(dim('No slice plans found in project.'));
42
+ return;
43
+ }
44
+ // Determine active plan stem (without .md)
45
+ const activeStem = project.fileSlicePlan ?? null;
46
+ const entries = await Promise.all(planFiles.map(async (f) => {
47
+ const stem = f.replace(/\.md$/, '');
48
+ const indexMatch = /^(\d+)-/.exec(f);
49
+ const index = indexMatch ? indexMatch[1] : '—';
50
+ const planPath = join(archDir, f);
51
+ const result = await parseSlicePlan(planPath);
52
+ const isActive = stem === activeStem;
53
+ return {
54
+ index,
55
+ file: stem,
56
+ completed: result.completedSlices,
57
+ total: result.totalSlices,
58
+ isActive,
59
+ };
60
+ }));
61
+ if (opts.json) {
62
+ printJson(entries);
63
+ return;
64
+ }
65
+ console.log(label('\nSlice Plans'));
66
+ const rows = entries.map((e) => {
67
+ const progress = e.total > 0
68
+ ? `${e.completed}/${e.total}`
69
+ : '—';
70
+ const active = e.isActive ? success(' ← active') : '';
71
+ const icon = e.total > 0 && e.completed === e.total ? success('✓') : dim('○');
72
+ return [e.index, icon + ' ' + e.file, progress + active];
73
+ });
74
+ console.log(renderTable(['#', 'Plan', 'Progress'], rows));
75
+ }
76
+ catch (err) {
77
+ handleError(err);
78
+ }
79
+ });
80
+ }
81
+ //# sourceMappingURL=plan.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.js","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0EpC,sEAAsE;AACtE,wBAAgB,uBAAuB,IAAI,MAAM,CA0BhD;AAED,+DAA+D;AAC/D,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAoEf;AAED,+DAA+D;AAC/D,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2H7D"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiGpC,sEAAsE;AACtE,wBAAgB,uBAAuB,IAAI,MAAM,CA0BhD;AAED,+DAA+D;AAC/D,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE,MAAM,EACX,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzB,OAAO,CAAC,IAAI,CAAC,CAkGf;AAED,+DAA+D;AAC/D,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GACzC,OAAO,CAAC,IAAI,CAAC,CA4Cf;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2H7D"}
@@ -1,12 +1,32 @@
1
1
  import * as os from 'node:os';
2
2
  import * as readline from 'node:readline';
3
- import { FileProjectStore, ConfigManager, resolveFileByIndex } from '@context-forge/core/node';
3
+ import { join } from 'node:path';
4
+ import { FileProjectStore, ConfigManager, resolveFileByIndex, resolveArtifactPath, deriveArtifactStem, parseSlicePlan } from '@context-forge/core/node';
4
5
  import { resolveFieldName, resolvePhaseValue, validateFieldValue, PROJECT_FIELDS, FIELD_GROUPS, } from '@context-forge/core';
5
6
  import { resolveProjectId, findByNameOrId, findProjectByCwd } from '../utils/project.js';
6
7
  import { handleError, UserError } from '../utils/errors.js';
7
8
  import { printJson } from '../output/formatter.js';
8
9
  import { renderTable } from '../output/tables.js';
9
10
  import { label, value as valueStyle, success, dim } from '../output/styles.js';
11
+ /**
12
+ * When a numeric index doesn't match an existing file, try to derive the stem
13
+ * from the slice plan. Only works for fileSlice and fileTasks fields.
14
+ */
15
+ async function deriveFromSlicePlan(project, field, index) {
16
+ if (!project.fileSlicePlan || !project.projectPath)
17
+ return null;
18
+ if (field !== 'fileSlice' && field !== 'fileTasks')
19
+ return null;
20
+ const planRelPath = resolveArtifactPath('fileSlicePlan', project.fileSlicePlan);
21
+ if (!planRelPath)
22
+ return null;
23
+ const planPath = join(project.projectPath, planRelPath);
24
+ const plan = await parseSlicePlan(planPath);
25
+ const entry = plan.entries.find((e) => e.index === parseInt(index, 10));
26
+ if (!entry)
27
+ return null;
28
+ return deriveArtifactStem(field, index, entry.name);
29
+ }
10
30
  /** Shorten an absolute path by replacing the home directory with ~. */
11
31
  function shortenPath(p) {
12
32
  const home = os.homedir();
@@ -111,6 +131,7 @@ export async function projectSetAction(field, val, opts) {
111
131
  throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
112
132
  }
113
133
  // Index-based file resolution: cf set slice 171 → scans for matching file
134
+ // Falls back to slice plan entry name if file doesn't exist on disk
114
135
  if (fieldDef?.group === 'artifacts' && /^\d+$/.test(resolvedValue) && existing.projectPath) {
115
136
  try {
116
137
  const resolved = resolveFileByIndex(existing.projectPath, resolvedField, resolvedValue);
@@ -118,8 +139,15 @@ export async function projectSetAction(field, val, opts) {
118
139
  resolvedValue = resolved;
119
140
  }
120
141
  }
121
- catch (err) {
122
- throw new UserError(err.message);
142
+ catch {
143
+ // File doesn't exist — try deriving from slice plan
144
+ const derived = await deriveFromSlicePlan(existing, resolvedField, resolvedValue);
145
+ if (derived) {
146
+ resolvedValue = derived;
147
+ }
148
+ else {
149
+ throw new UserError(`No file matching index '${resolvedValue}' for field '${resolvedField}', and no slice plan entry found to derive from.`);
150
+ }
123
151
  }
124
152
  }
125
153
  // customData fields use dot-notation; merge into the nested object
@@ -135,6 +163,27 @@ export async function projectSetAction(field, val, opts) {
135
163
  else {
136
164
  await store.update(id, { [resolvedField]: resolvedValue });
137
165
  }
166
+ // Auto-set fileTasks when fileSlice changes
167
+ if (resolvedField === 'fileSlice' && existing.projectPath) {
168
+ const sliceIndex = /^(\d+)-/.exec(resolvedValue);
169
+ if (sliceIndex) {
170
+ let tasksResolved = null;
171
+ try {
172
+ tasksResolved = resolveFileByIndex(existing.projectPath, 'fileTasks', sliceIndex[1]);
173
+ }
174
+ catch {
175
+ // File doesn't exist yet — derive stem from slice value
176
+ const derived = resolvedValue.replace(/^(\d+)-slice\./, '$1-tasks.');
177
+ if (derived !== resolvedValue) {
178
+ tasksResolved = derived;
179
+ }
180
+ }
181
+ if (tasksResolved !== null) {
182
+ await store.update(id, { fileTasks: tasksResolved });
183
+ console.log(success(`Updated tasks = ${tasksResolved} (auto-set from slice)`));
184
+ }
185
+ }
186
+ }
138
187
  // Show alias-friendly name in confirmation
139
188
  const displayName = fieldDef?.aliases[0] ?? resolvedField;
140
189
  console.log(success(`Updated ${displayName} = ${resolvedValue} on project ${existing.name}`));
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"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"}
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 registerSliceCommand(program: Command): void;
3
+ //# sourceMappingURL=slice.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice.d.ts","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2G3D"}
@@ -0,0 +1,99 @@
1
+ import { join } from 'node:path';
2
+ import { FileProjectStore, ArtifactIntrospector, resolveArtifactPath } from '@context-forge/core/node';
3
+ import { extractSliceIndex } from '@context-forge/core/node';
4
+ import { resolveProjectId } from '../utils/project.js';
5
+ import { handleError, UserError } from '../utils/errors.js';
6
+ import { printJson } from '../output/formatter.js';
7
+ import { renderTable } from '../output/tables.js';
8
+ import { label, success, dim } from '../output/styles.js';
9
+ export function registerSliceCommand(program) {
10
+ const cmd = program
11
+ .command('slice')
12
+ .description('Manage slices');
13
+ cmd
14
+ .command('list')
15
+ .description('List slices from the active slice plan')
16
+ .option('--json', 'Output as JSON')
17
+ .option('--project <name|id>', 'Project name or ID (overrides default)')
18
+ .action(async (opts) => {
19
+ try {
20
+ const store = new FileProjectStore();
21
+ const { id } = await resolveProjectId(opts.project, store);
22
+ const project = await store.getById(id);
23
+ if (!project) {
24
+ throw new UserError(`Project not found: '${id}'.`);
25
+ }
26
+ if (!project.fileSlicePlan) {
27
+ throw new UserError('No slice plan configured. Set one with: cf set slicePlan <path>');
28
+ }
29
+ if (!project.projectPath) {
30
+ throw new UserError('No projectPath configured. Set one with: cf set projectPath /path/to/project');
31
+ }
32
+ const planRelPath = resolveArtifactPath('fileSlicePlan', project.fileSlicePlan);
33
+ if (!planRelPath) {
34
+ throw new UserError('Could not resolve slice plan path.');
35
+ }
36
+ const planPath = join(project.projectPath, planRelPath);
37
+ const introspector = new ArtifactIntrospector();
38
+ const planResult = await introspector.parseSlicePlan(planPath);
39
+ // Determine active slice index
40
+ const activeIndex = extractSliceIndex(project.fileSlice);
41
+ // Check for design files per entry
42
+ const entries = await Promise.all(planResult.entries.map(async (entry) => {
43
+ let designFile = null;
44
+ try {
45
+ const docs = await introspector.detectDocuments(project.projectPath, entry.index);
46
+ designFile = docs.sliceDesign;
47
+ }
48
+ catch {
49
+ // skip
50
+ }
51
+ const isActive = activeIndex !== null && entry.index === activeIndex;
52
+ const isNext = !isActive && !entry.isChecked && activeIndex === null;
53
+ return { ...entry, designFile, isActive, isNext };
54
+ }));
55
+ // Mark first unchecked as next if no active match
56
+ if (!entries.some((e) => e.isActive)) {
57
+ const firstUnchecked = entries.find((e) => !e.isChecked);
58
+ if (firstUnchecked) {
59
+ firstUnchecked.isNext = true;
60
+ }
61
+ }
62
+ if (opts.json) {
63
+ const planName = project.fileSlicePlan.split('/').pop() ?? project.fileSlicePlan;
64
+ printJson({
65
+ slicePlan: planName,
66
+ total: planResult.totalSlices,
67
+ completed: planResult.completedSlices,
68
+ entries: entries.map((e) => ({
69
+ index: e.index,
70
+ name: e.name,
71
+ isChecked: e.isChecked,
72
+ designFile: e.designFile,
73
+ isActive: e.isActive,
74
+ isNext: e.isNext,
75
+ })),
76
+ });
77
+ return;
78
+ }
79
+ // Render table
80
+ const planName = project.fileSlicePlan.split('/').pop() ?? project.fileSlicePlan;
81
+ console.log(label(`\nSlice Plan: ${planName}`));
82
+ const rows = entries.map((e) => {
83
+ const status = e.isChecked
84
+ ? success('✓ complete')
85
+ : dim('○ not started');
86
+ const file = e.designFile
87
+ ? dim(e.designFile.split('/').pop() ?? e.designFile)
88
+ : dim('—');
89
+ const indicator = e.isActive ? success(' ← active') : e.isNext ? dim(' ← next') : '';
90
+ return [String(e.index), e.name, status, file + indicator];
91
+ });
92
+ console.log(renderTable(['#', 'Slice', 'Status', 'File'], rows));
93
+ }
94
+ catch (err) {
95
+ handleError(err);
96
+ }
97
+ });
98
+ }
99
+ //# sourceMappingURL=slice.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"slice.js","sourceRoot":"","sources":["../../src/commands/slice.ts"],"names":[],"mappings":"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"}
@@ -1 +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"}
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,CA6D5D"}
@@ -1,4 +1,4 @@
1
- import { FileProjectStore, ArtifactIntrospector } from '@context-forge/core/node';
1
+ import { FileProjectStore, WorkflowNavigator } from '@context-forge/core/node';
2
2
  import { resolveProjectId } from '../utils/project.js';
3
3
  import { handleError, UserError } from '../utils/errors.js';
4
4
  import { printJson } from '../output/formatter.js';
@@ -17,16 +17,11 @@ export function registerStatusCommand(program) {
17
17
  if (!project) {
18
18
  throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
19
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
- }
20
+ const nav = new WorkflowNavigator();
21
+ const status = await nav.getStatus(project);
22
+ if (opts.json) {
23
+ printJson({ ...status, resolutionSource: source });
24
+ return;
30
25
  }
31
26
  const sourceLabels = {
32
27
  flag: '(--project flag)',
@@ -34,41 +29,28 @@ export function registerStatusCommand(program) {
34
29
  default: '(default)',
35
30
  none: '',
36
31
  };
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
32
  const sourceLabel = sourceLabels[source];
53
33
  const projectLine = sourceLabel
54
- ? `${valueStyle(statusData.project)} ${dim(sourceLabel)}`
55
- : valueStyle(statusData.project);
34
+ ? `${valueStyle(status.project)} ${dim(sourceLabel)}`
35
+ : valueStyle(status.project);
56
36
  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})`));
37
+ console.log(label('Date: ') + valueStyle(project.dateProject || 'Not set'));
38
+ console.log(label('Phase: ') + valueStyle(status.phase ?? 'Not set'));
39
+ console.log(label('Arch: ') + valueStyle(project.fileArch || 'Not set'));
40
+ console.log(label('Plan: ') + valueStyle(project.fileSlicePlan || 'Not set'));
41
+ console.log(label('Slice: ') + valueStyle(project.fileSlice || 'Not set'));
42
+ console.log(label('Tasks: ') + valueStyle(project.fileTasks || 'Not set'));
43
+ if (status.activeSlice?.taskProgress) {
44
+ const { completed, total, inferredStatus } = status.activeSlice.taskProgress;
45
+ console.log(label('Progress: ') + valueStyle(`${completed}/${total} tasks (${inferredStatus})`));
46
+ }
47
+ if (status.activeSlice && status.activeSlice.status !== 'no-active-slice') {
48
+ console.log(label('Status: ') + valueStyle(status.activeSlice.status));
63
49
  }
64
- if (statusData.slicePlan) {
65
- const { completedSlices, totalSlices, summary } = statusData.slicePlan;
50
+ if (status.slicePlan) {
66
51
  console.log('');
67
52
  console.log(label('Slice Plan'));
68
- console.log(dim(` ${completedSlices}/${totalSlices} slices complete`));
69
- if (summary) {
70
- console.log(dim(` ${summary}`));
71
- }
53
+ console.log(dim(` ${status.slicePlan.completed}/${status.slicePlan.total} slices complete`));
72
54
  }
73
55
  }
74
56
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAClF,OAAO,EAAE,gBAAgB,EAAyB,MAAM,qBAAqB,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,wBAAwB,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,KAAK,IAAI,UAAU,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAEtE,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,WAAW,CAAC,6CAA6C,CAAC;SAC1D,MAAM,CAAC,QAAQ,EAAE,gBAAgB,CAAC;SAClC,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;SAC1D,MAAM,CAAC,KAAK,EAAE,IAA0C,EAAE,EAAE;QAC3D,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;YACnE,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;YAExC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,MAAM,IAAI,SAAS,CAAC,uBAAuB,EAAE,mDAAmD,CAAC,CAAC;YACpG,CAAC;YAED,0DAA0D;YAC1D,IAAI,aAAa,CAAC;YAClB,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;gBACxB,IAAI,CAAC;oBACH,MAAM,YAAY,GAAG,IAAI,oBAAoB,EAAE,CAAC;oBAChD,aAAa,GAAG,MAAM,YAAY,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;gBACxD,CAAC;gBAAC,MAAM,CAAC;oBACP,iEAAiE;gBACnE,CAAC;YACH,CAAC;YAED,MAAM,YAAY,GAAqC;gBACrD,IAAI,EAAE,kBAAkB;gBACxB,GAAG,EAAE,YAAY;gBACjB,OAAO,EAAE,WAAW;gBACpB,IAAI,EAAE,EAAE;aACT,CAAC;YAEF,MAAM,UAAU,GAAG;gBACjB,OAAO,EAAE,OAAO,CAAC,IAAI;gBACrB,gBAAgB,EAAE,MAAM;gBACxB,KAAK,EAAE,OAAO,CAAC,gBAAgB,IAAI,SAAS;gBAC5C,KAAK,EAAE,OAAO,CAAC,SAAS;gBACxB,KAAK,EAAE,OAAO,CAAC,SAAS;gBACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,SAAS;gBACvC,SAAS,EAAE,aAAa,EAAE,SAAS,IAAI,IAAI;gBAC3C,YAAY,EAAE,aAAa,EAAE,YAAY,IAAI,IAAI;gBACjD,SAAS,EAAE,aAAa,EAAE,SAAS,IAAI,IAAI;aAC5C,CAAC;YAEF,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACd,SAAS,CAAC,UAAU,CAAC,CAAC;gBACtB,OAAO;YACT,CAAC;YAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,WAAW;gBAC7B,CAAC,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,KAAK,GAAG,CAAC,WAAW,CAAC,EAAE;gBAC1D,CAAC,CAAC,UAAU,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YACnC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,WAAW,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAChE,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAEhE,IAAI,UAAU,CAAC,YAAY,EAAE,CAAC;gBAC5B,MAAM,EAAE,cAAc,EAAE,UAAU,EAAE,cAAc,EAAE,GAAG,UAAU,CAAC,YAAY,CAAC;gBAC/E,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,GAAG,UAAU,CAAC,GAAG,cAAc,IAAI,UAAU,WAAW,cAAc,GAAG,CAAC,CAAC,CAAC;YAC7G,CAAC;YAED,IAAI,UAAU,CAAC,SAAS,EAAE,CAAC;gBACzB,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,UAAU,CAAC,SAAS,CAAC;gBACvE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;gBAChB,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC;gBACjC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,eAAe,IAAI,WAAW,kBAAkB,CAAC,CAAC,CAAC;gBACxE,IAAI,OAAO,EAAE,CAAC;oBACZ,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerTaskCommand(program: Command): void;
3
+ //# sourceMappingURL=task.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.d.ts","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAapC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0D1D"}
@@ -0,0 +1,160 @@
1
+ import { join } from 'node:path';
2
+ import { readdir } from 'node:fs/promises';
3
+ import { FileProjectStore, resolveArtifactPath, extractSliceIndex, parseSlicePlan, parseTaskFile, } from '@context-forge/core/node';
4
+ import { resolveProjectId } from '../utils/project.js';
5
+ import { handleError, UserError } from '../utils/errors.js';
6
+ import { printJson } from '../output/formatter.js';
7
+ import { label, success, dim } from '../output/styles.js';
8
+ export function registerTaskCommand(program) {
9
+ const cmd = program
10
+ .command('task')
11
+ .description('Manage tasks');
12
+ cmd
13
+ .command('list')
14
+ .description('List task files from the slice plan')
15
+ .option('--json', 'Output as JSON')
16
+ .option('--project <name|id>', 'Project name or ID (overrides default)')
17
+ .action(async (opts) => {
18
+ try {
19
+ const store = new FileProjectStore();
20
+ const { id } = await resolveProjectId(opts.project, store);
21
+ const project = await store.getById(id);
22
+ if (!project) {
23
+ throw new UserError(`Project not found: '${id}'.`);
24
+ }
25
+ if (!project.projectPath) {
26
+ throw new UserError('No projectPath configured. Set one with: cf set projectPath /path/to/project');
27
+ }
28
+ await listTaskFiles(project, opts.json);
29
+ }
30
+ catch (err) {
31
+ handleError(err);
32
+ }
33
+ });
34
+ cmd
35
+ .command('items')
36
+ .description('Show individual task items from the active task file')
37
+ .option('--json', 'Output as JSON')
38
+ .option('--project <name|id>', 'Project name or ID (overrides default)')
39
+ .action(async (opts) => {
40
+ try {
41
+ const store = new FileProjectStore();
42
+ const { id } = await resolveProjectId(opts.project, store);
43
+ const project = await store.getById(id);
44
+ if (!project) {
45
+ throw new UserError(`Project not found: '${id}'.`);
46
+ }
47
+ if (!project.projectPath) {
48
+ throw new UserError('No projectPath configured. Set one with: cf set projectPath /path/to/project');
49
+ }
50
+ await listTaskItems(project, opts.json);
51
+ }
52
+ catch (err) {
53
+ handleError(err);
54
+ }
55
+ });
56
+ }
57
+ async function listTaskItems(project, json) {
58
+ if (!project.fileTasks) {
59
+ throw new UserError('No task file configured. Set one with: cf set tasks <filename>');
60
+ }
61
+ const taskRelPath = resolveArtifactPath('fileTasks', project.fileTasks);
62
+ if (!taskRelPath) {
63
+ throw new UserError('Could not resolve task file path.');
64
+ }
65
+ // Detect split task files via index
66
+ const sliceIndex = extractSliceIndex(project.fileSlice);
67
+ let taskPaths;
68
+ if (sliceIndex !== null) {
69
+ const tasksDir = join(project.projectPath, 'project-documents/user/tasks');
70
+ try {
71
+ const files = await readdir(tasksDir);
72
+ const matching = files
73
+ .filter((f) => f.startsWith(`${sliceIndex}-tasks.`) && f.endsWith('.md'))
74
+ .sort()
75
+ .map((f) => join(tasksDir, f));
76
+ taskPaths = matching.length > 0 ? matching : [join(project.projectPath, taskRelPath)];
77
+ }
78
+ catch {
79
+ taskPaths = [join(project.projectPath, taskRelPath)];
80
+ }
81
+ }
82
+ else {
83
+ taskPaths = [join(project.projectPath, taskRelPath)];
84
+ }
85
+ const taskResult = await parseTaskFile(taskPaths);
86
+ if (json) {
87
+ printJson(taskResult);
88
+ return;
89
+ }
90
+ const fileName = project.fileTasks.split('/').pop() ?? project.fileTasks;
91
+ console.log(label(`\nTasks: ${fileName}`) +
92
+ dim(` (${taskResult.completedTasks}/${taskResult.totalTasks} complete)`));
93
+ for (const item of taskResult.items) {
94
+ const icon = item.done ? success(' ✓ ') : dim(' ○ ');
95
+ const text = item.done ? dim(item.name) : item.name;
96
+ console.log(icon + text);
97
+ }
98
+ }
99
+ async function listTaskFiles(project, json) {
100
+ if (!project.fileSlicePlan) {
101
+ throw new UserError('No slice plan configured. Set one with: cf set slicePlan <path>');
102
+ }
103
+ const planRelPath = resolveArtifactPath('fileSlicePlan', project.fileSlicePlan);
104
+ if (!planRelPath) {
105
+ throw new UserError('Could not resolve slice plan path.');
106
+ }
107
+ const planPath = join(project.projectPath, planRelPath);
108
+ const plan = await parseSlicePlan(planPath);
109
+ const activeIndex = extractSliceIndex(project.fileSlice);
110
+ const tasksDir = join(project.projectPath, 'project-documents/user/tasks');
111
+ let allFiles;
112
+ try {
113
+ allFiles = await readdir(tasksDir);
114
+ }
115
+ catch {
116
+ throw new UserError('Tasks directory not found: project-documents/user/tasks/');
117
+ }
118
+ const summaries = [];
119
+ for (const entry of plan.entries) {
120
+ const matching = allFiles
121
+ .filter((f) => f.startsWith(`${entry.index}-tasks.`) && f.endsWith('.md'))
122
+ .sort();
123
+ if (matching.length === 0)
124
+ continue;
125
+ const paths = matching.map((f) => join(tasksDir, f));
126
+ try {
127
+ const result = await parseTaskFile(paths);
128
+ summaries.push({
129
+ index: entry.index,
130
+ name: entry.name,
131
+ files: matching,
132
+ completed: result.completedTasks,
133
+ total: result.totalTasks,
134
+ isActive: entry.index === activeIndex,
135
+ });
136
+ }
137
+ catch {
138
+ summaries.push({
139
+ index: entry.index,
140
+ name: entry.name,
141
+ files: matching,
142
+ completed: 0,
143
+ total: 0,
144
+ isActive: entry.index === activeIndex,
145
+ });
146
+ }
147
+ }
148
+ if (json) {
149
+ printJson(summaries);
150
+ return;
151
+ }
152
+ console.log(label('\nTask Files'));
153
+ for (const s of summaries) {
154
+ const active = s.isActive ? success(' ← active') : '';
155
+ const progress = s.total > 0 ? dim(` (${s.completed}/${s.total})`) : dim(' (empty)');
156
+ const icon = s.total > 0 && s.completed === s.total ? success(' ✓ ') : dim(' ○ ');
157
+ console.log(icon + `${s.index} ${s.name}` + progress + active);
158
+ }
159
+ }
160
+ //# sourceMappingURL=task.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -13,6 +13,10 @@ import { registerPromptCommand } from './commands/prompt.js';
13
13
  import { registerInitCommand } from './commands/init.js';
14
14
  import { registerGuidesCommand } from './commands/guides.js';
15
15
  import { registerInstallCommandsCommand, registerUninstallCommandsCommand } from './commands/commandInstaller.js';
16
+ import { registerSliceCommand } from './commands/slice.js';
17
+ import { registerTaskCommand } from './commands/task.js';
18
+ import { registerArchCommand } from './commands/arch.js';
19
+ import { registerPlanCommand } from './commands/plan.js';
16
20
  import { handleError } from './utils/errors.js';
17
21
  const require = createRequire(import.meta.url);
18
22
  const { version } = require('../package.json');
@@ -41,6 +45,10 @@ registerCheckCommand(program);
41
45
  registerPromptCommand(program);
42
46
  registerInitCommand(program);
43
47
  registerGuidesCommand(program);
48
+ registerSliceCommand(program);
49
+ registerTaskCommand(program);
50
+ registerArchCommand(program);
51
+ registerPlanCommand(program);
44
52
  registerInstallCommandsCommand(program);
45
53
  registerUninstallCommandsCommand(program);
46
54
  // Top-level shortcuts for project get/set
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@context-forge/cli",
3
- "version": "0.3.3",
3
+ "version": "0.3.4",
4
4
  "description": "CLI for Context Forge — terminal access to context assembly, project management, workflow navigation, and configuration",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -32,7 +32,7 @@
32
32
  "dependencies": {
33
33
  "chalk": "^5.4.1",
34
34
  "commander": "^13.1.0",
35
- "@context-forge/core": "0.3.3"
35
+ "@context-forge/core": "0.3.4"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^25.3.0",