@claudetree/cli 0.4.2 → 0.4.3
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/commands/init.test.d.ts +2 -0
- package/dist/commands/init.test.d.ts.map +1 -0
- package/dist/commands/init.test.js +94 -0
- package/dist/commands/init.test.js.map +1 -0
- package/dist/commands/list.test.d.ts +2 -0
- package/dist/commands/list.test.d.ts.map +1 -0
- package/dist/commands/list.test.js +106 -0
- package/dist/commands/list.test.js.map +1 -0
- package/dist/commands/start/buildPrompt.d.ts +29 -0
- package/dist/commands/start/buildPrompt.d.ts.map +1 -0
- package/dist/commands/start/buildPrompt.js +142 -0
- package/dist/commands/start/buildPrompt.js.map +1 -0
- package/dist/commands/start/buildPrompt.test.d.ts +2 -0
- package/dist/commands/start/buildPrompt.test.d.ts.map +1 -0
- package/dist/commands/start/buildPrompt.test.js +182 -0
- package/dist/commands/start/buildPrompt.test.js.map +1 -0
- package/dist/commands/start/createWorktree.d.ts +20 -0
- package/dist/commands/start/createWorktree.d.ts.map +1 -0
- package/dist/commands/start/createWorktree.js +35 -0
- package/dist/commands/start/createWorktree.js.map +1 -0
- package/dist/commands/start/createWorktree.test.d.ts +2 -0
- package/dist/commands/start/createWorktree.test.d.ts.map +1 -0
- package/dist/commands/start/createWorktree.test.js +81 -0
- package/dist/commands/start/createWorktree.test.js.map +1 -0
- package/dist/commands/start/index.d.ts +4 -0
- package/dist/commands/start/index.d.ts.map +1 -0
- package/dist/commands/start/index.js +4 -0
- package/dist/commands/start/index.js.map +1 -0
- package/dist/commands/start/parseIssueInput.d.ts +21 -0
- package/dist/commands/start/parseIssueInput.d.ts.map +1 -0
- package/dist/commands/start/parseIssueInput.js +78 -0
- package/dist/commands/start/parseIssueInput.js.map +1 -0
- package/dist/commands/start/parseIssueInput.test.d.ts +2 -0
- package/dist/commands/start/parseIssueInput.test.d.ts.map +1 -0
- package/dist/commands/start/parseIssueInput.test.js +118 -0
- package/dist/commands/start/parseIssueInput.test.js.map +1 -0
- package/dist/commands/start.d.ts.map +1 -1
- package/dist/commands/start.js +141 -280
- package/dist/commands/start.js.map +1 -1
- package/dist/commands/start.test.d.ts +2 -0
- package/dist/commands/start.test.d.ts.map +1 -0
- package/dist/commands/start.test.js +260 -0
- package/dist/commands/start.test.js.map +1 -0
- package/dist/commands/status.test.d.ts +2 -0
- package/dist/commands/status.test.d.ts.map +1 -0
- package/dist/commands/status.test.js +172 -0
- package/dist/commands/status.test.js.map +1 -0
- package/dist/commands/stop.test.d.ts +2 -0
- package/dist/commands/stop.test.d.ts.map +1 -0
- package/dist/commands/stop.test.js +152 -0
- package/dist/commands/stop.test.js.map +1 -0
- package/dist/commands/web.d.ts.map +1 -1
- package/dist/commands/web.js +95 -1
- package/dist/commands/web.js.map +1 -1
- package/dist/commands/web.test.d.ts +2 -0
- package/dist/commands/web.test.d.ts.map +1 -0
- package/dist/commands/web.test.js +133 -0
- package/dist/commands/web.test.js.map +1 -0
- package/package.json +8 -5
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { join } from 'node:path';
|
|
2
|
+
import { randomUUID } from 'node:crypto';
|
|
3
|
+
import { GitWorktreeAdapter } from '@claudetree/core';
|
|
4
|
+
/**
|
|
5
|
+
* Create a new worktree or find existing one
|
|
6
|
+
*/
|
|
7
|
+
export async function createOrFindWorktree(options) {
|
|
8
|
+
const { cwd, worktreeDir, branchName, issueNumber } = options;
|
|
9
|
+
const worktreePath = join(cwd, worktreeDir, branchName);
|
|
10
|
+
const gitAdapter = new GitWorktreeAdapter(cwd);
|
|
11
|
+
// Check for existing worktree
|
|
12
|
+
const existingWorktrees = await gitAdapter.list();
|
|
13
|
+
const existingWorktree = existingWorktrees.find((wt) => wt.branch === branchName || wt.path.endsWith(branchName));
|
|
14
|
+
if (existingWorktree) {
|
|
15
|
+
return {
|
|
16
|
+
worktree: {
|
|
17
|
+
id: randomUUID(),
|
|
18
|
+
path: existingWorktree.path,
|
|
19
|
+
branch: existingWorktree.branch,
|
|
20
|
+
},
|
|
21
|
+
isExisting: true,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
// Create new worktree
|
|
25
|
+
const worktree = await gitAdapter.create({
|
|
26
|
+
path: worktreePath,
|
|
27
|
+
branch: branchName,
|
|
28
|
+
issueNumber,
|
|
29
|
+
});
|
|
30
|
+
return {
|
|
31
|
+
worktree,
|
|
32
|
+
isExisting: false,
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=createWorktree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorktree.js","sourceRoot":"","sources":["../../../src/commands/start/createWorktree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAoBtD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAA8B;IAE9B,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC;IAE9D,MAAM,YAAY,GAAG,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAC;IAE/C,8BAA8B;IAC9B,MAAM,iBAAiB,GAAG,MAAM,UAAU,CAAC,IAAI,EAAE,CAAC;IAClD,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,IAAI,CAC7C,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,MAAM,KAAK,UAAU,IAAI,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,CACjE,CAAC;IAEF,IAAI,gBAAgB,EAAE,CAAC;QACrB,OAAO;YACL,QAAQ,EAAE;gBACR,EAAE,EAAE,UAAU,EAAE;gBAChB,IAAI,EAAE,gBAAgB,CAAC,IAAI;gBAC3B,MAAM,EAAE,gBAAgB,CAAC,MAAM;aAChC;YACD,UAAU,EAAE,IAAI;SACjB,CAAC;IACJ,CAAC;IAED,sBAAsB;IACtB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,MAAM,CAAC;QACvC,IAAI,EAAE,YAAY;QAClB,MAAM,EAAE,UAAU;QAClB,WAAW;KACZ,CAAC,CAAC;IAEH,OAAO;QACL,QAAQ;QACR,UAAU,EAAE,KAAK;KAClB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorktree.test.d.ts","sourceRoot":"","sources":["../../../src/commands/start/createWorktree.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { createOrFindWorktree } from './createWorktree.js';
|
|
3
|
+
import { GitWorktreeAdapter } from '@claudetree/core';
|
|
4
|
+
// Mock GitWorktreeAdapter
|
|
5
|
+
vi.mock('@claudetree/core', async () => {
|
|
6
|
+
const actual = await vi.importActual('@claudetree/core');
|
|
7
|
+
return {
|
|
8
|
+
...actual,
|
|
9
|
+
GitWorktreeAdapter: vi.fn().mockImplementation(() => ({
|
|
10
|
+
list: vi.fn().mockResolvedValue([
|
|
11
|
+
{ path: '/worktrees/existing-branch', branch: 'existing-branch' },
|
|
12
|
+
]),
|
|
13
|
+
create: vi.fn().mockImplementation(async (opts) => ({
|
|
14
|
+
id: 'mock-uuid-123',
|
|
15
|
+
path: opts.path,
|
|
16
|
+
branch: opts.branch,
|
|
17
|
+
})),
|
|
18
|
+
})),
|
|
19
|
+
};
|
|
20
|
+
});
|
|
21
|
+
describe('createOrFindWorktree', () => {
|
|
22
|
+
beforeEach(() => {
|
|
23
|
+
vi.clearAllMocks();
|
|
24
|
+
});
|
|
25
|
+
describe('existing worktree', () => {
|
|
26
|
+
it('should return existing worktree when branch already exists', async () => {
|
|
27
|
+
const result = await createOrFindWorktree({
|
|
28
|
+
cwd: '/project',
|
|
29
|
+
worktreeDir: '.worktrees',
|
|
30
|
+
branchName: 'existing-branch',
|
|
31
|
+
});
|
|
32
|
+
expect(result.isExisting).toBe(true);
|
|
33
|
+
expect(result.worktree.branch).toBe('existing-branch');
|
|
34
|
+
expect(result.worktree.path).toBe('/worktrees/existing-branch');
|
|
35
|
+
});
|
|
36
|
+
it('should match by path ending with branch name', async () => {
|
|
37
|
+
const result = await createOrFindWorktree({
|
|
38
|
+
cwd: '/project',
|
|
39
|
+
worktreeDir: '.worktrees',
|
|
40
|
+
branchName: 'existing-branch',
|
|
41
|
+
});
|
|
42
|
+
expect(result.isExisting).toBe(true);
|
|
43
|
+
});
|
|
44
|
+
});
|
|
45
|
+
describe('new worktree', () => {
|
|
46
|
+
it('should create new worktree when branch does not exist', async () => {
|
|
47
|
+
const result = await createOrFindWorktree({
|
|
48
|
+
cwd: '/project',
|
|
49
|
+
worktreeDir: '.worktrees',
|
|
50
|
+
branchName: 'new-branch',
|
|
51
|
+
});
|
|
52
|
+
expect(result.isExisting).toBe(false);
|
|
53
|
+
expect(result.worktree.branch).toBe('new-branch');
|
|
54
|
+
expect(result.worktree.path).toBe('/project/.worktrees/new-branch');
|
|
55
|
+
});
|
|
56
|
+
it('should pass issueNumber to create', async () => {
|
|
57
|
+
const result = await createOrFindWorktree({
|
|
58
|
+
cwd: '/project',
|
|
59
|
+
worktreeDir: '.worktrees',
|
|
60
|
+
branchName: 'issue-42-feature',
|
|
61
|
+
issueNumber: 42,
|
|
62
|
+
});
|
|
63
|
+
expect(result.isExisting).toBe(false);
|
|
64
|
+
expect(result.worktree.branch).toBe('issue-42-feature');
|
|
65
|
+
});
|
|
66
|
+
});
|
|
67
|
+
describe('error handling', () => {
|
|
68
|
+
it('should throw error when create fails', async () => {
|
|
69
|
+
vi.mocked(GitWorktreeAdapter).mockImplementationOnce(() => ({
|
|
70
|
+
list: vi.fn().mockResolvedValue([]),
|
|
71
|
+
create: vi.fn().mockRejectedValue(new Error('Git error: branch already exists')),
|
|
72
|
+
}));
|
|
73
|
+
await expect(createOrFindWorktree({
|
|
74
|
+
cwd: '/project',
|
|
75
|
+
worktreeDir: '.worktrees',
|
|
76
|
+
branchName: 'conflict-branch',
|
|
77
|
+
})).rejects.toThrow('Git error');
|
|
78
|
+
});
|
|
79
|
+
});
|
|
80
|
+
});
|
|
81
|
+
//# sourceMappingURL=createWorktree.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createWorktree.test.js","sourceRoot":"","sources":["../../../src/commands/start/createWorktree.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
export { parseIssueInput, type ParsedIssueInput, type ParseIssueOptions } from './parseIssueInput.js';
|
|
2
|
+
export { createOrFindWorktree, type WorktreeInfo, type CreateWorktreeOptions, type CreateWorktreeResult } from './createWorktree.js';
|
|
3
|
+
export { buildPrompt, buildSystemPrompt, formatDuration, type BuildPromptOptions, type BuildSystemPromptOptions } from './buildPrompt.js';
|
|
4
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,KAAK,gBAAgB,EAAE,KAAK,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAAE,KAAK,YAAY,EAAE,KAAK,qBAAqB,EAAE,KAAK,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AACrI,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAAE,KAAK,kBAAkB,EAAE,KAAK,wBAAwB,EAAE,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/start/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAiD,MAAM,sBAAsB,CAAC;AACtG,OAAO,EAAE,oBAAoB,EAA4E,MAAM,qBAAqB,CAAC;AACrI,OAAO,EAAE,WAAW,EAAE,iBAAiB,EAAE,cAAc,EAA0D,MAAM,kBAAkB,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Issue } from '@claudetree/shared';
|
|
2
|
+
export interface ParsedIssueInput {
|
|
3
|
+
issueNumber: number | null;
|
|
4
|
+
issueData: Issue | null;
|
|
5
|
+
branchName: string;
|
|
6
|
+
taskDescription: string | null;
|
|
7
|
+
}
|
|
8
|
+
export interface ParseIssueOptions {
|
|
9
|
+
token?: string;
|
|
10
|
+
branch?: string;
|
|
11
|
+
githubConfig?: {
|
|
12
|
+
owner: string;
|
|
13
|
+
repo: string;
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Parse issue input from CLI argument
|
|
18
|
+
* Handles: GitHub URLs, issue numbers, natural language tasks
|
|
19
|
+
*/
|
|
20
|
+
export declare function parseIssueInput(input: string, options: ParseIssueOptions): Promise<ParsedIssueInput>;
|
|
21
|
+
//# sourceMappingURL=parseIssueInput.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIssueInput.d.ts","sourceRoot":"","sources":["../../../src/commands/start/parseIssueInput.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAEhD,MAAM,WAAW,gBAAgB;IAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC;AAED,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;KACd,CAAC;CACH;AAeD;;;GAGG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAAC,gBAAgB,CAAC,CAwE3B"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import { GitHubAdapter } from '@claudetree/core';
|
|
2
|
+
/**
|
|
3
|
+
* Sanitize natural language input to a valid branch name
|
|
4
|
+
*/
|
|
5
|
+
function sanitizeBranchName(input) {
|
|
6
|
+
return input
|
|
7
|
+
.toLowerCase()
|
|
8
|
+
.replace(/[^a-z0-9가-힣\s-]/g, '') // Allow Korean characters
|
|
9
|
+
.replace(/\s+/g, '-')
|
|
10
|
+
.replace(/-+/g, '-')
|
|
11
|
+
.replace(/^-|-$/g, '')
|
|
12
|
+
.slice(0, 50); // Max length
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Parse issue input from CLI argument
|
|
16
|
+
* Handles: GitHub URLs, issue numbers, natural language tasks
|
|
17
|
+
*/
|
|
18
|
+
export async function parseIssueInput(input, options) {
|
|
19
|
+
const { token, branch: customBranch, githubConfig } = options;
|
|
20
|
+
// Case 1: GitHub URL
|
|
21
|
+
if (input.includes('github.com')) {
|
|
22
|
+
if (!token) {
|
|
23
|
+
throw new Error('GitHub token required for URL. Set GITHUB_TOKEN or use --token.');
|
|
24
|
+
}
|
|
25
|
+
const ghAdapter = new GitHubAdapter(token);
|
|
26
|
+
const parsed = ghAdapter.parseIssueUrl(input);
|
|
27
|
+
if (!parsed) {
|
|
28
|
+
throw new Error('Invalid GitHub URL format.');
|
|
29
|
+
}
|
|
30
|
+
const issueData = await ghAdapter.getIssue(parsed.owner, parsed.repo, parsed.number);
|
|
31
|
+
const branchName = customBranch ?? ghAdapter.generateBranchName(issueData.number, issueData.title);
|
|
32
|
+
return {
|
|
33
|
+
issueNumber: issueData.number,
|
|
34
|
+
issueData,
|
|
35
|
+
branchName,
|
|
36
|
+
taskDescription: null,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
// Case 2: Issue number
|
|
40
|
+
const parsedNumber = parseInt(input, 10);
|
|
41
|
+
const isNumber = !isNaN(parsedNumber);
|
|
42
|
+
if (isNumber) {
|
|
43
|
+
// Try to fetch issue data if we have GitHub config
|
|
44
|
+
if (token && githubConfig) {
|
|
45
|
+
const ghAdapter = new GitHubAdapter(token);
|
|
46
|
+
try {
|
|
47
|
+
const issueData = await ghAdapter.getIssue(githubConfig.owner, githubConfig.repo, parsedNumber);
|
|
48
|
+
const branchName = customBranch ?? ghAdapter.generateBranchName(issueData.number, issueData.title);
|
|
49
|
+
return {
|
|
50
|
+
issueNumber: issueData.number,
|
|
51
|
+
issueData,
|
|
52
|
+
branchName,
|
|
53
|
+
taskDescription: null,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// API failed, fallback to simple branch name
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Fallback: use issue number without API data
|
|
61
|
+
return {
|
|
62
|
+
issueNumber: parsedNumber,
|
|
63
|
+
issueData: null,
|
|
64
|
+
branchName: customBranch ?? `issue-${parsedNumber}`,
|
|
65
|
+
taskDescription: null,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
// Case 3: Natural language task
|
|
69
|
+
const taskDescription = input;
|
|
70
|
+
const branchName = customBranch ?? `task-${sanitizeBranchName(input)}`;
|
|
71
|
+
return {
|
|
72
|
+
issueNumber: null,
|
|
73
|
+
issueData: null,
|
|
74
|
+
branchName,
|
|
75
|
+
taskDescription,
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=parseIssueInput.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIssueInput.js","sourceRoot":"","sources":["../../../src/commands/start/parseIssueInput.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIssueInput.test.d.ts","sourceRoot":"","sources":["../../../src/commands/start/parseIssueInput.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { describe, it, expect, vi, beforeEach } from 'vitest';
|
|
2
|
+
import { parseIssueInput } from './parseIssueInput.js';
|
|
3
|
+
import { GitHubAdapter } from '@claudetree/core';
|
|
4
|
+
// Mock GitHubAdapter
|
|
5
|
+
vi.mock('@claudetree/core', async () => {
|
|
6
|
+
const actual = await vi.importActual('@claudetree/core');
|
|
7
|
+
return {
|
|
8
|
+
...actual,
|
|
9
|
+
GitHubAdapter: vi.fn().mockImplementation(() => ({
|
|
10
|
+
parseIssueUrl: vi.fn().mockImplementation((url) => {
|
|
11
|
+
const match = url.match(/github\.com\/([^/]+)\/([^/]+)\/(issues|pull)\/(\d+)/);
|
|
12
|
+
if (!match)
|
|
13
|
+
return null;
|
|
14
|
+
return {
|
|
15
|
+
owner: match[1],
|
|
16
|
+
repo: match[2],
|
|
17
|
+
number: parseInt(match[4], 10),
|
|
18
|
+
};
|
|
19
|
+
}),
|
|
20
|
+
getIssue: vi.fn().mockResolvedValue({
|
|
21
|
+
number: 42,
|
|
22
|
+
title: 'Add feature X',
|
|
23
|
+
body: 'We need to implement feature X',
|
|
24
|
+
labels: ['enhancement'],
|
|
25
|
+
state: 'open',
|
|
26
|
+
url: 'https://github.com/owner/repo/issues/42',
|
|
27
|
+
}),
|
|
28
|
+
generateBranchName: vi.fn().mockImplementation((num, title) => {
|
|
29
|
+
return `issue-${num}-${title.toLowerCase().replace(/\s+/g, '-').slice(0, 30)}`;
|
|
30
|
+
}),
|
|
31
|
+
})),
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
describe('parseIssueInput', () => {
|
|
35
|
+
beforeEach(() => {
|
|
36
|
+
vi.clearAllMocks();
|
|
37
|
+
});
|
|
38
|
+
describe('GitHub URL input', () => {
|
|
39
|
+
it('should parse GitHub issue URL and fetch issue data', async () => {
|
|
40
|
+
const result = await parseIssueInput('https://github.com/owner/repo/issues/42', { token: 'fake-token' });
|
|
41
|
+
expect(result.issueNumber).toBe(42);
|
|
42
|
+
expect(result.issueData).toBeDefined();
|
|
43
|
+
expect(result.issueData?.title).toBe('Add feature X');
|
|
44
|
+
expect(result.branchName).toMatch(/^issue-42/);
|
|
45
|
+
});
|
|
46
|
+
it('should throw error when token not provided for URL', async () => {
|
|
47
|
+
await expect(parseIssueInput('https://github.com/owner/repo/issues/42', {})).rejects.toThrow('GitHub token required');
|
|
48
|
+
});
|
|
49
|
+
it('should throw error for invalid GitHub URL', async () => {
|
|
50
|
+
await expect(parseIssueInput('https://github.com/invalid-url', { token: 'fake-token' })).rejects.toThrow('Invalid GitHub URL');
|
|
51
|
+
});
|
|
52
|
+
it('should use custom branch name when provided', async () => {
|
|
53
|
+
const result = await parseIssueInput('https://github.com/owner/repo/issues/42', { token: 'fake-token', branch: 'custom-branch' });
|
|
54
|
+
expect(result.branchName).toBe('custom-branch');
|
|
55
|
+
});
|
|
56
|
+
});
|
|
57
|
+
describe('Issue number input', () => {
|
|
58
|
+
it('should parse issue number with GitHub config', async () => {
|
|
59
|
+
const result = await parseIssueInput('42', {
|
|
60
|
+
token: 'fake-token',
|
|
61
|
+
githubConfig: { owner: 'owner', repo: 'repo' },
|
|
62
|
+
});
|
|
63
|
+
expect(result.issueNumber).toBe(42);
|
|
64
|
+
expect(result.issueData).toBeDefined();
|
|
65
|
+
expect(result.branchName).toMatch(/^issue-42/);
|
|
66
|
+
});
|
|
67
|
+
it('should parse issue number without GitHub config (fallback branch)', async () => {
|
|
68
|
+
const result = await parseIssueInput('42', {});
|
|
69
|
+
expect(result.issueNumber).toBe(42);
|
|
70
|
+
expect(result.issueData).toBeNull();
|
|
71
|
+
expect(result.branchName).toBe('issue-42');
|
|
72
|
+
});
|
|
73
|
+
it('should gracefully handle API failure', async () => {
|
|
74
|
+
// Mock getIssue to throw
|
|
75
|
+
const mockGetIssue = vi.fn().mockRejectedValue(new Error('API error'));
|
|
76
|
+
vi.mocked(GitHubAdapter).mockImplementationOnce(() => ({
|
|
77
|
+
parseIssueUrl: vi.fn(),
|
|
78
|
+
getIssue: mockGetIssue,
|
|
79
|
+
generateBranchName: vi.fn(),
|
|
80
|
+
createPR: vi.fn(),
|
|
81
|
+
getDefaultBranch: vi.fn(),
|
|
82
|
+
listIssues: vi.fn(),
|
|
83
|
+
octokit: {},
|
|
84
|
+
}));
|
|
85
|
+
const result = await parseIssueInput('42', {
|
|
86
|
+
token: 'fake-token',
|
|
87
|
+
githubConfig: { owner: 'owner', repo: 'repo' },
|
|
88
|
+
});
|
|
89
|
+
expect(result.issueNumber).toBe(42);
|
|
90
|
+
expect(result.issueData).toBeNull();
|
|
91
|
+
expect(result.branchName).toBe('issue-42');
|
|
92
|
+
});
|
|
93
|
+
});
|
|
94
|
+
describe('Natural language task input', () => {
|
|
95
|
+
it('should parse natural language task as branch name', async () => {
|
|
96
|
+
const result = await parseIssueInput('add user authentication', {});
|
|
97
|
+
expect(result.issueNumber).toBeNull();
|
|
98
|
+
expect(result.issueData).toBeNull();
|
|
99
|
+
expect(result.taskDescription).toBe('add user authentication');
|
|
100
|
+
expect(result.branchName).toBe('task-add-user-authentication');
|
|
101
|
+
});
|
|
102
|
+
it('should sanitize special characters in task name', async () => {
|
|
103
|
+
const result = await parseIssueInput('Fix: bug [critical] #123!', {});
|
|
104
|
+
expect(result.branchName).toBe('task-fix-bug-critical-123');
|
|
105
|
+
});
|
|
106
|
+
it('should handle Korean characters', async () => {
|
|
107
|
+
const result = await parseIssueInput('로그인 기능 추가', {});
|
|
108
|
+
expect(result.taskDescription).toBe('로그인 기능 추가');
|
|
109
|
+
expect(result.branchName).toBe('task-로그인-기능-추가');
|
|
110
|
+
});
|
|
111
|
+
it('should truncate long task names', async () => {
|
|
112
|
+
const longTask = 'this is a very long task description that should be truncated for branch name';
|
|
113
|
+
const result = await parseIssueInput(longTask, {});
|
|
114
|
+
expect(result.branchName.length).toBeLessThanOrEqual(55); // 'task-' + 50 chars
|
|
115
|
+
});
|
|
116
|
+
});
|
|
117
|
+
});
|
|
118
|
+
//# sourceMappingURL=parseIssueInput.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseIssueInput.test.js","sourceRoot":"","sources":["../../../src/commands/start/parseIssueInput.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"start.d.ts","sourceRoot":"","sources":["../../src/commands/start.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAmKpC,eAAO,MAAM,YAAY,SAsgBrB,CAAC"}
|