@context-forge/cli 0.6.10 → 0.6.13
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/commands/cf/check.md +9 -0
- package/dist/commands/arch.d.ts.map +1 -1
- package/dist/commands/arch.js +19 -4
- package/dist/commands/arch.js.map +1 -1
- package/dist/commands/check.d.ts.map +1 -1
- package/dist/commands/check.js +8 -3
- package/dist/commands/check.js.map +1 -1
- package/dist/commands/commandInstaller.js +1 -1
- package/dist/commands/commandInstaller.js.map +1 -1
- package/dist/commands/future.d.ts.map +1 -1
- package/dist/commands/future.js +53 -7
- package/dist/commands/future.js.map +1 -1
- package/dist/commands/guides.js +2 -2
- package/dist/commands/guides.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +42 -13
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/project.d.ts +5 -0
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +78 -15
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/prompt.d.ts.map +1 -1
- package/dist/commands/prompt.js +12 -9
- package/dist/commands/prompt.js.map +1 -1
- package/dist/commands/slice.d.ts.map +1 -1
- package/dist/commands/slice.js +8 -4
- package/dist/commands/slice.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +3 -2
- package/dist/commands/status.js.map +1 -1
- package/dist/commands/task.d.ts.map +1 -1
- package/dist/commands/task.js +56 -23
- package/dist/commands/task.js.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/utils/worktree-overlay.d.ts +24 -0
- package/dist/utils/worktree-overlay.d.ts.map +1 -1
- package/dist/utils/worktree-overlay.js +50 -0
- package/dist/utils/worktree-overlay.js.map +1 -1
- package/package.json +2 -2
package/dist/commands/task.js
CHANGED
|
@@ -2,7 +2,7 @@ import { join } from 'node:path';
|
|
|
2
2
|
import { readdir } from 'node:fs/promises';
|
|
3
3
|
import { FileProjectStore, resolveArtifactPath, extractSliceIndex, parseSlicePlan, parseTaskFile, } from '@context-forge/core/node';
|
|
4
4
|
import { resolveProjectWorktree } from '../utils/project.js';
|
|
5
|
-
import { applyWorktreeOverlay } from '../utils/worktree-overlay.js';
|
|
5
|
+
import { applyWorktreeOverlay, resolveOperationPath, getWorktreeIndexRange, isInIndexRange, resolveAllOperationPaths } from '../utils/worktree-overlay.js';
|
|
6
6
|
import { handleError, UserError } from '../utils/errors.js';
|
|
7
7
|
import { printJson } from '../output/formatter.js';
|
|
8
8
|
import { label, success, dim } from '../output/styles.js';
|
|
@@ -14,6 +14,7 @@ export function registerTaskCommand(program) {
|
|
|
14
14
|
.command('list')
|
|
15
15
|
.description('List task files from the slice plan')
|
|
16
16
|
.option('--json', 'Output as JSON')
|
|
17
|
+
.option('--all', 'Show task files from all worktrees')
|
|
17
18
|
.option('--project <name|id>', 'Project name or ID (overrides default)')
|
|
18
19
|
.action(async (opts) => {
|
|
19
20
|
try {
|
|
@@ -27,7 +28,15 @@ export function registerTaskCommand(program) {
|
|
|
27
28
|
if (!project.projectPath) {
|
|
28
29
|
throw new UserError('No projectPath configured. Set one with: cf set projectPath /path/to/project');
|
|
29
30
|
}
|
|
30
|
-
|
|
31
|
+
if (opts.all && rawProject.worktrees?.length) {
|
|
32
|
+
const paths = resolveAllOperationPaths(rawProject);
|
|
33
|
+
await listTaskFiles(project, paths, undefined, opts.json);
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
const operationPath = resolveOperationPath(project, worktreeId) ?? project.projectPath;
|
|
37
|
+
const indexRange = getWorktreeIndexRange(rawProject, worktreeId);
|
|
38
|
+
await listTaskFiles(project, [operationPath], indexRange, opts.json);
|
|
39
|
+
}
|
|
31
40
|
}
|
|
32
41
|
catch (err) {
|
|
33
42
|
handleError(err);
|
|
@@ -50,14 +59,15 @@ export function registerTaskCommand(program) {
|
|
|
50
59
|
if (!project.projectPath) {
|
|
51
60
|
throw new UserError('No projectPath configured. Set one with: cf set projectPath /path/to/project');
|
|
52
61
|
}
|
|
53
|
-
|
|
62
|
+
const operationPath = resolveOperationPath(project, worktreeId) ?? project.projectPath;
|
|
63
|
+
await listTaskItems(project, operationPath, opts.json);
|
|
54
64
|
}
|
|
55
65
|
catch (err) {
|
|
56
66
|
handleError(err);
|
|
57
67
|
}
|
|
58
68
|
});
|
|
59
69
|
}
|
|
60
|
-
async function listTaskItems(project, json) {
|
|
70
|
+
async function listTaskItems(project, operationPath, json) {
|
|
61
71
|
if (!project.fileTasks) {
|
|
62
72
|
throw new UserError('No task file configured. Set one with: cf set tasks <filename>');
|
|
63
73
|
}
|
|
@@ -69,21 +79,21 @@ async function listTaskItems(project, json) {
|
|
|
69
79
|
const sliceIndex = extractSliceIndex(project.fileSlice);
|
|
70
80
|
let taskPaths;
|
|
71
81
|
if (sliceIndex !== null) {
|
|
72
|
-
const tasksDir = join(
|
|
82
|
+
const tasksDir = join(operationPath, 'project-documents/user/tasks');
|
|
73
83
|
try {
|
|
74
84
|
const files = await readdir(tasksDir);
|
|
75
85
|
const matching = files
|
|
76
86
|
.filter((f) => f.startsWith(`${sliceIndex}-tasks.`) && f.endsWith('.md'))
|
|
77
87
|
.sort()
|
|
78
88
|
.map((f) => join(tasksDir, f));
|
|
79
|
-
taskPaths = matching.length > 0 ? matching : [join(
|
|
89
|
+
taskPaths = matching.length > 0 ? matching : [join(operationPath, taskRelPath)];
|
|
80
90
|
}
|
|
81
91
|
catch {
|
|
82
|
-
taskPaths = [join(
|
|
92
|
+
taskPaths = [join(operationPath, taskRelPath)];
|
|
83
93
|
}
|
|
84
94
|
}
|
|
85
95
|
else {
|
|
86
|
-
taskPaths = [join(
|
|
96
|
+
taskPaths = [join(operationPath, taskRelPath)];
|
|
87
97
|
}
|
|
88
98
|
const taskResult = await parseTaskFile(taskPaths);
|
|
89
99
|
if (json) {
|
|
@@ -99,7 +109,7 @@ async function listTaskItems(project, json) {
|
|
|
99
109
|
console.log(icon + text);
|
|
100
110
|
}
|
|
101
111
|
}
|
|
102
|
-
async function listTaskFiles(project, json) {
|
|
112
|
+
async function listTaskFiles(project, operationPaths, indexRange, json) {
|
|
103
113
|
if (!project.fileSlicePlan) {
|
|
104
114
|
throw new UserError('No slice plan configured. Set one with: cf set slicePlan <path>');
|
|
105
115
|
}
|
|
@@ -107,31 +117,54 @@ async function listTaskFiles(project, json) {
|
|
|
107
117
|
if (!planRelPath) {
|
|
108
118
|
throw new UserError('Could not resolve slice plan path.');
|
|
109
119
|
}
|
|
110
|
-
|
|
111
|
-
|
|
120
|
+
// Try to find the plan file across operation paths
|
|
121
|
+
let plan;
|
|
122
|
+
for (const op of operationPaths) {
|
|
123
|
+
try {
|
|
124
|
+
plan = await parseSlicePlan(join(op, planRelPath));
|
|
125
|
+
break;
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
continue;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
if (!plan) {
|
|
132
|
+
throw new UserError('Could not resolve slice plan path.');
|
|
133
|
+
}
|
|
112
134
|
const activeIndex = extractSliceIndex(project.fileSlice);
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
135
|
+
// Collect task files from all operation paths, deduplicate by filename
|
|
136
|
+
const fileMap = new Map(); // filename -> full path to tasks dir
|
|
137
|
+
for (const op of operationPaths) {
|
|
138
|
+
const tasksDir = join(op, 'project-documents/user/tasks');
|
|
139
|
+
try {
|
|
140
|
+
const files = await readdir(tasksDir);
|
|
141
|
+
for (const f of files) {
|
|
142
|
+
if (!fileMap.has(f))
|
|
143
|
+
fileMap.set(f, tasksDir);
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
continue;
|
|
148
|
+
}
|
|
117
149
|
}
|
|
118
|
-
|
|
150
|
+
if (fileMap.size === 0) {
|
|
119
151
|
throw new UserError('Tasks directory not found: project-documents/user/tasks/');
|
|
120
152
|
}
|
|
121
153
|
const summaries = [];
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
.
|
|
154
|
+
const filteredEntries = plan.entries.filter((e) => isInIndexRange(e.index, indexRange));
|
|
155
|
+
for (const entry of filteredEntries) {
|
|
156
|
+
const matching = [...fileMap.entries()]
|
|
157
|
+
.filter(([f]) => f.startsWith(`${entry.index}-tasks.`) && f.endsWith('.md'))
|
|
158
|
+
.sort(([a], [b]) => a.localeCompare(b));
|
|
126
159
|
if (matching.length === 0)
|
|
127
160
|
continue;
|
|
128
|
-
const paths = matching.map((f) => join(
|
|
161
|
+
const paths = matching.map(([f, dir]) => join(dir, f));
|
|
129
162
|
try {
|
|
130
163
|
const result = await parseTaskFile(paths);
|
|
131
164
|
summaries.push({
|
|
132
165
|
index: entry.index,
|
|
133
166
|
name: entry.name,
|
|
134
|
-
files: matching,
|
|
167
|
+
files: matching.map(([f]) => f),
|
|
135
168
|
completed: result.completedTasks,
|
|
136
169
|
total: result.totalTasks,
|
|
137
170
|
isActive: entry.index === activeIndex,
|
|
@@ -141,7 +174,7 @@ async function listTaskFiles(project, json) {
|
|
|
141
174
|
summaries.push({
|
|
142
175
|
index: entry.index,
|
|
143
176
|
name: entry.name,
|
|
144
|
-
files: matching,
|
|
177
|
+
files: matching.map(([f]) => f),
|
|
145
178
|
completed: 0,
|
|
146
179
|
total: 0,
|
|
147
180
|
isActive: entry.index === activeIndex,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAE3C,OAAO,EACL,gBAAgB,EAChB,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,aAAa,GACd,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAC;
|
|
1
|
+
{"version":3,"file":"task.js","sourceRoot":"","sources":["../../src/commands/task.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -3,7 +3,7 @@ import { createRequire } from 'node:module';
|
|
|
3
3
|
import chalk from 'chalk';
|
|
4
4
|
import { Command } from 'commander';
|
|
5
5
|
import { registerConfigCommand } from './commands/config.js';
|
|
6
|
-
import { registerProjectCommand, projectSetAction, projectGetAction, buildSettableFieldsHelp } from './commands/project.js';
|
|
6
|
+
import { registerProjectCommand, projectSetAction, projectGetAction, projectUnsetAction, buildSettableFieldsHelp } from './commands/project.js';
|
|
7
7
|
import { registerStatusCommand } from './commands/status.js';
|
|
8
8
|
import { registerNextCommand } from './commands/next.js';
|
|
9
9
|
import { registerBuildCommand } from './commands/build.js';
|
|
@@ -90,6 +90,23 @@ program
|
|
|
90
90
|
handleError(err);
|
|
91
91
|
}
|
|
92
92
|
});
|
|
93
|
+
program
|
|
94
|
+
.command('unset [field]')
|
|
95
|
+
.description('Unset (clear) a field on the active project (shortcut for cf project unset)')
|
|
96
|
+
.option('--project <name|id>', 'Project name or ID (overrides default)')
|
|
97
|
+
.option('--project-level', 'Force unset at project level (skip worktree routing)')
|
|
98
|
+
.action(async (field, opts) => {
|
|
99
|
+
if (!field) {
|
|
100
|
+
console.log(`Usage: cf unset [options] <field> — run cf unset --help for details`);
|
|
101
|
+
return;
|
|
102
|
+
}
|
|
103
|
+
try {
|
|
104
|
+
await projectUnsetAction(field, opts);
|
|
105
|
+
}
|
|
106
|
+
catch (err) {
|
|
107
|
+
handleError(err);
|
|
108
|
+
}
|
|
109
|
+
});
|
|
93
110
|
// Catch unhandled errors at top level
|
|
94
111
|
process.on('uncaughtException', handleError);
|
|
95
112
|
process.on('unhandledRejection', handleError);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAC7D,OAAO,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,2 +1,26 @@
|
|
|
1
1
|
export { applyWorktreeOverlay } from '@context-forge/core';
|
|
2
|
+
import type { ProjectData } from '@context-forge/core';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the filesystem path for file operations.
|
|
5
|
+
* Returns worktreePath when a worktree is resolved and has a path,
|
|
6
|
+
* otherwise returns projectPath.
|
|
7
|
+
*/
|
|
8
|
+
export declare function resolveOperationPath(project: ProjectData, worktreeId?: string): string | undefined;
|
|
9
|
+
/**
|
|
10
|
+
* Get the index range for filtering, if applicable.
|
|
11
|
+
* Returns the worktree's indexRange for ALL worktrees (including default).
|
|
12
|
+
* Returns undefined only when no worktreeId, no worktrees array, or
|
|
13
|
+
* worktree not found (projects without worktrees — no filtering).
|
|
14
|
+
*/
|
|
15
|
+
export declare function getWorktreeIndexRange(project: ProjectData, worktreeId?: string): [number, number] | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Get all unique filesystem paths for cross-worktree aggregation (--all mode).
|
|
18
|
+
* Collects projectPath + all worktreePath values into a deduplicated set.
|
|
19
|
+
*/
|
|
20
|
+
export declare function resolveAllOperationPaths(project: ProjectData): string[];
|
|
21
|
+
/**
|
|
22
|
+
* Check if a numeric index falls within an optional range.
|
|
23
|
+
* Returns true if no range is specified (no filtering).
|
|
24
|
+
*/
|
|
25
|
+
export declare function isInIndexRange(index: number, range?: [number, number]): boolean;
|
|
2
26
|
//# sourceMappingURL=worktree-overlay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-overlay.d.ts","sourceRoot":"","sources":["../../src/utils/worktree-overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"worktree-overlay.d.ts","sourceRoot":"","sources":["../../src/utils/worktree-overlay.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAE3D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEvD;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,MAAM,GAAG,SAAS,CAMpB;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,WAAW,EACpB,UAAU,CAAC,EAAE,MAAM,GAClB,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,CAK9B;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,WAAW,GACnB,MAAM,EAAE,CAOV;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,GACvB,OAAO,CAGT"}
|
|
@@ -1,3 +1,53 @@
|
|
|
1
1
|
// Re-export from core — canonical implementation lives in @context-forge/core
|
|
2
2
|
export { applyWorktreeOverlay } from '@context-forge/core';
|
|
3
|
+
/**
|
|
4
|
+
* Resolve the filesystem path for file operations.
|
|
5
|
+
* Returns worktreePath when a worktree is resolved and has a path,
|
|
6
|
+
* otherwise returns projectPath.
|
|
7
|
+
*/
|
|
8
|
+
export function resolveOperationPath(project, worktreeId) {
|
|
9
|
+
if (worktreeId && project.worktrees) {
|
|
10
|
+
const wt = project.worktrees.find((w) => w.id === worktreeId);
|
|
11
|
+
if (wt?.worktreePath)
|
|
12
|
+
return wt.worktreePath;
|
|
13
|
+
}
|
|
14
|
+
return project.projectPath;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Get the index range for filtering, if applicable.
|
|
18
|
+
* Returns the worktree's indexRange for ALL worktrees (including default).
|
|
19
|
+
* Returns undefined only when no worktreeId, no worktrees array, or
|
|
20
|
+
* worktree not found (projects without worktrees — no filtering).
|
|
21
|
+
*/
|
|
22
|
+
export function getWorktreeIndexRange(project, worktreeId) {
|
|
23
|
+
if (!worktreeId || !project.worktrees)
|
|
24
|
+
return undefined;
|
|
25
|
+
const wt = project.worktrees.find((w) => w.id === worktreeId);
|
|
26
|
+
if (!wt)
|
|
27
|
+
return undefined;
|
|
28
|
+
return wt.indexRange;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Get all unique filesystem paths for cross-worktree aggregation (--all mode).
|
|
32
|
+
* Collects projectPath + all worktreePath values into a deduplicated set.
|
|
33
|
+
*/
|
|
34
|
+
export function resolveAllOperationPaths(project) {
|
|
35
|
+
const paths = new Set();
|
|
36
|
+
if (project.projectPath)
|
|
37
|
+
paths.add(project.projectPath);
|
|
38
|
+
for (const wt of project.worktrees ?? []) {
|
|
39
|
+
if (wt.worktreePath)
|
|
40
|
+
paths.add(wt.worktreePath);
|
|
41
|
+
}
|
|
42
|
+
return [...paths];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Check if a numeric index falls within an optional range.
|
|
46
|
+
* Returns true if no range is specified (no filtering).
|
|
47
|
+
*/
|
|
48
|
+
export function isInIndexRange(index, range) {
|
|
49
|
+
if (!range)
|
|
50
|
+
return true;
|
|
51
|
+
return index >= range[0] && index <= range[1];
|
|
52
|
+
}
|
|
3
53
|
//# sourceMappingURL=worktree-overlay.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-overlay.js","sourceRoot":"","sources":["../../src/utils/worktree-overlay.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC"}
|
|
1
|
+
{"version":3,"file":"worktree-overlay.js","sourceRoot":"","sources":["../../src/utils/worktree-overlay.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAI3D;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAClC,OAAoB,EACpB,UAAmB;IAEnB,IAAI,UAAU,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;QACpC,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;QAC9D,IAAI,EAAE,EAAE,YAAY;YAAE,OAAO,EAAE,CAAC,YAAY,CAAC;IAC/C,CAAC;IACD,OAAO,OAAO,CAAC,WAAW,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CACnC,OAAoB,EACpB,UAAmB;IAEnB,IAAI,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,SAAS;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,UAAU,CAAC,CAAC;IAC9D,IAAI,CAAC,EAAE;QAAE,OAAO,SAAS,CAAC;IAC1B,OAAO,EAAE,CAAC,UAAU,CAAC;AACvB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,OAAoB;IAEpB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAU,CAAC;IAChC,IAAI,OAAO,CAAC,WAAW;QAAE,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACxD,KAAK,MAAM,EAAE,IAAI,OAAO,CAAC,SAAS,IAAI,EAAE,EAAE,CAAC;QACzC,IAAI,EAAE,CAAC,YAAY;YAAE,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC;IAClD,CAAC;IACD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAa,EACb,KAAwB;IAExB,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IACxB,OAAO,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;AAChD,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@context-forge/cli",
|
|
3
|
-
"version": "0.6.
|
|
3
|
+
"version": "0.6.13",
|
|
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.6.
|
|
35
|
+
"@context-forge/core": "0.6.13"
|
|
36
36
|
},
|
|
37
37
|
"devDependencies": {
|
|
38
38
|
"@types/node": "^25.3.0",
|