@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 +56 -0
- package/commands/cf/build.md +1 -1
- package/commands/cf/get.md +1 -1
- package/commands/cf/next.md +1 -1
- package/commands/cf/project.md +1 -1
- package/commands/cf/prompt.md +3 -1
- package/commands/cf/set.md +1 -1
- package/commands/cf/status.md +1 -1
- package/dist/commands/arch.d.ts +3 -0
- package/dist/commands/arch.d.ts.map +1 -0
- package/dist/commands/arch.js +81 -0
- package/dist/commands/arch.js.map +1 -0
- package/dist/commands/next.d.ts.map +1 -1
- package/dist/commands/next.js +12 -49
- package/dist/commands/next.js.map +1 -1
- package/dist/commands/plan.d.ts +3 -0
- package/dist/commands/plan.d.ts.map +1 -0
- package/dist/commands/plan.js +81 -0
- package/dist/commands/plan.js.map +1 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +52 -3
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/slice.d.ts +3 -0
- package/dist/commands/slice.d.ts.map +1 -0
- package/dist/commands/slice.js +99 -0
- package/dist/commands/slice.js.map +1 -0
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +22 -40
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/task.d.ts +3 -0
- package/dist/commands/task.d.ts.map +1 -0
- package/dist/commands/task.js +160 -0
- package/dist/commands/task.js.map +1 -0
- package/dist/index.js +8 -0
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
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`)
|
package/commands/cf/build.md
CHANGED
|
@@ -4,6 +4,6 @@ argument-hint: [--phase <phase>] [--slice <slice>]
|
|
|
4
4
|
allowed-tools: Bash(cf:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
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`
|
package/commands/cf/get.md
CHANGED
package/commands/cf/next.md
CHANGED
|
@@ -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
|
-
|
|
6
|
+
Display this output without commentary:
|
|
7
7
|
|
|
8
8
|
!`cf next`
|
package/commands/cf/project.md
CHANGED
|
@@ -4,6 +4,6 @@ argument-hint: [list | get | set <field> <value> | rm | --schema]
|
|
|
4
4
|
allowed-tools: Bash(cf:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Display this output without commentary:
|
|
8
8
|
|
|
9
9
|
!`cf project $ARGUMENTS`
|
package/commands/cf/prompt.md
CHANGED
|
@@ -4,6 +4,8 @@ argument-hint: [phase-name | list]
|
|
|
4
4
|
allowed-tools: Bash(cf:*)
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
|
|
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`
|
package/commands/cf/set.md
CHANGED
package/commands/cf/status.md
CHANGED
|
@@ -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
|
-
|
|
6
|
+
Display this output without commentary:
|
|
7
7
|
|
|
8
8
|
!`cf status`
|
|
@@ -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;
|
|
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"}
|
package/dist/commands/next.js
CHANGED
|
@@ -1,43 +1,8 @@
|
|
|
1
|
-
import { FileProjectStore,
|
|
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
|
-
|
|
56
|
-
|
|
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
|
-
|
|
72
|
-
|
|
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":"AACA,OAAO,EAAE,gBAAgB,EAAE,
|
|
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 @@
|
|
|
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":"
|
|
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"}
|
package/dist/commands/project.js
CHANGED
|
@@ -1,12 +1,32 @@
|
|
|
1
1
|
import * as os from 'node:os';
|
|
2
2
|
import * as readline from 'node:readline';
|
|
3
|
-
import {
|
|
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
|
|
122
|
-
|
|
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 @@
|
|
|
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,
|
|
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"}
|
package/dist/commands/status.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { FileProjectStore,
|
|
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
|
-
|
|
21
|
-
|
|
22
|
-
if (
|
|
23
|
-
|
|
24
|
-
|
|
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(
|
|
55
|
-
: valueStyle(
|
|
34
|
+
? `${valueStyle(status.project)} ${dim(sourceLabel)}`
|
|
35
|
+
: valueStyle(status.project);
|
|
56
36
|
console.log(label('Project: ') + projectLine);
|
|
57
|
-
console.log(label('
|
|
58
|
-
console.log(label('
|
|
59
|
-
console.log(label('
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
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 (
|
|
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(` ${
|
|
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,
|
|
1
|
+
{"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/commands/status.ts"],"names":[],"mappings":"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"}
|
|
@@ -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
|
+
"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.
|
|
35
|
+
"@context-forge/core": "0.3.4"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^25.3.0",
|