@context-forge/cli 0.4.2 → 0.5.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.
Files changed (48) hide show
  1. package/README.md +22 -8
  2. package/dist/commands/arch.d.ts.map +1 -1
  3. package/dist/commands/arch.js +6 -4
  4. package/dist/commands/arch.js.map +1 -1
  5. package/dist/commands/build.d.ts.map +1 -1
  6. package/dist/commands/build.js +9 -6
  7. package/dist/commands/build.js.map +1 -1
  8. package/dist/commands/check.d.ts.map +1 -1
  9. package/dist/commands/check.js +59 -21
  10. package/dist/commands/check.js.map +1 -1
  11. package/dist/commands/next.d.ts.map +1 -1
  12. package/dist/commands/next.js +6 -4
  13. package/dist/commands/next.js.map +1 -1
  14. package/dist/commands/plan.d.ts.map +1 -1
  15. package/dist/commands/plan.js +6 -4
  16. package/dist/commands/plan.js.map +1 -1
  17. package/dist/commands/project.d.ts +2 -0
  18. package/dist/commands/project.d.ts.map +1 -1
  19. package/dist/commands/project.js +144 -36
  20. package/dist/commands/project.js.map +1 -1
  21. package/dist/commands/slice.d.ts.map +1 -1
  22. package/dist/commands/slice.js +6 -4
  23. package/dist/commands/slice.js.map +1 -1
  24. package/dist/commands/status.d.ts.map +1 -1
  25. package/dist/commands/status.js +148 -7
  26. package/dist/commands/status.js.map +1 -1
  27. package/dist/commands/task.d.ts.map +1 -1
  28. package/dist/commands/task.js +11 -8
  29. package/dist/commands/task.js.map +1 -1
  30. package/dist/commands/worktree.d.ts +3 -0
  31. package/dist/commands/worktree.d.ts.map +1 -0
  32. package/dist/commands/worktree.js +332 -0
  33. package/dist/commands/worktree.js.map +1 -0
  34. package/dist/index.js +4 -0
  35. package/dist/index.js.map +1 -1
  36. package/dist/utils/confirm.d.ts +3 -0
  37. package/dist/utils/confirm.d.ts.map +1 -0
  38. package/dist/utils/confirm.js +12 -0
  39. package/dist/utils/confirm.js.map +1 -0
  40. package/dist/utils/project.d.ts +40 -7
  41. package/dist/utils/project.d.ts.map +1 -1
  42. package/dist/utils/project.js +97 -19
  43. package/dist/utils/project.js.map +1 -1
  44. package/dist/utils/worktree-overlay.d.ts +2 -0
  45. package/dist/utils/worktree-overlay.d.ts.map +1 -0
  46. package/dist/utils/worktree-overlay.js +3 -0
  47. package/dist/utils/worktree-overlay.js.map +1 -0
  48. package/package.json +2 -2
@@ -1 +1 @@
1
- {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAW7B;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAa7B;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,MAAM,CAAC;AAEnE,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED;;;;;;;GAOG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,eAAe,CAAC,CAgD1B"}
1
+ {"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,gBAAgB,EAAwB,MAAM,0BAA0B,CAAC;AACjG,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAGvD;;;GAGG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,CAW7B;AAED,gFAAgF;AAChF,MAAM,WAAW,QAAQ;IACvB,OAAO,EAAE,WAAW,CAAC;IACrB,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;;;GAKG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC,CAyC1B;AAED,MAAM,MAAM,gBAAgB,GAAG,MAAM,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAEhF,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;CAC1B;AAED,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,gBAAgB,CAAC;IACzB,sDAAsD;IACtD,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,0CAA0C;AAC1C,MAAM,WAAW,6BAA6B;IAC5C,kDAAkD;IAClD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sFAAsF;IACtF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,6BAA6B,EACnC,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,uBAAuB,CAAC,CA0ElC;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,eAAe,CAAC,CAG1B;AAED;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,gBAAgB,GACtB,OAAO,CAAC,OAAO,qBAAqB,EAAE,eAAe,GAAG,SAAS,CAAC,CAapE"}
@@ -1,4 +1,4 @@
1
- import { ConfigManager } from '@context-forge/core/node';
1
+ import { ConfigManager, GitWorktreeDiscovery } from '@context-forge/core/node';
2
2
  import { UserError } from './errors.js';
3
3
  /**
4
4
  * Find a project by exact ID or case-insensitive name.
@@ -16,32 +16,60 @@ export async function findByNameOrId(nameOrId, store) {
16
16
  return byName ?? null;
17
17
  }
18
18
  /**
19
- * Find the project whose projectPath best matches the current working directory.
20
- * When multiple projects match (nested paths), the longest projectPath wins.
21
- * Projects without a projectPath are skipped.
19
+ * Find the project whose projectPath or worktreePath best matches the current
20
+ * working directory. When multiple paths match (nested paths), the longest wins.
21
+ * Projects without a projectPath are skipped; worktrees without a worktreePath
22
+ * are also skipped.
22
23
  */
23
24
  export async function findProjectByCwd(store) {
24
25
  const projects = await store.getAll();
25
26
  const cwd = process.cwd();
26
- const matches = projects
27
- .filter((p) => {
28
- if (!p.projectPath)
29
- return false;
30
- const path = p.projectPath.endsWith('/') ? p.projectPath.slice(0, -1) : p.projectPath;
27
+ const candidates = [];
28
+ for (const p of projects) {
29
+ // Existing: project root path
30
+ if (p.projectPath) {
31
+ candidates.push({ project: p, path: p.projectPath });
32
+ }
33
+ // New: worktree paths
34
+ for (const wt of p.worktrees ?? []) {
35
+ if (wt.worktreePath) {
36
+ candidates.push({ project: p, path: wt.worktreePath, worktreeId: wt.id });
37
+ }
38
+ }
39
+ }
40
+ const matches = candidates
41
+ .filter((c) => {
42
+ const path = c.path.endsWith('/') ? c.path.slice(0, -1) : c.path;
31
43
  return cwd === path || cwd.startsWith(path + '/');
32
44
  })
33
- .sort((a, b) => (b.projectPath?.length ?? 0) - (a.projectPath?.length ?? 0));
34
- return matches[0] ?? null;
45
+ .sort((a, b) => {
46
+ // Longest path wins; on tie, prefer worktree match over project root
47
+ const lenDiff = b.path.length - a.path.length;
48
+ if (lenDiff !== 0)
49
+ return lenDiff;
50
+ if (a.worktreeId && !b.worktreeId)
51
+ return -1;
52
+ if (!a.worktreeId && b.worktreeId)
53
+ return 1;
54
+ return 0;
55
+ });
56
+ if (matches.length === 0)
57
+ return null;
58
+ return { project: matches[0].project, worktreeId: matches[0].worktreeId };
35
59
  }
36
60
  /**
37
- * Resolves which project to use via a three-step chain:
61
+ * Resolves which project and (optionally) worktree to use via a four-step chain:
38
62
  *
39
63
  * 1. explicit --project flag → findByNameOrId
40
- * 2. CWD detection → findProjectByCwd
64
+ * 2. CWD detection → findProjectByCwd (worktree-aware)
41
65
  * 3. default_project config → findByNameOrId
42
66
  * 4. Throw UserError with guidance
67
+ *
68
+ * When opts.worktree is provided and a project was resolved, also resolves the
69
+ * worktreeId via findWorktreeByNameOrId.
43
70
  */
44
- export async function resolveProjectId(explicit, store) {
71
+ export async function resolveProjectWorktree(opts, store) {
72
+ const explicit = opts.project;
45
73
  // Step 1: explicit --project flag
46
74
  if (explicit) {
47
75
  const project = await findByNameOrId(explicit, store);
@@ -49,12 +77,37 @@ export async function resolveProjectId(explicit, store) {
49
77
  throw new UserError(`Project '${explicit}' not found.\n` +
50
78
  ' Check the spelling, or run cf project list to see available projects.');
51
79
  }
52
- return { id: project.id, source: 'flag' };
80
+ const resolved = { id: project.id, source: 'flag' };
81
+ if (opts.worktree) {
82
+ const wt = await findWorktreeByNameOrId(project.id, opts.worktree, store);
83
+ if (wt)
84
+ resolved.worktreeId = wt.id;
85
+ }
86
+ return resolved;
53
87
  }
54
- // Step 2: CWD detection
55
- const cwdProject = await findProjectByCwd(store);
56
- if (cwdProject) {
57
- return { id: cwdProject.id, source: 'cwd' };
88
+ // Step 2: CWD detection (worktree-aware)
89
+ const cwdMatch = await findProjectByCwd(store);
90
+ if (cwdMatch) {
91
+ if (cwdMatch.worktreeId) {
92
+ return { id: cwdMatch.project.id, worktreeId: cwdMatch.worktreeId, source: 'worktree' };
93
+ }
94
+ return { id: cwdMatch.project.id, source: 'cwd' };
95
+ }
96
+ // Step 2b: CWD is a git worktree of a known project (not yet registered as a cf worktree)
97
+ try {
98
+ const discovery = new GitWorktreeDiscovery();
99
+ const gitWorktrees = await discovery.listWorktrees(process.cwd());
100
+ if (gitWorktrees.length > 0) {
101
+ const mainWorktreePath = gitWorktrees[0].path;
102
+ const projects = await store.getAll();
103
+ const matchingProject = projects.find((p) => p.projectPath === mainWorktreePath);
104
+ if (matchingProject) {
105
+ return { id: matchingProject.id, source: 'cwd' };
106
+ }
107
+ }
108
+ }
109
+ catch {
110
+ // Git unavailable or not a git repo — fall through
58
111
  }
59
112
  // Step 3: default_project config
60
113
  const cm = new ConfigManager();
@@ -78,4 +131,29 @@ export async function resolveProjectId(explicit, store) {
78
131
  ' --project <name> # specify a project explicitly\n' +
79
132
  ' cf project list # see registered projects');
80
133
  }
134
+ /**
135
+ * Resolves which project to use via a three-step chain.
136
+ * Backwards-compatible wrapper around resolveProjectWorktree — drops worktreeId.
137
+ */
138
+ export async function resolveProjectId(explicit, store) {
139
+ const result = await resolveProjectWorktree({ project: explicit }, store);
140
+ return { id: result.id, source: result.source };
141
+ }
142
+ /**
143
+ * Find a worktree within a project by exact ID or case-insensitive name.
144
+ * ID match takes priority over name match. Returns undefined if not found.
145
+ */
146
+ export async function findWorktreeByNameOrId(projectId, nameOrId, store) {
147
+ const project = await store.getById(projectId);
148
+ if (!project)
149
+ return undefined;
150
+ const worktrees = project.worktrees ?? [];
151
+ // Exact ID match first
152
+ const byId = worktrees.find((wt) => wt.id === nameOrId);
153
+ if (byId)
154
+ return byId;
155
+ // Case-insensitive name match
156
+ const lower = nameOrId.toLowerCase();
157
+ return worktrees.find((wt) => wt.name.toLowerCase() === lower);
158
+ }
81
159
  //# sourceMappingURL=project.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"project.js","sourceRoot":"","sources":["../../src/utils/project.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export { applyWorktreeOverlay } from '@context-forge/core';
2
+ //# sourceMappingURL=worktree-overlay.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ // Re-export from core — canonical implementation lives in @context-forge/core
2
+ export { applyWorktreeOverlay } from '@context-forge/core';
3
+ //# sourceMappingURL=worktree-overlay.js.map
@@ -0,0 +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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@context-forge/cli",
3
- "version": "0.4.2",
3
+ "version": "0.5.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.4.2"
35
+ "@context-forge/core": "0.5.0"
36
36
  },
37
37
  "devDependencies": {
38
38
  "@types/node": "^25.3.0",