@context-forge/cli 0.8.5 → 0.8.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (133) hide show
  1. package/dist/commands/arch.d.ts +7 -0
  2. package/dist/commands/arch.d.ts.map +1 -0
  3. package/dist/commands/arch.js +160 -0
  4. package/dist/commands/arch.js.map +1 -0
  5. package/dist/commands/backup.d.ts +3 -0
  6. package/dist/commands/backup.d.ts.map +1 -0
  7. package/dist/commands/backup.js +27 -0
  8. package/dist/commands/backup.js.map +1 -0
  9. package/dist/commands/build.d.ts +24 -0
  10. package/dist/commands/build.d.ts.map +1 -0
  11. package/dist/commands/build.js +146 -0
  12. package/dist/commands/build.js.map +1 -0
  13. package/dist/commands/check.d.ts +3 -0
  14. package/dist/commands/check.d.ts.map +1 -0
  15. package/dist/commands/check.js +211 -0
  16. package/dist/commands/check.js.map +1 -0
  17. package/dist/commands/commandInstaller.d.ts +28 -0
  18. package/dist/commands/commandInstaller.d.ts.map +1 -0
  19. package/dist/commands/commandInstaller.js +136 -0
  20. package/dist/commands/commandInstaller.js.map +1 -0
  21. package/dist/commands/config.d.ts +3 -0
  22. package/dist/commands/config.d.ts.map +1 -0
  23. package/dist/commands/config.js +69 -0
  24. package/dist/commands/config.js.map +1 -0
  25. package/dist/commands/future.d.ts +3 -0
  26. package/dist/commands/future.d.ts.map +1 -0
  27. package/dist/commands/future.js +96 -0
  28. package/dist/commands/future.js.map +1 -0
  29. package/dist/commands/guides.d.ts +9 -0
  30. package/dist/commands/guides.d.ts.map +1 -0
  31. package/dist/commands/guides.js +156 -0
  32. package/dist/commands/guides.js.map +1 -0
  33. package/dist/commands/init.d.ts +3 -0
  34. package/dist/commands/init.d.ts.map +1 -0
  35. package/dist/commands/init.js +124 -0
  36. package/dist/commands/init.js.map +1 -0
  37. package/dist/commands/list.d.ts +3 -0
  38. package/dist/commands/list.d.ts.map +1 -0
  39. package/dist/commands/list.js +93 -0
  40. package/dist/commands/list.js.map +1 -0
  41. package/dist/commands/next.d.ts +3 -0
  42. package/dist/commands/next.d.ts.map +1 -0
  43. package/dist/commands/next.js +51 -0
  44. package/dist/commands/next.js.map +1 -0
  45. package/dist/commands/plan.d.ts +7 -0
  46. package/dist/commands/plan.d.ts.map +1 -0
  47. package/dist/commands/plan.js +102 -0
  48. package/dist/commands/plan.js.map +1 -0
  49. package/dist/commands/project.d.ts +25 -0
  50. package/dist/commands/project.d.ts.map +1 -0
  51. package/dist/commands/project.js +550 -0
  52. package/dist/commands/project.js.map +1 -0
  53. package/dist/commands/prompt.d.ts +3 -0
  54. package/dist/commands/prompt.d.ts.map +1 -0
  55. package/dist/commands/prompt.js +112 -0
  56. package/dist/commands/prompt.js.map +1 -0
  57. package/dist/commands/setup-ide.d.ts +15 -0
  58. package/dist/commands/setup-ide.d.ts.map +1 -0
  59. package/dist/commands/setup-ide.js +250 -0
  60. package/dist/commands/setup-ide.js.map +1 -0
  61. package/dist/commands/slice.d.ts +6 -0
  62. package/dist/commands/slice.d.ts.map +1 -0
  63. package/dist/commands/slice.js +100 -0
  64. package/dist/commands/slice.js.map +1 -0
  65. package/dist/commands/status.d.ts +3 -0
  66. package/dist/commands/status.d.ts.map +1 -0
  67. package/dist/commands/status.js +209 -0
  68. package/dist/commands/status.js.map +1 -0
  69. package/dist/commands/task.d.ts +12 -0
  70. package/dist/commands/task.d.ts.map +1 -0
  71. package/dist/commands/task.js +185 -0
  72. package/dist/commands/task.js.map +1 -0
  73. package/dist/commands/update.d.ts +27 -0
  74. package/dist/commands/update.d.ts.map +1 -0
  75. package/dist/commands/update.js +172 -0
  76. package/dist/commands/update.js.map +1 -0
  77. package/dist/commands/workflow.d.ts +3 -0
  78. package/dist/commands/workflow.d.ts.map +1 -0
  79. package/dist/commands/workflow.js +204 -0
  80. package/dist/commands/workflow.js.map +1 -0
  81. package/dist/commands/worktree.d.ts +3 -0
  82. package/dist/commands/worktree.d.ts.map +1 -0
  83. package/dist/commands/worktree.js +371 -0
  84. package/dist/commands/worktree.js.map +1 -0
  85. package/dist/index.d.ts +3 -0
  86. package/dist/index.d.ts.map +1 -0
  87. package/dist/index.js +167 -0
  88. package/dist/index.js.map +1 -0
  89. package/dist/options.d.ts +16 -0
  90. package/dist/options.d.ts.map +1 -0
  91. package/dist/options.js +29 -0
  92. package/dist/options.js.map +1 -0
  93. package/dist/output/formatter.d.ts +6 -0
  94. package/dist/output/formatter.d.ts.map +1 -0
  95. package/dist/output/formatter.js +9 -0
  96. package/dist/output/formatter.js.map +1 -0
  97. package/dist/output/styles.d.ts +15 -0
  98. package/dist/output/styles.d.ts.map +1 -0
  99. package/dist/output/styles.js +16 -0
  100. package/dist/output/styles.js.map +1 -0
  101. package/dist/output/tables.d.ts +6 -0
  102. package/dist/output/tables.d.ts.map +1 -0
  103. package/dist/output/tables.js +45 -0
  104. package/dist/output/tables.js.map +1 -0
  105. package/dist/utils/breaking-changes.d.ts +14 -0
  106. package/dist/utils/breaking-changes.d.ts.map +1 -0
  107. package/dist/utils/breaking-changes.js +11 -0
  108. package/dist/utils/breaking-changes.js.map +1 -0
  109. package/dist/utils/commandCatalog.d.ts +25 -0
  110. package/dist/utils/commandCatalog.d.ts.map +1 -0
  111. package/dist/utils/commandCatalog.js +32 -0
  112. package/dist/utils/commandCatalog.js.map +1 -0
  113. package/dist/utils/confirm.d.ts +3 -0
  114. package/dist/utils/confirm.d.ts.map +1 -0
  115. package/dist/utils/confirm.js +12 -0
  116. package/dist/utils/confirm.js.map +1 -0
  117. package/dist/utils/errors.d.ts +22 -0
  118. package/dist/utils/errors.d.ts.map +1 -0
  119. package/dist/utils/errors.js +63 -0
  120. package/dist/utils/errors.js.map +1 -0
  121. package/dist/utils/phaseShorthand.d.ts +23 -0
  122. package/dist/utils/phaseShorthand.d.ts.map +1 -0
  123. package/dist/utils/phaseShorthand.js +68 -0
  124. package/dist/utils/phaseShorthand.js.map +1 -0
  125. package/dist/utils/project.d.ts +60 -0
  126. package/dist/utils/project.d.ts.map +1 -0
  127. package/dist/utils/project.js +140 -0
  128. package/dist/utils/project.js.map +1 -0
  129. package/dist/utils/worktree-overlay.d.ts +31 -0
  130. package/dist/utils/worktree-overlay.d.ts.map +1 -0
  131. package/dist/utils/worktree-overlay.js +63 -0
  132. package/dist/utils/worktree-overlay.js.map +1 -0
  133. package/package.json +2 -2
@@ -0,0 +1,124 @@
1
+ import * as fs from 'node:fs';
2
+ import * as path from 'node:path';
3
+ import { execFileSync } from 'node:child_process';
4
+ import { FileProjectStore } from '@context-forge/core/node';
5
+ import { buildProjectCreationDefaults } from '@context-forge/core';
6
+ import { handleError } from '../utils/errors.js';
7
+ import { success, warn, dim } from '../output/styles.js';
8
+ import { guidesInstallAction } from './guides.js';
9
+ import { setupIdeAction } from './setup-ide.js';
10
+ import { installCommandsAction } from './commandInstaller.js';
11
+ /**
12
+ * Returns true if the cwd is a git worktree whose main worktree is already
13
+ * registered as a CF project.
14
+ */
15
+ function isGitWorktreeOf(cwd, registeredPaths) {
16
+ try {
17
+ const output = execFileSync('git', ['worktree', 'list', '--porcelain'], {
18
+ cwd,
19
+ encoding: 'utf8',
20
+ });
21
+ const worktreePaths = [];
22
+ for (const line of output.split('\n')) {
23
+ if (line.startsWith('worktree ')) {
24
+ worktreePaths.push(line.slice('worktree '.length).trim());
25
+ }
26
+ }
27
+ const mainWorktreePath = worktreePaths[0];
28
+ if (!mainWorktreePath)
29
+ return false;
30
+ return registeredPaths.includes(mainWorktreePath) && mainWorktreePath !== cwd;
31
+ }
32
+ catch {
33
+ return false;
34
+ }
35
+ }
36
+ export function registerInitCommand(program) {
37
+ program
38
+ .command('init')
39
+ .description('Initialize a Context Forge project in the current directory')
40
+ .option('--name <name>', 'Project name (defaults to directory basename)')
41
+ .option('--lite', 'Create project entry only, skip guides/commands/IDE setup')
42
+ .option('--ide <target>', 'IDE target for setup (default: claude)')
43
+ .option('--no-ide', 'Skip IDE configuration step')
44
+ .action(async (opts) => {
45
+ try {
46
+ const cwd = path.resolve(process.cwd());
47
+ const store = new FileProjectStore();
48
+ const all = await store.getAll();
49
+ // Detection 1: No .git directory → git init
50
+ if (!fs.existsSync(path.join(cwd, '.git'))) {
51
+ try {
52
+ execFileSync('git', ['init'], { cwd, stdio: 'inherit' });
53
+ console.log(success('git initialized'));
54
+ }
55
+ catch {
56
+ console.log(warn('git init failed, continuing without git'));
57
+ }
58
+ }
59
+ // Detection 2: CF project already registered at CWD — skip creation but continue setup
60
+ const existing = all.find((p) => p.projectPath === cwd);
61
+ if (existing) {
62
+ console.log(dim(`Project '${existing.name}' already registered — running setup steps`));
63
+ }
64
+ else {
65
+ // Detection 3: Git worktree of a registered project
66
+ const registeredPaths = all
67
+ .filter((p) => p.projectPath)
68
+ .map((p) => p.projectPath);
69
+ if (isGitWorktreeOf(cwd, registeredPaths)) {
70
+ console.log(warn('This looks like a worktree. Run cf worktree init instead.'));
71
+ return;
72
+ }
73
+ // Create project
74
+ const projectName = opts.name || path.basename(cwd);
75
+ await store.create(buildProjectCreationDefaults({
76
+ name: projectName,
77
+ projectPath: cwd,
78
+ }));
79
+ console.log(success(`Project '${projectName}' registered`));
80
+ }
81
+ if (!opts.lite) {
82
+ // Step 2: Install guides
83
+ try {
84
+ await guidesInstallAction(cwd);
85
+ console.log(success('Guides installed'));
86
+ }
87
+ catch (err) {
88
+ const msg = err.message ?? '';
89
+ if (msg.toLowerCase().includes('already installed')) {
90
+ console.log(dim(' Guides already installed — skipping'));
91
+ }
92
+ else {
93
+ console.log(warn(`Guides install failed: ${msg}`));
94
+ }
95
+ }
96
+ // Step 3: Install commands
97
+ try {
98
+ installCommandsAction();
99
+ console.log(success('Commands installed'));
100
+ }
101
+ catch (err) {
102
+ console.log(warn(`Commands install failed: ${err.message}`));
103
+ }
104
+ // Step 4: IDE setup (--no-ide sets opts.ide to false via commander negation)
105
+ if (opts.ide !== false) {
106
+ const ideTarget = typeof opts.ide === 'string' ? opts.ide : 'claude';
107
+ try {
108
+ await setupIdeAction(cwd, ideTarget, { yes: true });
109
+ console.log(success(`IDE configured for ${ideTarget}`));
110
+ }
111
+ catch (err) {
112
+ console.log(warn(`IDE setup failed: ${err.message}`));
113
+ }
114
+ }
115
+ }
116
+ console.log(dim('──────────────────────────────────────'));
117
+ console.log('Your project is ready. Run cf next to see recommended next steps.');
118
+ }
119
+ catch (err) {
120
+ handleError(err);
121
+ }
122
+ });
123
+ }
124
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerListCommand(program: Command): void;
3
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoF1D"}
@@ -0,0 +1,93 @@
1
+ import { projectListAction } from './project.js';
2
+ import { archListAction } from './arch.js';
3
+ import { planListAction } from './plan.js';
4
+ import { sliceListAction } from './slice.js';
5
+ import { taskListAction, taskItemsAction } from './task.js';
6
+ import { handleError } from '../utils/errors.js';
7
+ import { withJsonOption, withAllOption, withProjectOption } from '../options.js';
8
+ export function registerListCommand(program) {
9
+ const cmd = program
10
+ .command('list')
11
+ .description('List project artifacts');
12
+ const projectsCmd = cmd.command('projects').description('List all projects');
13
+ withJsonOption(projectsCmd);
14
+ projectsCmd.action(async (opts) => {
15
+ try {
16
+ await projectListAction(opts);
17
+ }
18
+ catch (err) {
19
+ handleError(err);
20
+ }
21
+ });
22
+ const initiativesCmd = cmd.command('initiatives').description('List architecture initiatives');
23
+ withJsonOption(initiativesCmd);
24
+ withAllOption(initiativesCmd);
25
+ withProjectOption(initiativesCmd);
26
+ initiativesCmd.action(async (opts) => {
27
+ try {
28
+ await archListAction(opts);
29
+ }
30
+ catch (err) {
31
+ handleError(err);
32
+ }
33
+ });
34
+ const archCmd = cmd.command('arch').description('Alias for "cf list initiatives"');
35
+ withJsonOption(archCmd);
36
+ withAllOption(archCmd);
37
+ withProjectOption(archCmd);
38
+ archCmd.action(async (opts) => {
39
+ try {
40
+ await archListAction(opts);
41
+ }
42
+ catch (err) {
43
+ handleError(err);
44
+ }
45
+ });
46
+ const plansCmd = cmd.command('plans').description('List slice plan files');
47
+ withJsonOption(plansCmd);
48
+ withAllOption(plansCmd);
49
+ withProjectOption(plansCmd);
50
+ plansCmd.action(async (opts) => {
51
+ try {
52
+ await planListAction(opts);
53
+ }
54
+ catch (err) {
55
+ handleError(err);
56
+ }
57
+ });
58
+ const slicesCmd = cmd.command('slices').description('List slices from active plan');
59
+ withJsonOption(slicesCmd);
60
+ withProjectOption(slicesCmd);
61
+ slicesCmd.action(async (opts) => {
62
+ try {
63
+ await sliceListAction(opts);
64
+ }
65
+ catch (err) {
66
+ handleError(err);
67
+ }
68
+ });
69
+ const tasksCmd = cmd.command('tasks').description('List task files from plan');
70
+ withJsonOption(tasksCmd);
71
+ withAllOption(tasksCmd);
72
+ withProjectOption(tasksCmd);
73
+ tasksCmd.action(async (opts) => {
74
+ try {
75
+ await taskListAction(opts);
76
+ }
77
+ catch (err) {
78
+ handleError(err);
79
+ }
80
+ });
81
+ const itemsCmd = cmd.command('items').description('Show items from active task file');
82
+ withJsonOption(itemsCmd);
83
+ withProjectOption(itemsCmd);
84
+ itemsCmd.action(async (opts) => {
85
+ try {
86
+ await taskItemsAction(opts);
87
+ }
88
+ catch (err) {
89
+ handleError(err);
90
+ }
91
+ });
92
+ }
93
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerNextCommand(program: Command): void;
3
+ //# sourceMappingURL=next.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.d.ts","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASpC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6C1D"}
@@ -0,0 +1,51 @@
1
+ import { FileProjectStore, WorkflowNavigator } from '@context-forge/core/node';
2
+ import { resolveProject } from '@context-forge/core';
3
+ import { resolveProjectWorktree } from '../utils/project.js';
4
+ import { handleError, UserError } from '../utils/errors.js';
5
+ import { withJsonOption, withProjectOption } from '../options.js';
6
+ import { printJson } from '../output/formatter.js';
7
+ import { label, value as valueStyle, dim, warn } from '../output/styles.js';
8
+ export function registerNextCommand(program) {
9
+ const nextCmd = program
10
+ .command('next')
11
+ .description('Show recommended next action for the active project');
12
+ withJsonOption(nextCmd);
13
+ withProjectOption(nextCmd);
14
+ nextCmd.action(async (opts) => {
15
+ try {
16
+ const store = new FileProjectStore();
17
+ const { id, worktreeId } = await resolveProjectWorktree({ project: opts.project }, store);
18
+ const project = await resolveProject(store, id, worktreeId);
19
+ if (!project) {
20
+ throw new UserError(`Project not found: '${id}'. Run cf project list to see available projects.`);
21
+ }
22
+ const nav = new WorkflowNavigator();
23
+ const result = await nav.getNext(project);
24
+ if (opts.json) {
25
+ printJson(result);
26
+ return;
27
+ }
28
+ if (result.warnings?.length) {
29
+ for (const w of result.warnings) {
30
+ console.log(warn('Warning: ') + dim(w));
31
+ }
32
+ console.log('');
33
+ }
34
+ console.log(label('Next: ') + valueStyle(result.recommendation));
35
+ if (result.slice) {
36
+ console.log(label('Slice: ') + valueStyle(result.slice));
37
+ }
38
+ if (result.phase) {
39
+ console.log(label('Phase: ') + valueStyle(result.phase));
40
+ }
41
+ console.log(label('Rationale: ') + dim(result.rationale));
42
+ if (result.suggestedCommand) {
43
+ console.log(label('Run: ') + valueStyle(result.suggestedCommand));
44
+ }
45
+ }
46
+ catch (err) {
47
+ handleError(err);
48
+ }
49
+ });
50
+ }
51
+ //# sourceMappingURL=next.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"next.js","sourceRoot":"","sources":["../../src/commands/next.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /** Shared action handler for listing slice plans. */
2
+ export declare function planListAction(opts: {
3
+ json?: boolean;
4
+ all?: boolean;
5
+ project?: string;
6
+ }): Promise<void>;
7
+ //# sourceMappingURL=plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../src/commands/plan.ts"],"names":[],"mappings":"AAcA,qDAAqD;AACrD,wBAAsB,cAAc,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuG7G"}
@@ -0,0 +1,102 @@
1
+ import { join } from 'node:path';
2
+ import { readdir } from 'node:fs/promises';
3
+ import { FileProjectStore, parseSlicePlan, } from '@context-forge/core/node';
4
+ import { resolveProjectWorktree } from '../utils/project.js';
5
+ import { resolveProject } from '@context-forge/core';
6
+ import { resolveOperationPath, getWorktreeIndexRange, isInIndexRange, resolveAllOperationPaths } from '../utils/worktree-overlay.js';
7
+ import { UserError } from '../utils/errors.js';
8
+ import { printJson } from '../output/formatter.js';
9
+ import { renderTable } from '../output/tables.js';
10
+ import { label, success, dim } from '../output/styles.js';
11
+ /** Shared action handler for listing slice plans. */
12
+ export async function planListAction(opts) {
13
+ const store = new FileProjectStore();
14
+ const { id, worktreeId } = await resolveProjectWorktree({ project: opts.project }, store);
15
+ const rawProject = await store.getById(id);
16
+ if (!rawProject) {
17
+ throw new UserError(`Project not found: '${id}'.`);
18
+ }
19
+ const project = await resolveProject(store, id, worktreeId);
20
+ if (!project) {
21
+ throw new UserError(`Project not found: '${id}'.`);
22
+ }
23
+ if (!project.projectPath) {
24
+ throw new UserError('No projectPath configured. Set one with: cf set projectPath /path/to/project');
25
+ }
26
+ let scanPaths;
27
+ let indexRange;
28
+ if (opts.all && rawProject.worktrees?.length) {
29
+ scanPaths = resolveAllOperationPaths(rawProject);
30
+ // No index filtering in --all mode
31
+ }
32
+ else {
33
+ const operationPath = resolveOperationPath(project, worktreeId) ?? project.projectPath;
34
+ scanPaths = [operationPath];
35
+ indexRange = getWorktreeIndexRange(rawProject, worktreeId);
36
+ }
37
+ // Collect plan files from all scan paths, deduplicate by filename
38
+ const seen = new Set();
39
+ const planFiles = [];
40
+ for (const sp of scanPaths) {
41
+ const archDir = join(sp, 'project-documents/user/architecture');
42
+ let files;
43
+ try {
44
+ files = await readdir(archDir);
45
+ }
46
+ catch {
47
+ continue;
48
+ }
49
+ for (const f of files) {
50
+ if (!/^\d+-slices\..*\.md$/.test(f))
51
+ continue;
52
+ const m = /^(\d+)-/.exec(f);
53
+ if (m && !isInIndexRange(parseInt(m[1], 10), indexRange))
54
+ continue;
55
+ if (!seen.has(f)) {
56
+ seen.add(f);
57
+ planFiles.push({ filename: f, archDir });
58
+ }
59
+ }
60
+ }
61
+ planFiles.sort((a, b) => a.filename.localeCompare(b.filename));
62
+ if (planFiles.length === 0) {
63
+ if (opts.json) {
64
+ console.log(JSON.stringify([]));
65
+ return;
66
+ }
67
+ console.log(dim('No slice plans found in project.'));
68
+ return;
69
+ }
70
+ // Determine active plan stem (without .md)
71
+ const activeStem = project.fileSlicePlan ?? null;
72
+ const entries = await Promise.all(planFiles.map(async ({ filename, archDir }) => {
73
+ const stem = filename.replace(/\.md$/, '');
74
+ const indexMatch = /^(\d+)-/.exec(filename);
75
+ const index = indexMatch ? indexMatch[1] : '—';
76
+ const planPath = join(archDir, filename);
77
+ const result = await parseSlicePlan(planPath);
78
+ const isActive = stem === activeStem;
79
+ return {
80
+ index,
81
+ file: stem,
82
+ completed: result.completedSlices,
83
+ total: result.totalSlices,
84
+ isActive,
85
+ };
86
+ }));
87
+ if (opts.json) {
88
+ printJson(entries);
89
+ return;
90
+ }
91
+ console.log(label('\nSlice Plans'));
92
+ const rows = entries.map((e) => {
93
+ const progress = e.total > 0
94
+ ? `${e.completed}/${e.total}`
95
+ : '—';
96
+ const active = e.isActive ? success(' ← active') : '';
97
+ const icon = e.total > 0 && e.completed === e.total ? success('✓') : dim('○');
98
+ return [e.index, icon + ' ' + e.file, progress + active];
99
+ });
100
+ console.log(renderTable(['#', 'Plan', 'Progress'], rows));
101
+ }
102
+ //# 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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"}
@@ -0,0 +1,25 @@
1
+ import { Command } from 'commander';
2
+ /** Generate help text showing settable fields grouped by category. */
3
+ export declare function buildSettableFieldsHelp(): string;
4
+ /** Shared action handler for `cf set` and `cf project set`. */
5
+ export declare function projectSetAction(field: string, val: string, opts: {
6
+ project?: string;
7
+ projectLevel?: boolean;
8
+ }): Promise<void>;
9
+ /** Shared action handler for `cf unset` and `cf project unset`. */
10
+ export declare function projectUnsetAction(field: string, opts: {
11
+ project?: string;
12
+ projectLevel?: boolean;
13
+ }): Promise<void>;
14
+ /** Shared action handler for `cf get` and `cf project get`. */
15
+ export declare function projectGetAction(opts: {
16
+ json?: boolean;
17
+ project?: string;
18
+ projectLevel?: boolean;
19
+ }): Promise<void>;
20
+ /** Shared action handler for listing all projects. */
21
+ export declare function projectListAction(opts: {
22
+ json?: boolean;
23
+ }): Promise<void>;
24
+ export declare function registerProjectCommand(program: Command): void;
25
+ //# sourceMappingURL=project.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/commands/project.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoKpC,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,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACjD,OAAO,CAAC,IAAI,CAAC,CAqMf;AAED,mEAAmE;AACnE,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACjD,OAAO,CAAC,IAAI,CAAC,CA2Cf;AA6CD,+DAA+D;AAC/D,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,OAAO,CAAA;CAAE,GACjE,OAAO,CAAC,IAAI,CAAC,CAqDf;AAED,sDAAsD;AACtD,wBAAsB,iBAAiB,CAAC,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+B/E;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiG7D"}