@codevoyant/agent-kit 1.24.1 → 1.25.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.
- package/dist/bin.js +4 -1
- package/dist/bin.js.map +1 -1
- package/dist/commands/git.d.ts +21 -0
- package/dist/commands/git.d.ts.map +1 -0
- package/dist/commands/git.js +115 -0
- package/dist/commands/git.js.map +1 -0
- package/dist/commands/notify.d.ts.map +1 -1
- package/dist/commands/notify.js +16 -2
- package/dist/commands/notify.js.map +1 -1
- package/dist/commands/task-runner.d.ts +19 -0
- package/dist/commands/task-runner.d.ts.map +1 -0
- package/dist/commands/task-runner.js +225 -0
- package/dist/commands/task-runner.js.map +1 -0
- package/dist/commands/worktrees.d.ts.map +1 -1
- package/dist/commands/worktrees.js +139 -79
- package/dist/commands/worktrees.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -1
- package/dist/config.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/project.d.ts +38 -0
- package/dist/project.d.ts.map +1 -0
- package/dist/project.js +126 -0
- package/dist/project.js.map +1 -0
- package/dist/types.d.ts +7 -7
- package/dist/types.d.ts.map +1 -1
- package/package.json +2 -4
package/dist/bin.js
CHANGED
|
@@ -4,6 +4,8 @@ import { initCommand } from './commands/init.js';
|
|
|
4
4
|
import { plansCommand } from './commands/plans.js';
|
|
5
5
|
import { notifyCommand } from './commands/notify.js';
|
|
6
6
|
import { worktreesCommand } from './commands/worktrees.js';
|
|
7
|
+
import { gitCommand } from './commands/git.js';
|
|
8
|
+
import { taskRunnerCommand } from './commands/task-runner.js';
|
|
7
9
|
const program = new Command();
|
|
8
10
|
program
|
|
9
11
|
.name('codevoyant')
|
|
@@ -13,6 +15,7 @@ program.addCommand(initCommand());
|
|
|
13
15
|
program.addCommand(plansCommand());
|
|
14
16
|
program.addCommand(notifyCommand());
|
|
15
17
|
program.addCommand(worktreesCommand());
|
|
16
|
-
|
|
18
|
+
program.addCommand(gitCommand());
|
|
19
|
+
program.addCommand(taskRunnerCommand());
|
|
17
20
|
program.parse();
|
|
18
21
|
//# sourceMappingURL=bin.js.map
|
package/dist/bin.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"bin.js","sourceRoot":"","sources":["../src/bin.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAE9D,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,YAAY,CAAC;KAClB,WAAW,CAAC,0DAA0D,CAAC;KACvE,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,CAAC;AAEvD,OAAO,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC;AAClC,OAAO,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC;AACnC,OAAO,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;AACpC,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC;AACjC,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AACxC,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
export declare function gitCommand(): Command;
|
|
3
|
+
export { getCurrentBranch, cleanBranch, extractIssueId, stripIssueFromBranch, getRemoteUrl, BRANCH_PREFIXES, ISSUE_ID_PATTERN, };
|
|
4
|
+
/** Prefixes that are stripped by --clean. */
|
|
5
|
+
declare const BRANCH_PREFIXES: string[];
|
|
6
|
+
/** Issue ID pattern: 2+ uppercase letters followed by - or _ and 1+ digits. */
|
|
7
|
+
declare const ISSUE_ID_PATTERN: RegExp;
|
|
8
|
+
/** Get the current branch name. Returns "HEAD" for detached HEAD state. */
|
|
9
|
+
declare function getCurrentBranch(cwd?: string): string;
|
|
10
|
+
/** Strip common branch prefixes (feature/, bugfix/, etc.). */
|
|
11
|
+
declare function cleanBranch(branch: string): string;
|
|
12
|
+
/** Extract issue ID from a branch name. Returns empty string if not found. */
|
|
13
|
+
declare function extractIssueId(branch: string): string;
|
|
14
|
+
/**
|
|
15
|
+
* Strip the leading issue ID (and trailing separator) from a branch name.
|
|
16
|
+
* E.g. "ENG-123-my-feature" -> "my-feature"
|
|
17
|
+
*/
|
|
18
|
+
declare function stripIssueFromBranch(branch: string): string;
|
|
19
|
+
/** Get the remote URL for origin, or null if no remote. */
|
|
20
|
+
declare function getRemoteUrl(cwd?: string): string | null;
|
|
21
|
+
//# sourceMappingURL=git.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,UAAU,IAAI,OAAO,CAkEpC;AAGD,OAAO,EACL,gBAAgB,EAChB,WAAW,EACX,cAAc,EACd,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,gBAAgB,GACjB,CAAC;AAIF,6CAA6C;AAC7C,QAAA,MAAM,eAAe,UAAgF,CAAC;AAEtG,+EAA+E;AAC/E,QAAA,MAAM,gBAAgB,QAAwB,CAAC;AAmB/C,2EAA2E;AAC3E,iBAAS,gBAAgB,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,8DAA8D;AAC9D,iBAAS,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAO3C;AAED,8EAA8E;AAC9E,iBAAS,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED;;;GAGG;AACH,iBAAS,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED,2DAA2D;AAC3D,iBAAS,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAEjD"}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { spawnSync } from 'child_process';
|
|
3
|
+
import { findProjectRoot, getRepoName, isInWorktree } from '../project.js';
|
|
4
|
+
export function gitCommand() {
|
|
5
|
+
const git = new Command('git').description('Git metadata extraction');
|
|
6
|
+
git
|
|
7
|
+
.command('repo-name')
|
|
8
|
+
.description('Get repository name from remote URL (fallback to directory name)')
|
|
9
|
+
.action(() => {
|
|
10
|
+
requireGitRepo();
|
|
11
|
+
console.log(getRepoName());
|
|
12
|
+
});
|
|
13
|
+
git
|
|
14
|
+
.command('branch')
|
|
15
|
+
.description('Get current branch name')
|
|
16
|
+
.option('--clean', 'Strip common prefixes (feature/, bugfix/, etc.)')
|
|
17
|
+
.option('--strip-issue', 'Also strip leading issue ID (use with --clean)')
|
|
18
|
+
.action((opts) => {
|
|
19
|
+
requireGitRepo();
|
|
20
|
+
let branch = getCurrentBranch();
|
|
21
|
+
if (opts.clean) {
|
|
22
|
+
branch = cleanBranch(branch);
|
|
23
|
+
}
|
|
24
|
+
if (opts.stripIssue) {
|
|
25
|
+
branch = stripIssueFromBranch(branch);
|
|
26
|
+
}
|
|
27
|
+
console.log(branch);
|
|
28
|
+
});
|
|
29
|
+
git
|
|
30
|
+
.command('issue-id')
|
|
31
|
+
.description('Extract issue ID (e.g. ENG-123) from current branch name')
|
|
32
|
+
.action(() => {
|
|
33
|
+
requireGitRepo();
|
|
34
|
+
const branch = getCurrentBranch();
|
|
35
|
+
const issueId = extractIssueId(branch);
|
|
36
|
+
// Always exit 0, print empty string if no issue ID
|
|
37
|
+
console.log(issueId);
|
|
38
|
+
});
|
|
39
|
+
git
|
|
40
|
+
.command('info')
|
|
41
|
+
.description('All git metadata as JSON')
|
|
42
|
+
.action(() => {
|
|
43
|
+
requireGitRepo();
|
|
44
|
+
const branch = getCurrentBranch();
|
|
45
|
+
const branchClean = cleanBranch(branch);
|
|
46
|
+
const issueId = extractIssueId(branch);
|
|
47
|
+
const remoteUrl = getRemoteUrl();
|
|
48
|
+
const repoName = getRepoName();
|
|
49
|
+
const inWorktree = isInWorktree();
|
|
50
|
+
const info = {
|
|
51
|
+
repoName,
|
|
52
|
+
branch,
|
|
53
|
+
branchClean,
|
|
54
|
+
issueId: issueId || null,
|
|
55
|
+
isWorktree: inWorktree,
|
|
56
|
+
remoteUrl: remoteUrl || null,
|
|
57
|
+
};
|
|
58
|
+
console.log(JSON.stringify(info, null, 2));
|
|
59
|
+
});
|
|
60
|
+
return git;
|
|
61
|
+
}
|
|
62
|
+
// Export internals for testing
|
|
63
|
+
export { getCurrentBranch, cleanBranch, extractIssueId, stripIssueFromBranch, getRemoteUrl, BRANCH_PREFIXES, ISSUE_ID_PATTERN, };
|
|
64
|
+
// HELPERS -----------------------------------------------------------------------------------------
|
|
65
|
+
/** Prefixes that are stripped by --clean. */
|
|
66
|
+
const BRANCH_PREFIXES = ['feature/', 'bugfix/', 'hotfix/', 'fix/', 'release/', 'chore/', 'refactor/'];
|
|
67
|
+
/** Issue ID pattern: 2+ uppercase letters followed by - or _ and 1+ digits. */
|
|
68
|
+
const ISSUE_ID_PATTERN = /[A-Z]{2,}[_-][0-9]+/;
|
|
69
|
+
/** Run a git command and return trimmed stdout. Returns null on failure. */
|
|
70
|
+
function gitOrNull(args, cwd) {
|
|
71
|
+
const result = spawnSync('git', args, { encoding: 'utf-8', cwd });
|
|
72
|
+
if (result.status !== 0)
|
|
73
|
+
return null;
|
|
74
|
+
return result.stdout?.trim() ?? null;
|
|
75
|
+
}
|
|
76
|
+
/** Require that we're inside a git repo. Exits with code 1 if not. */
|
|
77
|
+
function requireGitRepo() {
|
|
78
|
+
const root = findProjectRoot();
|
|
79
|
+
if (!root) {
|
|
80
|
+
console.error('fatal: not a git repository (or any parent up to mount point /)');
|
|
81
|
+
process.exit(1);
|
|
82
|
+
}
|
|
83
|
+
return root;
|
|
84
|
+
}
|
|
85
|
+
/** Get the current branch name. Returns "HEAD" for detached HEAD state. */
|
|
86
|
+
function getCurrentBranch(cwd) {
|
|
87
|
+
const branch = gitOrNull(['rev-parse', '--abbrev-ref', 'HEAD'], cwd);
|
|
88
|
+
return branch || 'HEAD';
|
|
89
|
+
}
|
|
90
|
+
/** Strip common branch prefixes (feature/, bugfix/, etc.). */
|
|
91
|
+
function cleanBranch(branch) {
|
|
92
|
+
for (const prefix of BRANCH_PREFIXES) {
|
|
93
|
+
if (branch.startsWith(prefix)) {
|
|
94
|
+
return branch.slice(prefix.length);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
return branch;
|
|
98
|
+
}
|
|
99
|
+
/** Extract issue ID from a branch name. Returns empty string if not found. */
|
|
100
|
+
function extractIssueId(branch) {
|
|
101
|
+
const match = branch.match(ISSUE_ID_PATTERN);
|
|
102
|
+
return match ? match[0] : '';
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Strip the leading issue ID (and trailing separator) from a branch name.
|
|
106
|
+
* E.g. "ENG-123-my-feature" -> "my-feature"
|
|
107
|
+
*/
|
|
108
|
+
function stripIssueFromBranch(branch) {
|
|
109
|
+
return branch.replace(/^[A-Z]{2,}[_-][0-9]+[-_]?/, '');
|
|
110
|
+
}
|
|
111
|
+
/** Get the remote URL for origin, or null if no remote. */
|
|
112
|
+
function getRemoteUrl(cwd) {
|
|
113
|
+
return gitOrNull(['remote', 'get-url', 'origin'], cwd);
|
|
114
|
+
}
|
|
115
|
+
//# sourceMappingURL=git.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../src/commands/git.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/commands/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"notify.d.ts","sourceRoot":"","sources":["../../src/commands/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBpC,wBAAgB,aAAa,IAAI,OAAO,CAUvC"}
|
package/dist/commands/notify.js
CHANGED
|
@@ -1,5 +1,19 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
-
import
|
|
2
|
+
import { spawnSync } from 'child_process';
|
|
3
|
+
function sendNotification(title, message) {
|
|
4
|
+
if (process.platform === 'darwin') {
|
|
5
|
+
spawnSync('osascript', ['-e', `display notification "${message}" with title "${title}"`]);
|
|
6
|
+
}
|
|
7
|
+
else if (process.platform === 'linux') {
|
|
8
|
+
spawnSync('notify-send', [title, message]);
|
|
9
|
+
}
|
|
10
|
+
else if (process.platform === 'win32') {
|
|
11
|
+
spawnSync('powershell', [
|
|
12
|
+
'-Command',
|
|
13
|
+
`[System.Reflection.Assembly]::LoadWithPartialName('System.Windows.Forms'); [System.Windows.Forms.MessageBox]::Show('${message}', '${title}')`,
|
|
14
|
+
]);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
3
17
|
export function notifyCommand() {
|
|
4
18
|
return new Command('notify')
|
|
5
19
|
.description('Send a cross-platform desktop notification')
|
|
@@ -9,7 +23,7 @@ export function notifyCommand() {
|
|
|
9
23
|
.action((opts) => {
|
|
10
24
|
if (opts.silent)
|
|
11
25
|
return;
|
|
12
|
-
|
|
26
|
+
sendNotification(opts.title, opts.message);
|
|
13
27
|
});
|
|
14
28
|
}
|
|
15
29
|
//# sourceMappingURL=notify.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/commands/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,
|
|
1
|
+
{"version":3,"file":"notify.js","sourceRoot":"","sources":["../../src/commands/notify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,SAAS,gBAAgB,CAAC,KAAa,EAAE,OAAe;IACtD,IAAI,OAAO,CAAC,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAClC,SAAS,CAAC,WAAW,EAAE,CAAC,IAAI,EAAE,yBAAyB,OAAO,iBAAiB,KAAK,GAAG,CAAC,CAAC,CAAC;IAC5F,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,SAAS,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC;IAC7C,CAAC;SAAM,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,EAAE,CAAC;QACxC,SAAS,CAAC,YAAY,EAAE;YACtB,UAAU;YACV,uHAAuH,OAAO,OAAO,KAAK,IAAI;SAC/I,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC;SACzB,WAAW,CAAC,4CAA4C,CAAC;SACzD,cAAc,CAAC,iBAAiB,EAAE,oBAAoB,CAAC;SACvD,cAAc,CAAC,qBAAqB,EAAE,sBAAsB,CAAC;SAC7D,MAAM,CAAC,UAAU,EAAE,+BAA+B,EAAE,KAAK,CAAC;SAC1D,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE;QACf,IAAI,IAAI,CAAC,MAAM;YAAE,OAAO;QACxB,gBAAgB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import type { TaskRunnerInfo } from '../types.js';
|
|
3
|
+
/**
|
|
4
|
+
* Detect the task runner by scanning for config files in priority order.
|
|
5
|
+
* Optionally provide a cwd to search from (defaults to process.cwd()).
|
|
6
|
+
*/
|
|
7
|
+
export declare function detectRunner(cwd?: string): TaskRunnerInfo | null;
|
|
8
|
+
interface TaskEntry {
|
|
9
|
+
name: string;
|
|
10
|
+
description?: string;
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* List available tasks for a given runner by invoking its list command.
|
|
14
|
+
* If the runner binary is not installed, falls back to showing raw config file content.
|
|
15
|
+
*/
|
|
16
|
+
export declare function listTasks(info: TaskRunnerInfo, cwd?: string): TaskEntry[];
|
|
17
|
+
export declare function taskRunnerCommand(): Command;
|
|
18
|
+
export {};
|
|
19
|
+
//# sourceMappingURL=task-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-runner.d.ts","sourceRoot":"","sources":["../../src/commands/task-runner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AA8BlD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI,CA8BhE;AAED,UAAU,SAAS;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,cAAc,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,SAAS,EAAE,CA8DzE;AA6BD,wBAAgB,iBAAiB,IAAI,OAAO,CAwF3C"}
|
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { execSync } from 'child_process';
|
|
3
|
+
import * as fs from 'fs';
|
|
4
|
+
import * as path from 'path';
|
|
5
|
+
import { readSettings, writeSettings } from '../config.js';
|
|
6
|
+
const RUNNER_PRIORITY = [
|
|
7
|
+
{ runner: 'just', command: 'just', configFiles: ['justfile', 'Justfile'] },
|
|
8
|
+
{ runner: 'task', command: 'task', configFiles: ['Taskfile.yml', 'Taskfile.yaml'] },
|
|
9
|
+
{ runner: 'mise', command: 'mise run', configFiles: ['mise.toml', '.mise.toml'] },
|
|
10
|
+
{ runner: 'make', command: 'make', configFiles: ['makefile', 'Makefile'] },
|
|
11
|
+
{
|
|
12
|
+
runner: 'npm',
|
|
13
|
+
command: 'npm run',
|
|
14
|
+
configFiles: ['package.json'],
|
|
15
|
+
qualify: (filePath) => {
|
|
16
|
+
try {
|
|
17
|
+
const pkg = JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
|
18
|
+
return !!(pkg.scripts && Object.keys(pkg.scripts).length > 0);
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
];
|
|
26
|
+
/**
|
|
27
|
+
* Detect the task runner by scanning for config files in priority order.
|
|
28
|
+
* Optionally provide a cwd to search from (defaults to process.cwd()).
|
|
29
|
+
*/
|
|
30
|
+
export function detectRunner(cwd) {
|
|
31
|
+
const dir = cwd ?? process.cwd();
|
|
32
|
+
for (const def of RUNNER_PRIORITY) {
|
|
33
|
+
for (const configFile of def.configFiles) {
|
|
34
|
+
const filePath = path.join(dir, configFile);
|
|
35
|
+
if (fs.existsSync(filePath)) {
|
|
36
|
+
if (def.qualify && !def.qualify(filePath))
|
|
37
|
+
continue;
|
|
38
|
+
// Prefer pnpm over npm if lockfile exists
|
|
39
|
+
let command = def.command;
|
|
40
|
+
if (def.runner === 'npm') {
|
|
41
|
+
if (fs.existsSync(path.join(dir, 'pnpm-lock.yaml'))) {
|
|
42
|
+
command = 'pnpm run';
|
|
43
|
+
}
|
|
44
|
+
else if (fs.existsSync(path.join(dir, 'yarn.lock'))) {
|
|
45
|
+
command = 'yarn run';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
return {
|
|
49
|
+
runner: command.split(' ')[0],
|
|
50
|
+
command,
|
|
51
|
+
configFile,
|
|
52
|
+
detectedAt: new Date().toISOString(),
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return null;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* List available tasks for a given runner by invoking its list command.
|
|
61
|
+
* If the runner binary is not installed, falls back to showing raw config file content.
|
|
62
|
+
*/
|
|
63
|
+
export function listTasks(info, cwd) {
|
|
64
|
+
const dir = cwd ?? process.cwd();
|
|
65
|
+
try {
|
|
66
|
+
switch (info.runner) {
|
|
67
|
+
case 'just': {
|
|
68
|
+
const output = execSync('just --dump --dump-format json', { encoding: 'utf-8', cwd: dir });
|
|
69
|
+
const dump = JSON.parse(output);
|
|
70
|
+
const recipes = dump.recipes ?? {};
|
|
71
|
+
return Object.entries(recipes).map(([name, recipe]) => ({
|
|
72
|
+
name,
|
|
73
|
+
description: recipe.doc ?? undefined,
|
|
74
|
+
}));
|
|
75
|
+
}
|
|
76
|
+
case 'mise': {
|
|
77
|
+
const output = execSync('mise tasks ls --json', { encoding: 'utf-8', cwd: dir });
|
|
78
|
+
const tasks = JSON.parse(output);
|
|
79
|
+
return tasks.map((t) => ({ name: t.name, description: t.description }));
|
|
80
|
+
}
|
|
81
|
+
case 'task': {
|
|
82
|
+
const output = execSync('task --list-all --json', { encoding: 'utf-8', cwd: dir });
|
|
83
|
+
const data = JSON.parse(output);
|
|
84
|
+
const tasks = data.tasks ?? [];
|
|
85
|
+
return tasks.map((t) => ({
|
|
86
|
+
name: t.name,
|
|
87
|
+
description: t.desc ?? undefined,
|
|
88
|
+
}));
|
|
89
|
+
}
|
|
90
|
+
case 'make': {
|
|
91
|
+
const output = execSync(`make -pRrq 2>/dev/null | awk -F: '/^[a-zA-Z0-9][^$#\\/\\t=]*:([^=]|$)/ {split($1,a," ");print a[1]}' | sort -u`, { encoding: 'utf-8', cwd: dir, shell: '/bin/sh' });
|
|
92
|
+
return output
|
|
93
|
+
.trim()
|
|
94
|
+
.split('\n')
|
|
95
|
+
.filter(Boolean)
|
|
96
|
+
.map((name) => ({ name }));
|
|
97
|
+
}
|
|
98
|
+
case 'pnpm':
|
|
99
|
+
case 'npm':
|
|
100
|
+
case 'yarn': {
|
|
101
|
+
const pkgPath = path.join(dir, 'package.json');
|
|
102
|
+
if (!fs.existsSync(pkgPath))
|
|
103
|
+
return [];
|
|
104
|
+
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf-8'));
|
|
105
|
+
const scripts = pkg.scripts ?? {};
|
|
106
|
+
return Object.entries(scripts).map(([name, cmd]) => ({
|
|
107
|
+
name,
|
|
108
|
+
description: typeof cmd === 'string' ? cmd : undefined,
|
|
109
|
+
}));
|
|
110
|
+
}
|
|
111
|
+
default:
|
|
112
|
+
return [];
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch (err) {
|
|
116
|
+
// If the runner binary is not installed (ENOENT or "not found" in stderr),
|
|
117
|
+
// fall back to showing raw config file content as a single entry.
|
|
118
|
+
if (isBinaryMissing(err)) {
|
|
119
|
+
return readConfigFileFallback(info.configFile, dir);
|
|
120
|
+
}
|
|
121
|
+
return [];
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
// HELPERS -----------------------------------------------------------------------------------------
|
|
125
|
+
/** Returns true if the error indicates the runner binary is not installed. */
|
|
126
|
+
function isBinaryMissing(err) {
|
|
127
|
+
if (err instanceof Error) {
|
|
128
|
+
const msg = err.message.toLowerCase();
|
|
129
|
+
return (err.code === 'ENOENT' ||
|
|
130
|
+
msg.includes('command not found') ||
|
|
131
|
+
msg.includes('not found') ||
|
|
132
|
+
msg.includes('no such file'));
|
|
133
|
+
}
|
|
134
|
+
return false;
|
|
135
|
+
}
|
|
136
|
+
/** Read the config file and return its content as a single fallback entry. */
|
|
137
|
+
function readConfigFileFallback(configFile, dir) {
|
|
138
|
+
const filePath = path.join(dir, configFile);
|
|
139
|
+
try {
|
|
140
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
141
|
+
return [{ name: '(raw)', description: content }];
|
|
142
|
+
}
|
|
143
|
+
catch {
|
|
144
|
+
return [];
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
export function taskRunnerCommand() {
|
|
148
|
+
const cmd = new Command('task-runner').description('Detect and interact with project task runners');
|
|
149
|
+
cmd
|
|
150
|
+
.command('detect')
|
|
151
|
+
.description('Detect the active task runner and cache the result')
|
|
152
|
+
.option('--dir <dir>', 'Directory to scan', '.')
|
|
153
|
+
.option('--settings-dir <settingsDir>', 'Directory for settings.json', '.codevoyant')
|
|
154
|
+
.action((opts) => {
|
|
155
|
+
const info = detectRunner(opts.dir === '.' ? undefined : opts.dir);
|
|
156
|
+
if (!info) {
|
|
157
|
+
console.error('No task runner detected');
|
|
158
|
+
process.exit(1);
|
|
159
|
+
}
|
|
160
|
+
// Cache in settings.json
|
|
161
|
+
const settings = readSettings(opts.settingsDir);
|
|
162
|
+
settings.taskRunner = info;
|
|
163
|
+
writeSettings(settings, opts.settingsDir);
|
|
164
|
+
console.log(JSON.stringify({ ...info, cached: true }, null, 2));
|
|
165
|
+
});
|
|
166
|
+
cmd
|
|
167
|
+
.command('list')
|
|
168
|
+
.description('List available tasks for the detected runner')
|
|
169
|
+
.option('--json', 'Output as JSON', false)
|
|
170
|
+
.option('--dir <dir>', 'Directory to scan', '.')
|
|
171
|
+
.option('--settings-dir <settingsDir>', 'Directory for settings.json', '.codevoyant')
|
|
172
|
+
.action((opts) => {
|
|
173
|
+
// Try to read cached runner, otherwise detect
|
|
174
|
+
const settings = readSettings(opts.settingsDir);
|
|
175
|
+
let info = settings.taskRunner ?? null;
|
|
176
|
+
if (!info) {
|
|
177
|
+
info = detectRunner(opts.dir === '.' ? undefined : opts.dir);
|
|
178
|
+
if (!info) {
|
|
179
|
+
console.error('No task runner detected');
|
|
180
|
+
process.exit(1);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
const tasks = listTasks(info, opts.dir === '.' ? undefined : opts.dir);
|
|
184
|
+
if (opts.json) {
|
|
185
|
+
console.log(JSON.stringify({ runner: info.runner, command: info.command, tasks }, null, 2));
|
|
186
|
+
}
|
|
187
|
+
else {
|
|
188
|
+
console.log(`Runner: ${info.command}`);
|
|
189
|
+
console.log('');
|
|
190
|
+
for (const t of tasks) {
|
|
191
|
+
const desc = t.description ? ` # ${t.description}` : '';
|
|
192
|
+
console.log(` ${t.name}${desc}`);
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
});
|
|
196
|
+
cmd
|
|
197
|
+
.command('run')
|
|
198
|
+
.description('Run a task using the detected runner')
|
|
199
|
+
.argument('<task>', 'Task name to run')
|
|
200
|
+
.argument('[args...]', 'Additional arguments')
|
|
201
|
+
.option('--dir <dir>', 'Directory to run in', '.')
|
|
202
|
+
.option('--settings-dir <settingsDir>', 'Directory for settings.json', '.codevoyant')
|
|
203
|
+
.action((task, args, opts) => {
|
|
204
|
+
const settings = readSettings(opts.settingsDir);
|
|
205
|
+
let info = settings.taskRunner ?? null;
|
|
206
|
+
if (!info) {
|
|
207
|
+
info = detectRunner(opts.dir === '.' ? undefined : opts.dir);
|
|
208
|
+
if (!info) {
|
|
209
|
+
console.error('No task runner detected');
|
|
210
|
+
process.exit(1);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
const extraArgs = args.length > 0 ? ' ' + args.join(' ') : '';
|
|
214
|
+
const fullCommand = `${info.command} ${task}${extraArgs}`;
|
|
215
|
+
const cwd = opts.dir === '.' ? undefined : opts.dir;
|
|
216
|
+
try {
|
|
217
|
+
execSync(fullCommand, { stdio: 'inherit', cwd, shell: '/bin/sh' });
|
|
218
|
+
}
|
|
219
|
+
catch {
|
|
220
|
+
process.exit(1);
|
|
221
|
+
}
|
|
222
|
+
});
|
|
223
|
+
return cmd;
|
|
224
|
+
}
|
|
225
|
+
//# sourceMappingURL=task-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"task-runner.js","sourceRoot":"","sources":["../../src/commands/task-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktrees.d.ts","sourceRoot":"","sources":["../../src/commands/worktrees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"worktrees.d.ts","sourceRoot":"","sources":["../../src/commands/worktrees.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAQpC,wBAAgB,gBAAgB,IAAI,OAAO,CAmV1C"}
|
|
@@ -3,56 +3,7 @@ import { spawnSync } from 'child_process';
|
|
|
3
3
|
import * as fs from 'fs';
|
|
4
4
|
import * as path from 'path';
|
|
5
5
|
import { readConfig, writeConfig, getConfigPath } from '../config.js';
|
|
6
|
-
|
|
7
|
-
const result = spawnSync('git', args, { encoding: 'utf-8', cwd });
|
|
8
|
-
if (result.status !== 0)
|
|
9
|
-
throw new Error(result.stderr?.trim() || `git ${args[0]} failed`);
|
|
10
|
-
return result.stdout?.trim() ?? '';
|
|
11
|
-
}
|
|
12
|
-
function parseWorktreeList(cwd) {
|
|
13
|
-
const output = git(['worktree', 'list', '--porcelain'], cwd);
|
|
14
|
-
if (!output)
|
|
15
|
-
return [];
|
|
16
|
-
const entries = [];
|
|
17
|
-
let current = {};
|
|
18
|
-
for (const line of output.split('\n')) {
|
|
19
|
-
if (line === '') {
|
|
20
|
-
if (current.worktree) {
|
|
21
|
-
entries.push(current);
|
|
22
|
-
}
|
|
23
|
-
current = {};
|
|
24
|
-
}
|
|
25
|
-
else if (line.startsWith('worktree ')) {
|
|
26
|
-
current.worktree = line.slice('worktree '.length);
|
|
27
|
-
}
|
|
28
|
-
else if (line.startsWith('HEAD ')) {
|
|
29
|
-
current.HEAD = line.slice('HEAD '.length);
|
|
30
|
-
}
|
|
31
|
-
else if (line.startsWith('branch ')) {
|
|
32
|
-
current.branch = line.slice('branch '.length).replace('refs/heads/', '');
|
|
33
|
-
}
|
|
34
|
-
else if (line === 'bare') {
|
|
35
|
-
current.bare = true;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
if (current.worktree) {
|
|
39
|
-
entries.push(current);
|
|
40
|
-
}
|
|
41
|
-
return entries;
|
|
42
|
-
}
|
|
43
|
-
function ensureGitignoreEntry(dir) {
|
|
44
|
-
const gitignorePath = path.join(dir, '.gitignore');
|
|
45
|
-
const entry = '.codevoyant/worktrees/';
|
|
46
|
-
if (fs.existsSync(gitignorePath)) {
|
|
47
|
-
const existing = fs.readFileSync(gitignorePath, 'utf-8');
|
|
48
|
-
if (!existing.includes(entry)) {
|
|
49
|
-
fs.appendFileSync(gitignorePath, '\n# codevoyant\n' + entry + '\n');
|
|
50
|
-
}
|
|
51
|
-
}
|
|
52
|
-
else {
|
|
53
|
-
fs.writeFileSync(gitignorePath, '# codevoyant\n' + entry + '\n');
|
|
54
|
-
}
|
|
55
|
-
}
|
|
6
|
+
import { findProjectRoot, isInWorktree, getRepoName, getCurrentPlan, getWorktreeBasePath } from '../project.js';
|
|
56
7
|
export function worktreesCommand() {
|
|
57
8
|
const wt = new Command('worktrees').description('Manage git worktrees');
|
|
58
9
|
wt.command('create')
|
|
@@ -60,35 +11,38 @@ export function worktreesCommand() {
|
|
|
60
11
|
.requiredOption('--branch <branch>', 'Branch name')
|
|
61
12
|
.option('--base <base>', 'Base branch/commit', 'HEAD')
|
|
62
13
|
.option('--plan <plan>', 'Associated plan name')
|
|
14
|
+
.option('--base-path <basePath>', 'Custom base path for worktrees')
|
|
63
15
|
.option('--registry <path>', 'Path to codevoyant.json')
|
|
64
16
|
.action((opts) => {
|
|
65
|
-
|
|
17
|
+
const projectRoot = requireProjectRoot();
|
|
66
18
|
if (!/^[\w/.-]+$/.test(opts.branch)) {
|
|
67
19
|
console.error('Invalid branch name: only alphanumeric, hyphens, underscores, slashes, and dots allowed');
|
|
68
20
|
process.exit(1);
|
|
69
21
|
}
|
|
70
|
-
|
|
71
|
-
const existing = parseWorktreeList();
|
|
22
|
+
const existing = parseWorktreeList(projectRoot);
|
|
72
23
|
if (existing.some((e) => e.branch === opts.branch)) {
|
|
73
24
|
console.error(`Branch "${opts.branch}" is already a worktree`);
|
|
74
25
|
process.exit(1);
|
|
75
26
|
}
|
|
76
|
-
const
|
|
27
|
+
const repoName = getRepoName(projectRoot);
|
|
28
|
+
const basePath = opts.basePath ?? getWorktreeBasePath(repoName, projectRoot);
|
|
29
|
+
const wtName = opts.plan ?? opts.branch;
|
|
30
|
+
const wtPath = path.join(basePath, wtName);
|
|
77
31
|
if (fs.existsSync(wtPath)) {
|
|
78
32
|
console.error(`Directory already exists: ${wtPath}`);
|
|
79
33
|
process.exit(1);
|
|
80
34
|
}
|
|
81
|
-
|
|
82
|
-
const branchCheck = spawnSync('git', ['rev-parse', '--verify', opts.branch], {
|
|
35
|
+
fs.mkdirSync(basePath, { recursive: true });
|
|
36
|
+
const branchCheck = spawnSync('git', ['rev-parse', '--verify', opts.branch], {
|
|
37
|
+
encoding: 'utf-8',
|
|
38
|
+
cwd: projectRoot,
|
|
39
|
+
});
|
|
83
40
|
if (branchCheck.status === 0) {
|
|
84
|
-
|
|
41
|
+
gitExec(['worktree', 'add', wtPath, opts.branch], projectRoot);
|
|
85
42
|
}
|
|
86
43
|
else {
|
|
87
|
-
|
|
44
|
+
gitExec(['worktree', 'add', '-b', opts.branch, wtPath, opts.base], projectRoot);
|
|
88
45
|
}
|
|
89
|
-
// Ensure .gitignore entry
|
|
90
|
-
ensureGitignoreEntry('.');
|
|
91
|
-
// Register in config
|
|
92
46
|
const configPath = getConfigPath(opts.registry);
|
|
93
47
|
const config = readConfig(configPath);
|
|
94
48
|
const entry = {
|
|
@@ -108,29 +62,26 @@ export function worktreesCommand() {
|
|
|
108
62
|
.option('--force', 'Force removal', false)
|
|
109
63
|
.option('--registry <path>', 'Path to codevoyant.json')
|
|
110
64
|
.action((opts) => {
|
|
111
|
-
const
|
|
65
|
+
const projectRoot = requireProjectRoot();
|
|
66
|
+
const worktrees = parseWorktreeList(projectRoot);
|
|
112
67
|
const wte = worktrees.find((e) => e.branch === opts.branch);
|
|
113
68
|
if (!wte) {
|
|
114
69
|
console.error(`Worktree for branch "${opts.branch}" not found`);
|
|
115
70
|
process.exit(1);
|
|
116
71
|
}
|
|
117
|
-
// Warn if uncommitted changes
|
|
118
72
|
const statusResult = spawnSync('git', ['-C', wte.worktree, 'status', '--porcelain'], { encoding: 'utf-8' });
|
|
119
73
|
if (statusResult.stdout && statusResult.stdout.trim() && !opts.force) {
|
|
120
74
|
console.error(`Worktree has uncommitted changes. Use --force to remove anyway.`);
|
|
121
75
|
process.exit(1);
|
|
122
76
|
}
|
|
123
|
-
// Remove worktree
|
|
124
77
|
const removeArgs = ['worktree', 'remove', wte.worktree];
|
|
125
78
|
if (opts.force)
|
|
126
79
|
removeArgs.push('--force');
|
|
127
|
-
|
|
128
|
-
// Delete branch if requested
|
|
80
|
+
gitExec(removeArgs, projectRoot);
|
|
129
81
|
if (opts.deleteBranch) {
|
|
130
82
|
const deleteFlag = opts.force ? '-D' : '-d';
|
|
131
|
-
|
|
83
|
+
gitExec(['branch', deleteFlag, opts.branch], projectRoot);
|
|
132
84
|
}
|
|
133
|
-
// Remove from config
|
|
134
85
|
const configPath = getConfigPath(opts.registry);
|
|
135
86
|
const config = readConfig(configPath);
|
|
136
87
|
config.worktrees = config.worktrees.filter((w) => w.branch !== opts.branch);
|
|
@@ -141,7 +92,8 @@ export function worktreesCommand() {
|
|
|
141
92
|
.description('Prune stale worktrees')
|
|
142
93
|
.option('--registry <path>', 'Path to codevoyant.json')
|
|
143
94
|
.action((opts) => {
|
|
144
|
-
|
|
95
|
+
const projectRoot = findProjectRoot() ?? '.';
|
|
96
|
+
gitExec(['worktree', 'prune', '--verbose'], projectRoot);
|
|
145
97
|
const configPath = getConfigPath(opts.registry);
|
|
146
98
|
const config = readConfig(configPath);
|
|
147
99
|
const before = config.worktrees.length;
|
|
@@ -153,15 +105,16 @@ export function worktreesCommand() {
|
|
|
153
105
|
wt.command('list')
|
|
154
106
|
.description('List worktrees')
|
|
155
107
|
.option('--json', 'Output as JSON', false)
|
|
108
|
+
.option('--filter <plan>', 'Filter by plan name')
|
|
156
109
|
.option('--registry <path>', 'Path to codevoyant.json')
|
|
157
110
|
.action((opts) => {
|
|
158
|
-
const
|
|
111
|
+
const projectRoot = findProjectRoot() ?? '.';
|
|
112
|
+
const worktrees = parseWorktreeList(projectRoot);
|
|
159
113
|
const configPath = getConfigPath(opts.registry);
|
|
160
114
|
const config = readConfig(configPath);
|
|
161
|
-
|
|
115
|
+
let enriched = worktrees.map((wte) => {
|
|
162
116
|
const registered = config.worktrees.find((w) => w.branch === wte.branch);
|
|
163
117
|
const plan = config.activePlans.find((p) => p.worktree === wte.worktree || p.branch === wte.branch);
|
|
164
|
-
// Check dirty status
|
|
165
118
|
let dirty = false;
|
|
166
119
|
try {
|
|
167
120
|
const status = spawnSync('git', ['-C', wte.worktree, 'status', '--porcelain'], { encoding: 'utf-8' });
|
|
@@ -178,6 +131,9 @@ export function worktreesCommand() {
|
|
|
178
131
|
plan: plan?.name ?? registered?.planName ?? null,
|
|
179
132
|
};
|
|
180
133
|
});
|
|
134
|
+
if (opts.filter) {
|
|
135
|
+
enriched = enriched.filter((e) => e.plan && e.plan.toLowerCase().includes(opts.filter.toLowerCase()));
|
|
136
|
+
}
|
|
181
137
|
if (opts.json) {
|
|
182
138
|
console.log(JSON.stringify(enriched, null, 2));
|
|
183
139
|
}
|
|
@@ -196,7 +152,6 @@ export function worktreesCommand() {
|
|
|
196
152
|
.action((opts) => {
|
|
197
153
|
const configPath = getConfigPath(opts.registry);
|
|
198
154
|
const config = readConfig(configPath);
|
|
199
|
-
// Auto-detect plan if not given
|
|
200
155
|
let planName = opts.plan;
|
|
201
156
|
if (!planName) {
|
|
202
157
|
const sorted = [...config.activePlans].sort((a, b) => new Date(b.lastUpdated).getTime() - new Date(a.lastUpdated).getTime());
|
|
@@ -207,30 +162,25 @@ export function worktreesCommand() {
|
|
|
207
162
|
planName = sorted[0].name;
|
|
208
163
|
console.log(`Auto-detected plan: ${planName}`);
|
|
209
164
|
}
|
|
210
|
-
// Verify plan.md exists
|
|
211
165
|
const planDir = path.join('.codevoyant', 'plans', planName);
|
|
212
166
|
const planMd = path.join(planDir, 'plan.md');
|
|
213
167
|
if (!fs.existsSync(planMd)) {
|
|
214
168
|
console.error(`Plan file not found: ${planMd}`);
|
|
215
169
|
process.exit(1);
|
|
216
170
|
}
|
|
217
|
-
|
|
218
|
-
const gitCommonDir = git(['rev-parse', '--git-common-dir']);
|
|
171
|
+
const gitCommonDir = gitExec(['rev-parse', '--git-common-dir']);
|
|
219
172
|
const mainRoot = path.resolve(path.dirname(gitCommonDir));
|
|
220
173
|
const currentRoot = path.resolve('.');
|
|
221
174
|
if (mainRoot === currentRoot) {
|
|
222
175
|
console.error('Already in main repo');
|
|
223
176
|
process.exit(1);
|
|
224
177
|
}
|
|
225
|
-
// Check destination
|
|
226
178
|
const destDir = path.join(mainRoot, '.codevoyant', 'plans', planName);
|
|
227
179
|
if (fs.existsSync(destDir) && !opts.force) {
|
|
228
180
|
console.error(`Destination already exists: ${destDir}. Use --force to overwrite.`);
|
|
229
181
|
process.exit(1);
|
|
230
182
|
}
|
|
231
|
-
// Copy plan directory
|
|
232
183
|
fs.cpSync(planDir, destDir, { recursive: true, force: true });
|
|
233
|
-
// Upsert plan entry in main repo config
|
|
234
184
|
const mainConfigPath = path.join(mainRoot, '.codevoyant', 'codevoyant.json');
|
|
235
185
|
const mainConfig = readConfig(mainConfigPath);
|
|
236
186
|
const existingPlan = mainConfig.activePlans.find((p) => p.name === planName);
|
|
@@ -281,6 +231,116 @@ export function worktreesCommand() {
|
|
|
281
231
|
writeConfig(configPath, config);
|
|
282
232
|
console.log(`Unregistered worktree: ${opts.branch}`);
|
|
283
233
|
});
|
|
234
|
+
wt.command('attach')
|
|
235
|
+
.description('Register a manually-created worktree')
|
|
236
|
+
.requiredOption('--path <path>', 'Path to existing worktree')
|
|
237
|
+
.requiredOption('--plan <plan>', 'Associated plan name')
|
|
238
|
+
.option('--registry <registryPath>', 'Path to codevoyant.json')
|
|
239
|
+
.action((opts) => {
|
|
240
|
+
const wtPath = path.resolve(opts.path);
|
|
241
|
+
if (!fs.existsSync(wtPath)) {
|
|
242
|
+
console.error(`Path does not exist: ${wtPath}`);
|
|
243
|
+
process.exit(1);
|
|
244
|
+
}
|
|
245
|
+
const gitPath = path.join(wtPath, '.git');
|
|
246
|
+
if (!fs.existsSync(gitPath)) {
|
|
247
|
+
console.error(`Not a git worktree: ${wtPath} (no .git found)`);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
let branch;
|
|
251
|
+
try {
|
|
252
|
+
branch = gitExec(['rev-parse', '--abbrev-ref', 'HEAD'], wtPath);
|
|
253
|
+
}
|
|
254
|
+
catch {
|
|
255
|
+
console.error(`Cannot determine branch for worktree at: ${wtPath}`);
|
|
256
|
+
process.exit(1);
|
|
257
|
+
return;
|
|
258
|
+
}
|
|
259
|
+
const configPath = getConfigPath(opts.registryPath);
|
|
260
|
+
const config = readConfig(configPath);
|
|
261
|
+
if (config.worktrees.some((w) => w.path === wtPath)) {
|
|
262
|
+
console.error(`Worktree already registered: ${wtPath}`);
|
|
263
|
+
process.exit(1);
|
|
264
|
+
}
|
|
265
|
+
const entry = {
|
|
266
|
+
branch,
|
|
267
|
+
path: wtPath,
|
|
268
|
+
planName: opts.plan,
|
|
269
|
+
createdAt: new Date().toISOString(),
|
|
270
|
+
};
|
|
271
|
+
config.worktrees.push(entry);
|
|
272
|
+
writeConfig(configPath, config);
|
|
273
|
+
console.log(`Attached worktree: ${wtPath} (branch: ${branch}, plan: ${opts.plan})`);
|
|
274
|
+
});
|
|
275
|
+
wt.command('detect')
|
|
276
|
+
.description('Print current worktree context (repo, plan, branch)')
|
|
277
|
+
.action(() => {
|
|
278
|
+
const projectRoot = findProjectRoot();
|
|
279
|
+
const inWorktree = isInWorktree();
|
|
280
|
+
const repoName = getRepoName();
|
|
281
|
+
const plan = getCurrentPlan();
|
|
282
|
+
let branch = '';
|
|
283
|
+
try {
|
|
284
|
+
branch = gitExec(['rev-parse', '--abbrev-ref', 'HEAD']);
|
|
285
|
+
}
|
|
286
|
+
catch {
|
|
287
|
+
// not in a git repo
|
|
288
|
+
}
|
|
289
|
+
const info = {
|
|
290
|
+
projectRoot: projectRoot ?? null,
|
|
291
|
+
repoName,
|
|
292
|
+
branch: branch || null,
|
|
293
|
+
isWorktree: inWorktree,
|
|
294
|
+
plan: plan ?? null,
|
|
295
|
+
};
|
|
296
|
+
console.log(JSON.stringify(info, null, 2));
|
|
297
|
+
});
|
|
284
298
|
return wt;
|
|
285
299
|
}
|
|
300
|
+
/** Run a git command, throw on failure. */
|
|
301
|
+
function gitExec(args, cwd) {
|
|
302
|
+
const result = spawnSync('git', args, { encoding: 'utf-8', cwd });
|
|
303
|
+
if (result.status !== 0)
|
|
304
|
+
throw new Error(result.stderr?.trim() || `git ${args[0]} failed`);
|
|
305
|
+
return result.stdout?.trim() ?? '';
|
|
306
|
+
}
|
|
307
|
+
/** Parse `git worktree list --porcelain` output into structured entries. */
|
|
308
|
+
function parseWorktreeList(cwd) {
|
|
309
|
+
const output = gitExec(['worktree', 'list', '--porcelain'], cwd);
|
|
310
|
+
if (!output)
|
|
311
|
+
return [];
|
|
312
|
+
const entries = [];
|
|
313
|
+
let current = {};
|
|
314
|
+
for (const line of output.split('\n')) {
|
|
315
|
+
if (line === '') {
|
|
316
|
+
if (current.worktree)
|
|
317
|
+
entries.push(current);
|
|
318
|
+
current = {};
|
|
319
|
+
}
|
|
320
|
+
else if (line.startsWith('worktree ')) {
|
|
321
|
+
current.worktree = line.slice('worktree '.length);
|
|
322
|
+
}
|
|
323
|
+
else if (line.startsWith('HEAD ')) {
|
|
324
|
+
current.HEAD = line.slice('HEAD '.length);
|
|
325
|
+
}
|
|
326
|
+
else if (line.startsWith('branch ')) {
|
|
327
|
+
current.branch = line.slice('branch '.length).replace('refs/heads/', '');
|
|
328
|
+
}
|
|
329
|
+
else if (line === 'bare') {
|
|
330
|
+
current.bare = true;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
if (current.worktree)
|
|
334
|
+
entries.push(current);
|
|
335
|
+
return entries;
|
|
336
|
+
}
|
|
337
|
+
/** Resolve the project root. Exits with code 1 if not in a git repo. */
|
|
338
|
+
function requireProjectRoot() {
|
|
339
|
+
const root = findProjectRoot();
|
|
340
|
+
if (!root) {
|
|
341
|
+
console.error('Not in a git repository');
|
|
342
|
+
process.exit(1);
|
|
343
|
+
}
|
|
344
|
+
return root;
|
|
345
|
+
}
|
|
286
346
|
//# sourceMappingURL=worktrees.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/commands/worktrees.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"worktrees.js","sourceRoot":"","sources":["../../src/commands/worktrees.ts"],"names":[],"mappings":"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"}
|
package/dist/config.d.ts
CHANGED
|
@@ -3,4 +3,5 @@ export declare function getConfigPath(registry?: string): string;
|
|
|
3
3
|
export declare function readConfig(configPath: string): CodevoyantConfig;
|
|
4
4
|
export declare function writeConfig(configPath: string, config: CodevoyantConfig): void;
|
|
5
5
|
export declare function readSettings(dir?: string): CodevoyantSettings;
|
|
6
|
+
export declare function writeSettings(settings: CodevoyantSettings, dir?: string): void;
|
|
6
7
|
//# sourceMappingURL=config.d.ts.map
|
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AASvE,wBAAgB,aAAa,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED,wBAAgB,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CAG/D;AAED,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,IAAI,CAK9E;AAED,wBAAgB,YAAY,CAAC,GAAG,SAAgB,GAAG,kBAAkB,CAIpE;AAED,wBAAgB,aAAa,CAAC,QAAQ,EAAE,kBAAkB,EAAE,GAAG,SAAgB,GAAG,IAAI,CAMrF"}
|
package/dist/config.js
CHANGED
|
@@ -5,7 +5,6 @@ const DEFAULT_CONFIG = {
|
|
|
5
5
|
activePlans: [],
|
|
6
6
|
archivedPlans: [],
|
|
7
7
|
worktrees: [],
|
|
8
|
-
style: [],
|
|
9
8
|
};
|
|
10
9
|
export function getConfigPath(registry) {
|
|
11
10
|
return registry ?? path.join('.codevoyant', 'codevoyant.json');
|
|
@@ -27,4 +26,11 @@ export function readSettings(dir = '.codevoyant') {
|
|
|
27
26
|
return {};
|
|
28
27
|
return JSON.parse(fs.readFileSync(p, 'utf-8'));
|
|
29
28
|
}
|
|
29
|
+
export function writeSettings(settings, dir = '.codevoyant') {
|
|
30
|
+
fs.mkdirSync(dir, { recursive: true });
|
|
31
|
+
const p = path.join(dir, 'settings.json');
|
|
32
|
+
const tmp = `${p}.tmp`;
|
|
33
|
+
fs.writeFileSync(tmp, JSON.stringify(settings, null, 2) + '\n');
|
|
34
|
+
fs.renameSync(tmp, p);
|
|
35
|
+
}
|
|
30
36
|
//# sourceMappingURL=config.js.map
|
package/dist/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,cAAc,GAAqB;IACvC,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,EAAE;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAG7B,MAAM,cAAc,GAAqB;IACvC,OAAO,EAAE,KAAK;IACd,WAAW,EAAE,EAAE;IACf,aAAa,EAAE,EAAE;IACjB,SAAS,EAAE,EAAE;CACd,CAAC;AAEF,MAAM,UAAU,aAAa,CAAC,QAAiB;IAC7C,OAAO,QAAQ,IAAI,IAAI,CAAC,IAAI,CAAC,aAAa,EAAE,iBAAiB,CAAC,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,UAAU,CAAC,UAAkB;IAC3C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;QAAE,OAAO,EAAE,GAAG,cAAc,EAAE,CAAC;IAC7D,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAqB,CAAC;AAC9E,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,UAAkB,EAAE,MAAwB;IACtE,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5D,MAAM,GAAG,GAAG,GAAG,UAAU,MAAM,CAAC;IAChC,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAC9D,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG,GAAG,aAAa;IAC9C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC1C,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC;QAAE,OAAO,EAAE,CAAC;IACjC,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,OAAO,CAAC,CAAuB,CAAC;AACvE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,QAA4B,EAAE,GAAG,GAAG,aAAa;IAC7E,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,eAAe,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,GAAG,CAAC,MAAM,CAAC;IACvB,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC;IAChE,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;AACxB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
export { readConfig, writeConfig, getConfigPath, readSettings } from './config.js';
|
|
2
|
-
export type { CodevoyantConfig, CodevoyantSettings, PlanEntry, WorktreeEntry,
|
|
1
|
+
export { readConfig, writeConfig, getConfigPath, readSettings, writeSettings } from './config.js';
|
|
2
|
+
export type { CodevoyantConfig, CodevoyantSettings, PlanEntry, WorktreeEntry, TaskRunnerInfo } from './types.js';
|
|
3
|
+
export { findProjectRoot, isInWorktree, getRepoName, getCurrentPlan, getWorktreeBasePath, getWorktreePath, } from './project.js';
|
|
3
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAClG,YAAY,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,SAAS,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjH,OAAO,EACL,eAAe,EACf,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,eAAe,GAChB,MAAM,cAAc,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export { readConfig, writeConfig, getConfigPath, readSettings } from './config.js';
|
|
1
|
+
export { readConfig, writeConfig, getConfigPath, readSettings, writeSettings } from './config.js';
|
|
2
|
+
export { findProjectRoot, isInWorktree, getRepoName, getCurrentPlan, getWorktreeBasePath, getWorktreePath, } from './project.js';
|
|
2
3
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAElG,OAAO,EACL,eAAe,EACf,YAAY,EACZ,WAAW,EACX,cAAc,EACd,mBAAmB,EACnB,eAAe,GAChB,MAAM,cAAc,CAAC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Walk up from the given directory (default cwd) to find a .git directory or file.
|
|
3
|
+
* Returns the project root path, or null if not found.
|
|
4
|
+
*/
|
|
5
|
+
export declare function findProjectRoot(startDir?: string): string | null;
|
|
6
|
+
/**
|
|
7
|
+
* Returns true if the current working directory (or startDir) is inside a git worktree
|
|
8
|
+
* (not the main working tree). In a worktree, .git is a file (not a directory)
|
|
9
|
+
* containing a "gitdir:" pointer.
|
|
10
|
+
*/
|
|
11
|
+
export declare function isInWorktree(startDir?: string): boolean;
|
|
12
|
+
/**
|
|
13
|
+
* Returns the repo name from git remote URL, or falls back to the basename
|
|
14
|
+
* of the project root directory.
|
|
15
|
+
*
|
|
16
|
+
* Examples:
|
|
17
|
+
* git@github.com:owner/repo.git -> "repo"
|
|
18
|
+
* https://github.com/owner/repo.git -> "repo"
|
|
19
|
+
* https://github.com/owner/repo -> "repo"
|
|
20
|
+
* (no remote) -> basename of project root
|
|
21
|
+
*/
|
|
22
|
+
export declare function getRepoName(cwd?: string): string;
|
|
23
|
+
/**
|
|
24
|
+
* Returns the plan name associated with the current worktree, if any.
|
|
25
|
+
* Looks up the worktree path in .codevoyant/settings.json worktreeMap.
|
|
26
|
+
*/
|
|
27
|
+
export declare function getCurrentPlan(cwd?: string): string | null;
|
|
28
|
+
/**
|
|
29
|
+
* Returns the global worktree base path for the current repo.
|
|
30
|
+
* Path convention: ~/codevoyant/[repo-name]/worktrees/
|
|
31
|
+
*/
|
|
32
|
+
export declare function getWorktreeBasePath(repoName?: string, cwd?: string): string;
|
|
33
|
+
/**
|
|
34
|
+
* Returns the full worktree path for a given plan name.
|
|
35
|
+
* Path convention: ~/codevoyant/[repo-name]/worktrees/[plan-name]
|
|
36
|
+
*/
|
|
37
|
+
export declare function getWorktreePath(planName: string, repoName?: string, cwd?: string): string;
|
|
38
|
+
//# sourceMappingURL=project.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.d.ts","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAYhE;AAED;;;;GAIG;AACH,wBAAgB,YAAY,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,OAAO,CAYvD;AAED;;;;;;;;;GASG;AACH,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CA4BhD;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CA8B1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAG3E;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAEzF"}
|
package/dist/project.js
ADDED
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
import { spawnSync } from 'child_process';
|
|
2
|
+
import * as fs from 'fs';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import * as os from 'os';
|
|
5
|
+
/**
|
|
6
|
+
* Walk up from the given directory (default cwd) to find a .git directory or file.
|
|
7
|
+
* Returns the project root path, or null if not found.
|
|
8
|
+
*/
|
|
9
|
+
export function findProjectRoot(startDir) {
|
|
10
|
+
let dir = path.resolve(startDir ?? process.cwd());
|
|
11
|
+
const root = path.parse(dir).root;
|
|
12
|
+
while (dir !== root) {
|
|
13
|
+
const gitPath = path.join(dir, '.git');
|
|
14
|
+
if (fs.existsSync(gitPath)) {
|
|
15
|
+
return dir;
|
|
16
|
+
}
|
|
17
|
+
dir = path.dirname(dir);
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Returns true if the current working directory (or startDir) is inside a git worktree
|
|
23
|
+
* (not the main working tree). In a worktree, .git is a file (not a directory)
|
|
24
|
+
* containing a "gitdir:" pointer.
|
|
25
|
+
*/
|
|
26
|
+
export function isInWorktree(startDir) {
|
|
27
|
+
const projectRoot = findProjectRoot(startDir);
|
|
28
|
+
if (!projectRoot)
|
|
29
|
+
return false;
|
|
30
|
+
const gitPath = path.join(projectRoot, '.git');
|
|
31
|
+
try {
|
|
32
|
+
const stat = fs.statSync(gitPath);
|
|
33
|
+
// In a worktree, .git is a file; in the main tree, it's a directory
|
|
34
|
+
return stat.isFile();
|
|
35
|
+
}
|
|
36
|
+
catch {
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Returns the repo name from git remote URL, or falls back to the basename
|
|
42
|
+
* of the project root directory.
|
|
43
|
+
*
|
|
44
|
+
* Examples:
|
|
45
|
+
* git@github.com:owner/repo.git -> "repo"
|
|
46
|
+
* https://github.com/owner/repo.git -> "repo"
|
|
47
|
+
* https://github.com/owner/repo -> "repo"
|
|
48
|
+
* (no remote) -> basename of project root
|
|
49
|
+
*/
|
|
50
|
+
export function getRepoName(cwd) {
|
|
51
|
+
const effectiveCwd = cwd ?? process.cwd();
|
|
52
|
+
try {
|
|
53
|
+
const result = spawnSync('git', ['remote', 'get-url', 'origin'], {
|
|
54
|
+
encoding: 'utf-8',
|
|
55
|
+
cwd: effectiveCwd,
|
|
56
|
+
});
|
|
57
|
+
if (result.status === 0 && result.stdout?.trim()) {
|
|
58
|
+
const url = result.stdout.trim();
|
|
59
|
+
// Handle SSH: git@github.com:owner/repo.git
|
|
60
|
+
// Handle HTTPS: https://github.com/owner/repo.git
|
|
61
|
+
const name = url
|
|
62
|
+
.replace(/\.git$/, '')
|
|
63
|
+
.split('/')
|
|
64
|
+
.pop()
|
|
65
|
+
?.split(':')
|
|
66
|
+
.pop();
|
|
67
|
+
if (name)
|
|
68
|
+
return name;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
// Fall through to directory name fallback
|
|
73
|
+
}
|
|
74
|
+
// Fallback: basename of project root or cwd
|
|
75
|
+
const projectRoot = findProjectRoot(effectiveCwd);
|
|
76
|
+
return path.basename(projectRoot ?? effectiveCwd);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Returns the plan name associated with the current worktree, if any.
|
|
80
|
+
* Looks up the worktree path in .codevoyant/settings.json worktreeMap.
|
|
81
|
+
*/
|
|
82
|
+
export function getCurrentPlan(cwd) {
|
|
83
|
+
const effectiveCwd = path.resolve(cwd ?? process.cwd());
|
|
84
|
+
const projectRoot = findProjectRoot(effectiveCwd);
|
|
85
|
+
if (!projectRoot)
|
|
86
|
+
return null;
|
|
87
|
+
// Try to find the main repo root (via git common dir)
|
|
88
|
+
try {
|
|
89
|
+
const result = spawnSync('git', ['rev-parse', '--git-common-dir'], {
|
|
90
|
+
encoding: 'utf-8',
|
|
91
|
+
cwd: effectiveCwd,
|
|
92
|
+
});
|
|
93
|
+
if (result.status === 0 && result.stdout?.trim()) {
|
|
94
|
+
const commonDir = path.resolve(effectiveCwd, result.stdout.trim());
|
|
95
|
+
const mainRoot = path.dirname(commonDir);
|
|
96
|
+
const settingsPath = path.join(mainRoot, '.codevoyant', 'settings.json');
|
|
97
|
+
if (fs.existsSync(settingsPath)) {
|
|
98
|
+
const settings = JSON.parse(fs.readFileSync(settingsPath, 'utf-8'));
|
|
99
|
+
const worktreeMap = settings.worktreeMap;
|
|
100
|
+
if (worktreeMap) {
|
|
101
|
+
return worktreeMap[effectiveCwd] ?? null;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
// ignore
|
|
108
|
+
}
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Returns the global worktree base path for the current repo.
|
|
113
|
+
* Path convention: ~/codevoyant/[repo-name]/worktrees/
|
|
114
|
+
*/
|
|
115
|
+
export function getWorktreeBasePath(repoName, cwd) {
|
|
116
|
+
const name = repoName ?? getRepoName(cwd);
|
|
117
|
+
return path.join(os.homedir(), 'codevoyant', name, 'worktrees');
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Returns the full worktree path for a given plan name.
|
|
121
|
+
* Path convention: ~/codevoyant/[repo-name]/worktrees/[plan-name]
|
|
122
|
+
*/
|
|
123
|
+
export function getWorktreePath(planName, repoName, cwd) {
|
|
124
|
+
return path.join(getWorktreeBasePath(repoName, cwd), planName);
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=project.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"project.js","sourceRoot":"","sources":["../src/project.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -19,22 +19,22 @@ export interface WorktreeEntry {
|
|
|
19
19
|
planName: string | null;
|
|
20
20
|
createdAt: string;
|
|
21
21
|
}
|
|
22
|
-
export interface StyleContext {
|
|
23
|
-
name: string;
|
|
24
|
-
description: string;
|
|
25
|
-
learnedAt: string;
|
|
26
|
-
examples: string[];
|
|
27
|
-
}
|
|
28
22
|
export interface CodevoyantConfig {
|
|
29
23
|
version: string;
|
|
30
24
|
activePlans: PlanEntry[];
|
|
31
25
|
archivedPlans: PlanEntry[];
|
|
32
26
|
worktrees: WorktreeEntry[];
|
|
33
|
-
|
|
27
|
+
}
|
|
28
|
+
export interface TaskRunnerInfo {
|
|
29
|
+
runner: string;
|
|
30
|
+
command: string;
|
|
31
|
+
configFile: string;
|
|
32
|
+
detectedAt: string;
|
|
34
33
|
}
|
|
35
34
|
export interface CodevoyantSettings {
|
|
36
35
|
notifications?: boolean;
|
|
37
36
|
defaultPlugin?: string;
|
|
37
|
+
taskRunner?: TaskRunnerInfo;
|
|
38
38
|
[key: string]: unknown;
|
|
39
39
|
}
|
|
40
40
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;IACrE,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,QAAQ,GAAG,WAAW,GAAG,QAAQ,GAAG,UAAU,GAAG,WAAW,CAAC;IACrE,QAAQ,EAAE;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,SAAS,EAAE,CAAC;IACzB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,SAAS,EAAE,aAAa,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,cAAc,CAAC;IAC5B,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codevoyant/agent-kit",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.25.0",
|
|
4
4
|
"description": "CLI and shared library for codevoyant agents and tools",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -36,12 +36,10 @@
|
|
|
36
36
|
],
|
|
37
37
|
"license": "MIT",
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"commander": "^12.0.0"
|
|
40
|
-
"node-notifier": "^10.0.0"
|
|
39
|
+
"commander": "^12.0.0"
|
|
41
40
|
},
|
|
42
41
|
"devDependencies": {
|
|
43
42
|
"@types/node": "^22.0.0",
|
|
44
|
-
"@types/node-notifier": "^8.0.0",
|
|
45
43
|
"typescript": "^5.0.0",
|
|
46
44
|
"vitest": "^2.0.0"
|
|
47
45
|
}
|