@context-forge/cli 0.10.6 → 0.11.0

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.
@@ -1,24 +1,3 @@
1
1
  import { Command } from 'commander';
2
- interface BuildAndPrintOpts {
3
- project?: string;
4
- phase?: string;
5
- slice?: string;
6
- json?: boolean;
7
- embed?: boolean;
8
- }
9
- /**
10
- * Core build logic: resolves project, generates context.
11
- *
12
- * Output modes:
13
- * - `--json`: JSON object to stdout with project, phase, and context fields
14
- * - bare CLI: help message to stderr, nothing to stdout
15
- *
16
- * Slash commands call the CLI, which outputs to stdout — the slash command
17
- * wrapper captures and frames it as working context. Since bare CLI now shows
18
- * a help message instead of raw prompt, slash commands use `--json` implicitly
19
- * (the `!` backtick syntax in the .md file captures stdout).
20
- */
21
- export declare function buildAndPrint(opts: BuildAndPrintOpts): Promise<void>;
22
2
  export declare function registerBuildCommand(program: Command): void;
23
- export {};
24
3
  //# sourceMappingURL=build.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,UAAU,iBAAiB;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;GAWG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA4D1E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqF3D"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqF3D"}
@@ -5,66 +5,6 @@ import { resolveProjectWorktree } from '../utils/project.js';
5
5
  import { withJsonOption, withProjectOption } from '../options.js';
6
6
  import { handleError, UserError } from '../utils/errors.js';
7
7
  import { printJson } from '../output/formatter.js';
8
- /**
9
- * Core build logic: resolves project, generates context.
10
- *
11
- * Output modes:
12
- * - `--json`: JSON object to stdout with project, phase, and context fields
13
- * - bare CLI: help message to stderr, nothing to stdout
14
- *
15
- * Slash commands call the CLI, which outputs to stdout — the slash command
16
- * wrapper captures and frames it as working context. Since bare CLI now shows
17
- * a help message instead of raw prompt, slash commands use `--json` implicitly
18
- * (the `!` backtick syntax in the .md file captures stdout).
19
- */
20
- export async function buildAndPrint(opts) {
21
- const store = new FileProjectStore();
22
- const { id, worktreeId } = await resolveProjectWorktree({ project: opts.project }, store);
23
- const project = await resolveProject(store, id, worktreeId);
24
- if (!project) {
25
- throw new UserError(`Project not found: '${id}'.`, 'PROJECT_NOT_FOUND', `Run cf project list to see available projects.`);
26
- }
27
- if (!project.projectPath) {
28
- throw new UserError(`Project '${project.name}' has no projectPath configured.`, 'MISSING_CONFIG', `Run: cf project set projectPath /path/to/project`);
29
- }
30
- // Status message goes to stderr so stdout stays clean for piping
31
- process.stderr.write(`Building context for ${project.name}...\n`);
32
- // Apply overrides to a working copy
33
- const workingCopy = { ...project };
34
- if (opts.phase) {
35
- const resolved = resolvePhaseValue(opts.phase);
36
- if (!resolved) {
37
- process.stderr.write(`Warning: '${opts.phase}' is not a recognized phase. Use a number (0-7), name (implementation), or shorthand (P6).\n`);
38
- }
39
- const phaseValue = resolved ?? opts.phase;
40
- workingCopy.developmentPhase = phaseValue;
41
- workingCopy.instruction = phaseValue;
42
- }
43
- if (opts.slice)
44
- workingCopy.fileSlice = opts.slice;
45
- const { integrator } = createContextPipeline(workingCopy.projectPath);
46
- let contextString = await integrator.generateContextFromProject(workingCopy, worktreeId);
47
- if (opts.embed) {
48
- contextString = await embedReferencedFiles(workingCopy, workingCopy.projectPath, contextString);
49
- }
50
- if (opts.json) {
51
- // --json mode: structured output to stdout
52
- printJson({
53
- project: project.name,
54
- phase: workingCopy.developmentPhase ?? null,
55
- context: contextString,
56
- });
57
- }
58
- else {
59
- // Bare CLI: help message to stderr, nothing to stdout
60
- const sliceInfo = workingCopy.fileSlice ? `, slice ${workingCopy.fileSlice}` : '';
61
- const phaseInfo = workingCopy.developmentPhase ?? 'no phase set';
62
- process.stderr.write(`\nContext built for ${project.name} (${phaseInfo}${sliceInfo}).\n\n` +
63
- `To use this context:\n` +
64
- ` /cf:build — load as working context in Claude Code\n` +
65
- ` cf build --json — output as JSON for pipelines\n`);
66
- }
67
- }
68
8
  export function registerBuildCommand(program) {
69
9
  const buildCmd = program
70
10
  .command('build')
@@ -1 +1 @@
1
- {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build.js","sourceRoot":"","sources":["../../src/commands/build.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA2F1D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgG1D"}
@@ -6,7 +6,7 @@ import { buildProjectCreationDefaults } from '@context-forge/core';
6
6
  import { handleError } from '../utils/errors.js';
7
7
  import { success, warn, dim } from '../output/styles.js';
8
8
  import { guidesInstallAction } from './guides.js';
9
- import { setupIdeAction } from './setup-ide.js';
9
+ import { setupIdeAction, normalizeTarget } from './setup-ide.js';
10
10
  import { installCommandsAction } from './commandInstaller.js';
11
11
  /**
12
12
  * Returns true if the cwd is a git worktree whose main worktree is already
@@ -60,7 +60,7 @@ export function registerInitCommand(program) {
60
60
  .description('Initialize a Context Forge project in the current directory')
61
61
  .option('--name <name>', 'Project name (defaults to directory basename)')
62
62
  .option('--lite', 'Create project entry only, skip guides/commands/IDE setup')
63
- .option('--ide <target>', 'IDE target for setup (default: claude)')
63
+ .option('--ide <target>', 'IDE target: claude, copilot, cursor, agents (aliases: openai, codex) (default: claude)')
64
64
  .option('--no-ide', 'Skip IDE configuration step')
65
65
  .action(async (opts) => {
66
66
  try {
@@ -130,7 +130,12 @@ export function registerInitCommand(program) {
130
130
  const ideTarget = typeof opts.ide === 'string' ? opts.ide : 'claude';
131
131
  try {
132
132
  await setupIdeAction(cwd, ideTarget, { yes: true });
133
- console.log(success(`IDE configured for ${ideTarget}`));
133
+ // normalizeTarget cannot return null here: setupIdeAction just validated
134
+ // this same string and would have thrown otherwise.
135
+ const normalizedIdeTarget = normalizeTarget(ideTarget) ?? ideTarget;
136
+ const wasAlias = ideTarget.trim().toLowerCase() !== normalizedIdeTarget;
137
+ const ideLabel = wasAlias ? `${normalizedIdeTarget} (${ideTarget})` : normalizedIdeTarget;
138
+ console.log(success(`IDE configured for ${ideLabel}`));
134
139
  }
135
140
  catch (err) {
136
141
  console.log(warn(`IDE setup failed: ${err.message}`));
@@ -1 +1 @@
1
- {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,4BAA4B,EAAE,MAAM,qBAAqB,CAAC;AAEnE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAE9D;;;GAGG;AACH,SAAS,eAAe,CAAC,GAAW,EAAE,eAAyB;IAC7D,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,aAAa,CAAC,EAAE;YACtE,GAAG;YACH,QAAQ,EAAE,MAAM;SACjB,CAAC,CAAC;QACH,MAAM,aAAa,GAAa,EAAE,CAAC;QACnC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;gBACjC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;QACH,CAAC;QACD,MAAM,gBAAgB,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,CAAC,gBAAgB;YAAE,OAAO,KAAK,CAAC;QACpC,OAAO,eAAe,CAAC,QAAQ,CAAC,gBAAgB,CAAC,IAAI,gBAAgB,KAAK,GAAG,CAAC;IAChF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,MAAM,8BAA8B,GAAG,2BAA2B,CAAC;AAEnE;;;;;;GAMG;AACH,SAAS,8BAA8B,CAAC,GAAW;IACjD,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACnD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,EAAE,CAAC,aAAa,CAAC,aAAa,EAAE,GAAG,8BAA8B,IAAI,EAAE,OAAO,CAAC,CAAC;QAChF,OAAO;IACT,CAAC;IACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;IACxD,MAAM,cAAc,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,8BAA8B,CAAC,CAAC;IAC1G,IAAI,cAAc;QAAE,OAAO;IAC3B,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IACnE,EAAE,CAAC,aAAa,CACd,aAAa,EACb,OAAO,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,8BAA8B,IAAI,EAC5E,OAAO,CACR,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,WAAW,CAAC,6DAA6D,CAAC;SAC1E,MAAM,CAAC,eAAe,EAAE,+CAA+C,CAAC;SACxE,MAAM,CAAC,QAAQ,EAAE,2DAA2D,CAAC;SAC7E,MAAM,CAAC,gBAAgB,EAAE,wFAAwF,CAAC;SAClH,MAAM,CAAC,UAAU,EAAE,6BAA6B,CAAC;SACjD,MAAM,CAAC,KAAK,EAAE,IAA+D,EAAE,EAAE;QAChF,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACxC,MAAM,KAAK,GAAG,IAAI,gBAAgB,EAAE,CAAC;YACrC,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,MAAM,EAAE,CAAC;YAEjC,4CAA4C;YAC5C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC,EAAE,CAAC;gBAC3C,IAAI,CAAC;oBACH,YAAY,CAAC,KAAK,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC;oBACzD,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;gBAC1C,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,yCAAyC,CAAC,CAAC,CAAC;gBAC/D,CAAC;YACH,CAAC;YAED,uFAAuF;YACvF,MAAM,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC;YACxD,IAAI,QAAQ,EAAE,CAAC;gBACb,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,YAAY,QAAQ,CAAC,IAAI,4CAA4C,CAAC,CAAC,CAAC;YAC1F,CAAC;iBAAM,CAAC;gBACN,oDAAoD;gBACpD,MAAM,eAAe,GAAG,GAAG;qBACxB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC;qBAC5B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAqB,CAAC,CAAC;gBACvC,IAAI,eAAe,CAAC,GAAG,EAAE,eAAe,CAAC,EAAE,CAAC;oBAC1C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAC,CAAC;oBAC/E,OAAO;gBACT,CAAC;gBAED,iBAAiB;gBACjB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBACpD,MAAM,KAAK,CAAC,MAAM,CAAC,4BAA4B,CAAC;oBAC9C,IAAI,EAAE,WAAW;oBACjB,WAAW,EAAE,GAAG;iBACjB,CAAsB,CAAC,CAAC;gBACzB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,YAAY,WAAW,cAAc,CAAC,CAAC,CAAC;YAC9D,CAAC;YAED,6EAA6E;YAC7E,iEAAiE;YACjE,8BAA8B,CAAC,GAAG,CAAC,CAAC;YAEpC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBACf,yBAAyB;gBACzB,IAAI,CAAC;oBACH,MAAM,mBAAmB,CAAC,GAAG,CAAC,CAAC;oBAC/B,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,CAAC;gBAC3C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAI,GAAa,CAAC,OAAO,IAAI,EAAE,CAAC;oBACzC,IAAI,GAAG,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;wBACpD,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC,CAAC;oBAC5D,CAAC;yBAAM,CAAC;wBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,0BAA0B,GAAG,EAAE,CAAC,CAAC,CAAC;oBACrD,CAAC;gBACH,CAAC;gBAED,2BAA2B;gBAC3B,IAAI,CAAC;oBACH,qBAAqB,EAAE,CAAC;oBACxB,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,oBAAoB,CAAC,CAAC,CAAC;gBAC7C,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,4BAA6B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;gBAC1E,CAAC;gBAED,6EAA6E;gBAC7E,IAAI,IAAI,CAAC,GAAG,KAAK,KAAK,EAAE,CAAC;oBACvB,MAAM,SAAS,GAAG,OAAO,IAAI,CAAC,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,QAAQ,CAAC;oBACrE,IAAI,CAAC;wBACH,MAAM,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC;wBACpD,yEAAyE;wBACzE,oDAAoD;wBACpD,MAAM,mBAAmB,GAAG,eAAe,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;wBACpE,MAAM,QAAQ,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,mBAAmB,CAAC;wBACxE,MAAM,QAAQ,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,mBAAmB,KAAK,SAAS,GAAG,CAAC,CAAC,CAAC,mBAAmB,CAAC;wBAC1F,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,sBAAsB,QAAQ,EAAE,CAAC,CAAC,CAAC;oBACzD,CAAC;oBAAC,OAAO,GAAG,EAAE,CAAC;wBACb,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,qBAAsB,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;oBACnE,CAAC;gBACH,CAAC;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;YAC3D,OAAO,CAAC,GAAG,CAAC,mEAAmE,CAAC,CAAC;QACnF,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,WAAW,CAAC,GAAG,CAAC,CAAC;QACnB,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -1,15 +1,51 @@
1
1
  import { Command } from 'commander';
2
- /** Returns true if the file contains the context-forge managed marker in the first 20 lines. */
3
- export declare function isManagedClaudeMd(filePath: string): boolean;
2
+ import type { ProjectData } from '@context-forge/core';
3
+ export type Target = 'claude' | 'copilot' | 'cursor' | 'agents';
4
+ export interface TargetDescriptor {
5
+ /** Files probed for the managed marker; also the files backed up before overwrite. */
6
+ markerFiles: string[];
7
+ /** Directories copied to worktrees, recursively. */
8
+ propagateDirs: string[];
9
+ /** Label used in prompts and completion messages. */
10
+ label: string;
11
+ }
4
12
  /**
5
- * Returns true if the Copilot IDE install is managed by context-forge.
6
- * Checks the first 20 lines of .github/copilot-instructions.md and AGENTS.md.
7
- * Returns true if at least one of those files exists and contains the marker.
13
+ * One definition per target drives validation, the managed-marker check, backup,
14
+ * and worktree propagation. The `Record<Target, TargetDescriptor>` annotation makes
15
+ * the compiler reject a target added to the `Target` union without an entry here.
8
16
  */
9
- export declare function isManagedCopilotFiles(projectPath: string): boolean;
17
+ export declare const TARGETS: Record<Target, TargetDescriptor>;
18
+ /** Aliases resolved to a canonical target before anything downstream sees the input. */
19
+ export declare const TARGET_ALIASES: Record<string, Target>;
20
+ /** Resolves a target string (case/whitespace-insensitive) to its canonical form, or null if unknown. */
21
+ export declare function normalizeTarget(input: string): Target | null;
22
+ /** Built from TARGETS/TARGET_ALIASES so the message can never drift from what normalizeTarget accepts. */
23
+ export declare function invalidTargetMessage(input: string): string;
24
+ export declare const MANAGED_MARKER = "[//]: # (context-forge:managed)";
25
+ /**
26
+ * Returns true if any of the given (root-relative, `/`-separated) files exists
27
+ * and carries the managed marker in its first 20 lines. Returns false when none
28
+ * of the listed files exists (new install).
29
+ */
30
+ export declare function isManagedInstall(projectPath: string, markerFiles: string[]): boolean;
10
31
  /** Run IDE setup for a project. Errors propagate to the caller. */
11
32
  export declare function setupIdeAction(projectPath: string, target: string, opts?: {
12
33
  yes?: boolean;
13
34
  }): Promise<void>;
35
+ /**
36
+ * Propagate IDE-generated files from the project root to all registered worktrees.
37
+ *
38
+ * The setup-ide script always writes to the project root (its find_project_root()
39
+ * walks up to the nearest directory containing project-documents/, which is always
40
+ * the root). Worktrees share the same guides submodule source but have independent
41
+ * working trees, so without propagation their compiled IDE files go stale after
42
+ * every root setup-ide run.
43
+ *
44
+ * Descriptor-driven: each target's `markerFiles` and `propagateDirs` (see TARGETS)
45
+ * define exactly what is copied. `.claude/settings.local.json` and `.claude/worktrees/`
46
+ * stay out because neither appears in any target's `propagateDirs` — the former is
47
+ * worktree-specific, the latter is the cf worktree registry and root-only.
48
+ */
49
+ export declare function propagateToWorktrees(project: ProjectData, target: string): void;
14
50
  export declare function registerSetupIdeCommand(program: Command): void;
15
51
  //# sourceMappingURL=setup-ide.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"setup-ide.d.ts","sourceRoot":"","sources":["../../src/commands/setup-ide.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,gGAAgG;AAChG,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAI3D;AAID;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAgBlE;AAED,mEAAmE;AACnE,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAuGf;AAmFD,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqC9D"}
1
+ {"version":3,"file":"setup-ide.d.ts","sourceRoot":"","sources":["../../src/commands/setup-ide.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAKvD,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAEhE,MAAM,WAAW,gBAAgB;IAC/B,sFAAsF;IACtF,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oDAAoD;IACpD,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,qDAAqD;IACrD,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;GAIG;AACH,eAAO,MAAM,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAqBpD,CAAC;AAEF,wFAAwF;AACxF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAyC,CAAC;AAE5F,wGAAwG;AACxG,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAK5D;AAeD,0GAA0G;AAC1G,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1D;AAaD,eAAO,MAAM,cAAc,oCAAoC,CAAC;AAEhE;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,OAAO,CAYpF;AAED,mEAAmE;AACnE,wBAAsB,cAAc,CAClC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAE,GACvB,OAAO,CAAC,IAAI,CAAC,CAwEf;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAyC/E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsC9D"}
@@ -6,7 +6,60 @@ import { FileProjectStore, GuideDetector, GUIDE_RELATIVE_PATH } from '@context-f
6
6
  import { resolveProjectId } from '../utils/project.js';
7
7
  import { withProjectOption, withYesOption } from '../options.js';
8
8
  import { handleError, UserError } from '../utils/errors.js';
9
- const VALID_TARGETS = ['claude', 'copilot'];
9
+ /**
10
+ * One definition per target drives validation, the managed-marker check, backup,
11
+ * and worktree propagation. The `Record<Target, TargetDescriptor>` annotation makes
12
+ * the compiler reject a target added to the `Target` union without an entry here.
13
+ */
14
+ export const TARGETS = {
15
+ claude: {
16
+ markerFiles: ['CLAUDE.md'],
17
+ propagateDirs: ['.claude/rules', '.claude/agents', '.claude/skills'],
18
+ label: 'Claude Code',
19
+ },
20
+ copilot: {
21
+ markerFiles: ['.github/copilot-instructions.md', 'AGENTS.md'],
22
+ propagateDirs: ['.github/instructions', '.github/prompts'],
23
+ label: 'GitHub Copilot',
24
+ },
25
+ cursor: {
26
+ markerFiles: ['AGENTS.md'],
27
+ propagateDirs: ['.cursor/rules'],
28
+ label: 'Cursor',
29
+ },
30
+ agents: {
31
+ markerFiles: ['AGENTS.md'],
32
+ propagateDirs: ['.agents/skills'],
33
+ label: 'agents',
34
+ },
35
+ };
36
+ /** Aliases resolved to a canonical target before anything downstream sees the input. */
37
+ export const TARGET_ALIASES = { openai: 'agents', codex: 'agents' };
38
+ /** Resolves a target string (case/whitespace-insensitive) to its canonical form, or null if unknown. */
39
+ export function normalizeTarget(input) {
40
+ const normalized = input.trim().toLowerCase();
41
+ if (normalized in TARGETS)
42
+ return normalized;
43
+ if (normalized in TARGET_ALIASES)
44
+ return TARGET_ALIASES[normalized];
45
+ return null;
46
+ }
47
+ /** Groups TARGET_ALIASES by canonical target, e.g. "openai, codex → agents". */
48
+ function describeAliases() {
49
+ const byTarget = new Map();
50
+ for (const [alias, target] of Object.entries(TARGET_ALIASES)) {
51
+ const group = byTarget.get(target) ?? [];
52
+ group.push(alias);
53
+ byTarget.set(target, group);
54
+ }
55
+ return Array.from(byTarget.entries())
56
+ .map(([target, aliases]) => `${aliases.join(', ')} → ${target}`)
57
+ .join(', ');
58
+ }
59
+ /** Built from TARGETS/TARGET_ALIASES so the message can never drift from what normalizeTarget accepts. */
60
+ export function invalidTargetMessage(input) {
61
+ return `Invalid target '${input}'. Valid targets: ${Object.keys(TARGETS).join(', ')} (aliases: ${describeAliases()})`;
62
+ }
10
63
  /** Prompt user for y/N confirmation via stdin. Returns true if confirmed. */
11
64
  function askConfirmation(prompt) {
12
65
  const rl = readline.createInterface({ input: process.stdin, output: process.stdout });
@@ -17,29 +70,20 @@ function askConfirmation(prompt) {
17
70
  });
18
71
  });
19
72
  }
20
- /** Returns true if the file contains the context-forge managed marker in the first 20 lines. */
21
- export function isManagedClaudeMd(filePath) {
22
- const content = fs.readFileSync(filePath, 'utf-8');
23
- const lines = content.split('\n').slice(0, 20);
24
- return lines.some((line) => line.trim() === '[//]: # (context-forge:managed)');
25
- }
26
- const COPILOT_MANAGED_MARKER = '[//]: # (context-forge:managed)';
73
+ export const MANAGED_MARKER = '[//]: # (context-forge:managed)';
27
74
  /**
28
- * Returns true if the Copilot IDE install is managed by context-forge.
29
- * Checks the first 20 lines of .github/copilot-instructions.md and AGENTS.md.
30
- * Returns true if at least one of those files exists and contains the marker.
75
+ * Returns true if any of the given (root-relative, `/`-separated) files exists
76
+ * and carries the managed marker in its first 20 lines. Returns false when none
77
+ * of the listed files exists (new install).
31
78
  */
32
- export function isManagedCopilotFiles(projectPath) {
33
- const filesToCheck = [
34
- path.join(projectPath, '.github', 'copilot-instructions.md'),
35
- path.join(projectPath, 'AGENTS.md'),
36
- ];
37
- for (const filePath of filesToCheck) {
79
+ export function isManagedInstall(projectPath, markerFiles) {
80
+ for (const relPath of markerFiles) {
81
+ const filePath = path.join(projectPath, ...relPath.split('/'));
38
82
  if (!fs.existsSync(filePath))
39
83
  continue;
40
84
  const content = fs.readFileSync(filePath, 'utf-8');
41
85
  const lines = content.split('\n').slice(0, 20);
42
- if (lines.some((line) => line.trim() === COPILOT_MANAGED_MARKER)) {
86
+ if (lines.some((line) => line.trim() === MANAGED_MARKER)) {
43
87
  return true;
44
88
  }
45
89
  }
@@ -47,9 +91,10 @@ export function isManagedCopilotFiles(projectPath) {
47
91
  }
48
92
  /** Run IDE setup for a project. Errors propagate to the caller. */
49
93
  export async function setupIdeAction(projectPath, target, opts) {
50
- // Validate target
51
- if (!VALID_TARGETS.includes(target)) {
52
- throw new UserError(`Invalid target '${target}'. Valid targets: ${VALID_TARGETS.join(', ')}`);
94
+ // Validate and normalize target — everything downstream uses the canonical value
95
+ const normalizedTarget = normalizeTarget(target);
96
+ if (!normalizedTarget) {
97
+ throw new UserError(invalidTargetMessage(target));
53
98
  }
54
99
  // Check guide installation
55
100
  const detector = new GuideDetector();
@@ -63,71 +108,37 @@ export async function setupIdeAction(projectPath, target, opts) {
63
108
  if (!fs.existsSync(scriptPath)) {
64
109
  throw new UserError(`setup-ide script not found at ${scriptPath}. Your guides installation may be incomplete — try 'cf guides update'.`);
65
110
  }
66
- // CLAUDE.md safety check
67
- const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
68
- const claudeMdBakPath = path.join(projectPath, 'CLAUDE.md.bak');
69
- if (target === 'claude') {
70
- if (fs.existsSync(claudeMdPath)) {
71
- if (isManagedClaudeMd(claudeMdPath)) {
72
- // Managed file — skip backup silently
73
- }
74
- else {
75
- // Not managed — possibly prompt, then backup logic
76
- if (!opts?.yes) {
77
- console.error('Warning: CLAUDE.md already exists and will be overwritten.');
78
- const confirmed = await askConfirmation('Continue? (y/N) ');
79
- if (!confirmed) {
80
- console.error('Aborted.');
81
- return;
82
- }
83
- }
84
- if (!fs.existsSync(claudeMdBakPath)) {
85
- fs.copyFileSync(claudeMdPath, claudeMdBakPath);
86
- console.log('Backed up CLAUDE.md → CLAUDE.md.bak');
87
- }
88
- else {
89
- console.log('existing backup preserved at CLAUDE.md.bak');
111
+ // Safety check — descriptor-driven, identical shape for every target
112
+ const descriptor = TARGETS[normalizedTarget];
113
+ const markerPaths = descriptor.markerFiles.map((rel) => path.join(projectPath, ...rel.split('/')));
114
+ if (!isManagedInstall(projectPath, descriptor.markerFiles)) {
115
+ const existingPaths = markerPaths.filter((p) => fs.existsSync(p));
116
+ if (existingPaths.length > 0) {
117
+ if (!opts?.yes) {
118
+ console.error(`Warning: ${descriptor.label} IDE files already exist and will be overwritten.`);
119
+ const confirmed = await askConfirmation('Continue? (y/N) ');
120
+ if (!confirmed) {
121
+ console.error('Aborted.');
122
+ return;
90
123
  }
91
124
  }
92
- }
93
- }
94
- else if (target === 'copilot') {
95
- // Copilot safety check: only prompt when unmanaged files exist
96
- if (!isManagedCopilotFiles(projectPath)) {
97
- const copilotInstructionsPath = path.join(projectPath, '.github', 'copilot-instructions.md');
98
- const agentsMdPath = path.join(projectPath, 'AGENTS.md');
99
- const eitherExists = fs.existsSync(copilotInstructionsPath) || fs.existsSync(agentsMdPath);
100
- if (eitherExists) {
101
- if (!opts?.yes) {
102
- console.error('Warning: Copilot IDE files already exist and will be overwritten.');
103
- const confirmed = await askConfirmation('Continue? (y/N) ');
104
- if (!confirmed) {
105
- console.error('Aborted.');
106
- return;
107
- }
125
+ for (const filePath of existingPaths) {
126
+ const bakPath = `${filePath}.bak`;
127
+ if (!fs.existsSync(bakPath)) {
128
+ fs.copyFileSync(filePath, bakPath);
129
+ console.log(`Backed up ${path.relative(projectPath, filePath)} → ${path.relative(projectPath, bakPath)}`);
108
130
  }
109
- // Backup each file if it exists and no .bak already present
110
- for (const [src, bak] of [
111
- [copilotInstructionsPath, `${copilotInstructionsPath}.bak`],
112
- [agentsMdPath, `${agentsMdPath}.bak`],
113
- ]) {
114
- if (fs.existsSync(src)) {
115
- if (!fs.existsSync(bak)) {
116
- fs.copyFileSync(src, bak);
117
- console.log(`Backed up ${path.relative(projectPath, src)} → ${path.relative(projectPath, bak)}`);
118
- }
119
- else {
120
- console.log(`existing backup preserved at ${path.relative(projectPath, bak)}`);
121
- }
122
- }
131
+ else {
132
+ console.log(`existing backup preserved at ${path.relative(projectPath, bakPath)}`);
123
133
  }
124
134
  }
125
135
  }
126
- // Managed or no files: proceed silently
136
+ // else: none of the marker files exist — fresh install, proceed silently
127
137
  }
138
+ // else: managed install — proceed silently
128
139
  // Run the setup-ide script
129
140
  try {
130
- execFileSync('bash', [scriptPath, target], {
141
+ execFileSync('bash', [scriptPath, normalizedTarget], {
131
142
  cwd: projectPath,
132
143
  stdio: 'inherit',
133
144
  });
@@ -136,7 +147,7 @@ export async function setupIdeAction(projectPath, target, opts) {
136
147
  const code = err.status ?? 'unknown';
137
148
  throw new UserError(`setup-ide exited with code ${code}. Check the output above for details.`);
138
149
  }
139
- console.error(`IDE setup complete for ${target}.`);
150
+ console.error(`IDE setup complete for ${normalizedTarget}.`);
140
151
  }
141
152
  /**
142
153
  * Propagate IDE-generated files from the project root to all registered worktrees.
@@ -144,74 +155,48 @@ export async function setupIdeAction(projectPath, target, opts) {
144
155
  * The setup-ide script always writes to the project root (its find_project_root()
145
156
  * walks up to the nearest directory containing project-documents/, which is always
146
157
  * the root). Worktrees share the same guides submodule source but have independent
147
- * working trees, so without propagation their CLAUDE.md and .claude/ config files
148
- * go stale after every root setup-ide run.
149
- *
150
- * Files propagated (claude target):
151
- * CLAUDE.md — compiled from alwaysApply rules
152
- * .claude/rules/ — modular (non-alwaysApply) rule files
153
- * .claude/agents/ — agent definition files
154
- * .claude/skills/ — skill definition files
158
+ * working trees, so without propagation their compiled IDE files go stale after
159
+ * every root setup-ide run.
155
160
  *
156
- * Files intentionally NOT propagated:
157
- * .claude/settings.local.json worktree-specific user settings
158
- * .claude/worktrees/ cf worktree registry, root-only
161
+ * Descriptor-driven: each target's `markerFiles` and `propagateDirs` (see TARGETS)
162
+ * define exactly what is copied. `.claude/settings.local.json` and `.claude/worktrees/`
163
+ * stay out because neither appears in any target's `propagateDirs` the former is
164
+ * worktree-specific, the latter is the cf worktree registry and root-only.
159
165
  */
160
- function propagateToWorktrees(project, target) {
161
- const worktrees = (project.worktrees ?? []).filter((wt) => wt.worktreePath && fs.existsSync(wt.worktreePath));
166
+ export function propagateToWorktrees(project, target) {
167
+ const rootPath = project.projectPath;
168
+ const resolvedRootPath = path.resolve(rootPath);
169
+ // WorktreeService migrates a project's pre-worktree workflow fields into a
170
+ // "default" worktree context whose worktreePath IS the project root (see
171
+ // WorktreeService.ts). Propagating the root onto itself is a no-op at best;
172
+ // fs.cpSync throws ERR_FS_CP_EINVAL when src and dest are the same path, so
173
+ // this must be filtered out rather than merely being harmless.
174
+ const worktrees = (project.worktrees ?? []).filter((wt) => wt.worktreePath && fs.existsSync(wt.worktreePath) && path.resolve(wt.worktreePath) !== resolvedRootPath);
162
175
  if (worktrees.length === 0)
163
176
  return;
164
- const rootPath = project.projectPath;
177
+ const resolvedTarget = normalizeTarget(target);
178
+ if (!resolvedTarget) {
179
+ throw new UserError(`No propagation descriptor for target '${target}'.`);
180
+ }
181
+ const descriptor = TARGETS[resolvedTarget];
165
182
  for (const wt of worktrees) {
166
183
  const wtPath = wt.worktreePath;
167
184
  console.log(` → propagating to worktree: ${wt.name ?? wt.id} (${wtPath})`);
168
- if (target === 'claude') {
169
- // CLAUDE.md
170
- const srcMd = path.join(rootPath, 'CLAUDE.md');
171
- if (fs.existsSync(srcMd)) {
172
- fs.copyFileSync(srcMd, path.join(wtPath, 'CLAUDE.md'));
173
- }
174
- // .claude/{rules,agents,skills}
175
- for (const dir of ['rules', 'agents', 'skills']) {
176
- const srcDir = path.join(rootPath, '.claude', dir);
177
- const dstDir = path.join(wtPath, '.claude', dir);
178
- if (!fs.existsSync(srcDir))
179
- continue;
180
- fs.mkdirSync(dstDir, { recursive: true });
181
- for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
182
- if (entry.isFile()) {
183
- fs.copyFileSync(path.join(srcDir, entry.name), path.join(dstDir, entry.name));
184
- }
185
- }
186
- }
185
+ for (const relFile of descriptor.markerFiles) {
186
+ const srcFile = path.join(rootPath, ...relFile.split('/'));
187
+ if (!fs.existsSync(srcFile))
188
+ continue;
189
+ const dstFile = path.join(wtPath, ...relFile.split('/'));
190
+ fs.mkdirSync(path.dirname(dstFile), { recursive: true });
191
+ fs.copyFileSync(srcFile, dstFile);
187
192
  }
188
- else if (target === 'copilot') {
189
- // AGENTS.md
190
- const srcAgents = path.join(rootPath, 'AGENTS.md');
191
- if (fs.existsSync(srcAgents)) {
192
- fs.copyFileSync(srcAgents, path.join(wtPath, 'AGENTS.md'));
193
- }
194
- // .github/copilot-instructions.md
195
- const srcInstructions = path.join(rootPath, '.github', 'copilot-instructions.md');
196
- if (fs.existsSync(srcInstructions)) {
197
- fs.mkdirSync(path.join(wtPath, '.github'), { recursive: true });
198
- fs.copyFileSync(srcInstructions, path.join(wtPath, '.github', 'copilot-instructions.md'));
199
- }
200
- // .github/instructions/ and .github/prompts/
201
- for (const dir of ['instructions', 'prompts']) {
202
- const srcDir = path.join(rootPath, '.github', dir);
203
- const dstDir = path.join(wtPath, '.github', dir);
204
- if (!fs.existsSync(srcDir))
205
- continue;
206
- fs.mkdirSync(dstDir, { recursive: true });
207
- for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
208
- if (entry.isFile()) {
209
- fs.copyFileSync(path.join(srcDir, entry.name), path.join(dstDir, entry.name));
210
- }
211
- }
212
- }
193
+ for (const relDir of descriptor.propagateDirs) {
194
+ const srcDir = path.join(rootPath, ...relDir.split('/'));
195
+ if (!fs.existsSync(srcDir))
196
+ continue;
197
+ const dstDir = path.join(wtPath, ...relDir.split('/'));
198
+ fs.cpSync(srcDir, dstDir, { recursive: true });
213
199
  }
214
- // Future targets (cursor, windsurf) would propagate their own dirs here.
215
200
  }
216
201
  console.log(` Propagated to ${worktrees.length} worktree${worktrees.length !== 1 ? 's' : ''}.`);
217
202
  }
@@ -219,14 +204,17 @@ export function registerSetupIdeCommand(program) {
219
204
  const ideCmd = program
220
205
  .command('setup-ide')
221
206
  .description('Configure IDE-specific AI integration files for the current project')
222
- .argument('<target>', 'IDE target: claude, copilot');
207
+ .argument('<target>', 'IDE target: claude, copilot, cursor, agents (aliases: openai, codex)');
223
208
  withProjectOption(ideCmd);
224
209
  withYesOption(ideCmd);
225
210
  ideCmd.action(async (target, opts) => {
226
211
  try {
227
- // Validate target early (before project resolution for fast failure)
228
- if (!VALID_TARGETS.includes(target)) {
229
- throw new UserError(`Invalid target '${target}'. Valid targets: ${VALID_TARGETS.join(', ')}`);
212
+ // Validate and normalize target early (before project resolution for fast
213
+ // failure). Both downstream calls use the normalized value — an alias like
214
+ // 'codex' has no entry in TARGETS, and propagateToWorktrees throws on a miss.
215
+ const normalizedTarget = normalizeTarget(target);
216
+ if (!normalizedTarget) {
217
+ throw new UserError(invalidTargetMessage(target));
230
218
  }
231
219
  // Resolve project
232
220
  const store = new FileProjectStore();
@@ -239,8 +227,8 @@ export function registerSetupIdeCommand(program) {
239
227
  throw new UserError(`Project '${project.name}' has no configured project path.\n` +
240
228
  ' Run cf init in the project directory to set the path.');
241
229
  }
242
- await setupIdeAction(project.projectPath, target, { yes: opts.yes });
243
- propagateToWorktrees(project, target);
230
+ await setupIdeAction(project.projectPath, normalizedTarget, { yes: opts.yes });
231
+ propagateToWorktrees(project, normalizedTarget);
244
232
  }
245
233
  catch (err) {
246
234
  handleError(err);
@@ -1 +1 @@
1
- {"version":3,"file":"setup-ide.js","sourceRoot":"","sources":["../../src/commands/setup-ide.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"setup-ide.js","sourceRoot":"","sources":["../../src/commands/setup-ide.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.10.6",
3
+ "version": "0.11.0",
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.10.6"
35
+ "@context-forge/core": "0.11.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^25.3.0",